La methode de Gauss-Legendre de rang k consiste à remplacer la fonction f par son polynôme d'interpolation de degré k en passant par les points d'abscisses qui sont les racines du polynôme de Legendre de degré k+1.
Polynôme de Legendre s'écrit : Pk(x) = 1/(2^k*k!)* dk/dx^k[x²-1]^k; k=0,...
soit:
P0(x) = 1, P1(x)=x, P2(x) = 1/2(3x²-1)... etc
relation de recurrence:
k*Pk(x) = (2k-1)*xPk-1(x)-(k-1)Pk-2(x); k = 2,3...
notons rkj les racines de Pk+1(x); j=0,...,k
L'intégrale I est approchée par :
Gk = (b-a)/2 * Somme(j=0,k)de_Alpha_k_j*[((b-a)/2)*rkj + (a+b)/2] avec:
Alpha_k_j = [ 2*(1-rkj²) / ((k+1)²[Pk(rkj)]²) ]
Source / Exemple :
#include <stdio.h>
#include <math.h>
double f(double x) /*fonction à intégrer */
{
return(exp(-x*x/2.0));
}
double pol_leg(int k,double x)
{
int i;
double p,p1,p2;
p=1;p1=0;p2=0;
for(i=1;i<=k;i++)
{
p2=p1;p1=p;
p=((2*i-1)*x*p1-(i-1)*p2)/i;
}
return(p);
}
double gauss_legendre(double a,double b,int k)
{
int j;
double h,r,alpha,pol,s,t,racine[5];
switch(k) {
case 0:racine[0]=0.0;break;
case 1:racine[0]=1.0/sqrt(3.0);racine[1]=-racine[0];break;
case 2:racine[0]=sqrt(3.0/5.0);racine[1]=0.0;racine[2]=-racine[0];break;
case 3:racine[0]=sqrt((15+2*sqrt(30))/35);racine[1]=sqrt((15-2*sqrt(30))/35);
racine[2]=-racine[1];racine[3]=-racine[0];break;
case 4:racine[0]=sqrt((35+2*sqrt(70))/63);racine[1]=sqrt((35-2*sqrt(70))/63);
racine[2]=0.0;racine[3]=-racine[1];racine[4]=-racine[0];break;
}
h=b-a;
t=0;
s=0.0;
for(j=0;j<=k;j++)
{
r = racine[j];
pol = pol_leg(k,r);
alpha = 2.0*(1.0-r*r)/((k+1)*(k+1)*pol*pol);
s += alpha*f(h/2*(1+r)+a);
}
t += h/2*s;
return(t);
}
int main(int argc, char *argv[])
{
int k;
double a,b,t;
a=1;b=2.0; /* Borne d'intégration [a;b] */
printf("Méthode de Gauss-Legendre\n");
printf("\nRang k Valeur calculee \n");
for(k=0;k<=4;k++)
{
t=gauss_legendre(a,b,k);
printf("%4d %lf \n",k,t);
}
return 0;
}
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.