Il s'agit d'une méthode (si ce n'est la méthode) d'intégration numéric de fonction, dans le cas univarié(f(x)dx)
Source / Exemple :
#include "iostream.h"
#include "math.h"
#include "Romberg.h"
int main()
{
// tableau contenant des paramêtres qui n'entre pas dans l'intégration
double * Tab;
Tab = new double[2];
//constructeur
Romberg R(1,2,Tab);
cout << endl
<<R.RI();
cout << endl;
delete [] Tab;
return 0;
}
//voila pour le .h qui contient la définition de la classe
#ifndef Romberg_H
#define Romberg_H
#include "math.h"
#define Tol 0.000000001
class Romberg
{
public: double a; //borne inf
double b; //borne sup
double * para; //pointeur de tableau contenant les paramétres additionnelles de la fonction
Romberg(double A, double B, double *Para)
{
a=A;
b=B;
para=Para; //ici il n'y a qu'1 paramétre
}
//fonction à intégrer et à editer (ici f(x)=1/(x^k) + g
//on intégre par rapport à x, k et g sont des paramêtres additionnelles
double ff(double i)
{return pow(i,- *para)+ *(para+1);}
//fin de la fonction
double TR(double n)
{
double i, temp, H;
temp=0;
H = (b - a) / n;
for(i=a; i<=b; i+=H)
{
if(i==a || i==b )
{temp +=ff(i) / 2;}
else
{temp +=ff(i);}
}
return temp * H;
}
double Ink(double R1,double R2,int k)
{
return (pow(4,k) * R1 - R2) / (pow(4,k) - 1);
}
double RI()
{
const int MaxIter = 11;
double temp;
double Mresult[MaxIter][MaxIter];
int n, k, i, m;
m = 0;
for(k=0;k<MaxIter;k++)
{
n = static_cast<int>(pow(2,k));
if(n==1) {Mresult[m][0] = TR(n);}
else {Mresult[m][0] = TR(n);}
for(i=1;i<=k;i++)
{Mresult[m][i] = Ink(Mresult[m][i-1], Mresult[m - 1][i-1], i);}
temp= fabs(Mresult[m-1][m-1] - Mresult[m][m]);
if(temp<Tol && m>=2){k = 10;}
temp= Mresult[m][m];
m++;
}
return temp;
}
};
#endif
Conclusion :
Le zip contient le document qui m'a servit a creer ce code.
De plus vous pouvez trouvez un alpgorithme de Romberg dans "Numerical Recepices" mais sensiblement différent. Il utilise notament une interpolation polynomial pour une raison qui m'échape (cf: pdf)
20 déc. 2005 à 14:16
20 déc. 2005 à 13:29
Etant une "quiche" en C++, je ne peux que lancer tes idées très théoriques.
Si tu arrives à faire quelques chose d'intéressant, je suis preneur car je voudrais créer une DLL de calcul numérique.
20 déc. 2005 à 12:56
20 déc. 2005 à 09:46
20 déc. 2005 à 09:24
L'évaluation des polynômes peut être faite très rapidement, ainsi qu'une interpolation. Cela peut être un moyen d'accélérer l'intégration.
De plus, l'interpolation est bien aimée en pratique car on n'a pas toujours la formule d'une fonction mais simplement certaines de ses valeurs.
Commentaire 2 : Qu'est-ce que la méthode de Runge-Kutta ?
Cette méthode sert à trouver des solutions d'équations différentielles ordianires du type F(x,y',y'',..)=0
Sinon bon code.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.