Integration numerique par la methode de simpson (c)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 30 282 fois - Téléchargée 35 fois

Contenu du snippet

METHODE DE SIMPSON:
C'est une méthode de Newton-Cotes: on subdivise l'intervalle d'intégration [a,b] en n sous-intervalles de longueur égale h.

h=(b-a)/n
xi = a+i*h avec : i=0,...,n

Sur chaque sous-intervalle [xi, xi+2], avec i pair, on remplace f par son polynôme d'interpolation de degré 2 (arc de la parabole) passant par les points (xi, f(xi)), (xi+1, f(xi+1)) et (xi+2, f(xi+2)). Conséquence n doit être pair.
Notation: I(a,b)=>f(x): integrale de a à b de f(x).
S(i=1,n): Somme de i=1 à n.

FORMULE DE BASE:
I(xi, xi+2)=>f(x) = h/3*[f(xi) + 4*f(xi+1) + f(xi+2) ]; i= 0,..., n-2, i pair.

FORMULE COMPOSITE:
I(a,b)=>f(x) = h/3*[f(a) + f(b) + 2*S(i=1, n/2-1)f(a+2*i*h) + 4*S(i=1,n/2)f(a + (2*i-1)*h)]

Source / Exemple :


#include <stdio.h>
#include <math.h>

double F(double x)
{
  return exp(-x*x/2.0);
}

double simpson(int N, double A, double B)
{
  double X, h, Iapp0, Iapp1, Iapp2, Iapp;
  int NN, i;

  // Etape 1
  h = (B - A) / N;

  // Etape 2
  Iapp0 = F(A) + F(B);
  Iapp1 = 0.0;
  Iapp2 = 0.0;

  // Etape 3
  NN = N -1;
  for (i=1; i<=NN; i++)
    {
      // Etape 4
      X = A + i*h;
      // Etape 5
      if ((i%2) == 0)
        Iapp2 = Iapp2 + F(X);
      else
        Iapp1 = Iapp1 + F(X);
    }

  // Etape 6
  Iapp = (Iapp0 + 2.0 * Iapp2 + 4.0 * Iapp1) * h / 3.0;

  // Etape 7
  return (Iapp);

}
int main(int argc, char *argv[])
{
  int i,n;
  double a,b,spmthd;

  a=1.0; /* Borne inferieure */
  b=2.0; /* Borne superieure */
  n=10; /* Nombre d'iteration  */

  simpson(n,a,b);
  spmthd=simpson(n,a,b);  /* on stock dans une variable tampon */
  printf("\n %.16e",spmthd); /* on affiche le résultat */
  return 0;
}

A voir également

Ajouter un commentaire

Commentaire

cs_valentin12
Messages postés
2
Date d'inscription
mercredi 9 janvier 2013
Statut
Membre
Dernière intervention
19 janvier 2013
-
bonsoir
je souhaite savoir s'il est possible de mettre ton programme de Simpson en ordre 4?,
et aussi de savoir si ton programme est dans un cas général c'est à dire quelque soit l'intégrale choisie?
car je cherche à écrire un programme avec la méthode de Simpson d'ordre 4, est je suis vraiment perdu
merci de m'orienté pour que je puisse avancer
merci

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.