begin process at 2012 05 27 20:03:19
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths & Algorithmes

 > INTEGRATION NUMERIQUE METHODE DE GAUSS-LEGENDRE

INTEGRATION NUMERIQUE METHODE DE GAUSS-LEGENDRE


 Information sur la source

 Description

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

  • #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;
  • }
#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;
}



 Sources du même auteur

Source avec une capture FRACTALE NEWTON-RAPHSON VERSION GLUT
Source avec Zip FAST FOURIER TRANSFORM
TRANSFORMEE DE FOURIER DISCRETE
Source avec une capture FRACTALE TREE (ARBRE) VERSION GLUT
Source avec une capture COURBE DE GUMOWSKI & MIRA VERSION GLUT

 Sources de la même categorie

Source avec Zip UN EXAMPLE D'APPLICATION EN CUDA DE L'ALGORITHME DE SCAN POU... par oguzaras
Source avec Zip Source avec une capture CHIFFREMENT DE VIGENERE par lajouad
Source avec Zip Source avec une capture ANALYSE SYNTAXIQUE par lajouad
Source avec Zip Source avec une capture STRUCTURE D'UNE MATRICE PAR LES LISTE LINÉAIRE (NON CONTUGUS... par benzarabel
Source avec Zip Source avec une capture DESSINER UNE ARBRE BINAIRE( MODE CONSOLE): par benzarabel

Commentaires et avis

Commentaire de dletozeun le 27/11/2004 19:15:33

Huurmmff... pas tres explicite tout ca...

Ca donne l'integrale approchée d'une fonction entres 2 bornes?
Est ce qu'on peut avec ca calculer la surface d'un objet plan ayant n'importe quelle forme?

Commentaire de allouchi_112 le 01/01/2005 20:08:37

hi
je veux la programmation de la methode de gauss en langauge C

Commentaire de latif_gr2000 le 22/04/2005 17:13:24

salut pour tous
j'ai besoin d'un programme en longage c avec     algorithme
pour la mehode de maximisation simplexe

Commentaire de dletozeun le 23/04/2005 19:10:26

s'il te plait

c'est quoi la maximisation simplexe ?

Commentaire de Jarod1980 le 23/04/2005 19:25:32

Je crois que c'est l'algorithme primal du simplexe de Dantzig.
De toute façon il y a une rubrique spéciale sur cppfrance qui s'appelle forum où l'on peut poser ce genre de questions.

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,577 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales