
|
|
Le défaut évident du calcul approché d'une intégrale par la méthode des trapèzes (et a fortiori par celle, élémentaire, des rectangles) est de remplacer grossièrement un arc de courbe MiMi+1 par le segment [MiMi+1]. Ces méthodes fort simples à programmer restent cependant très imprécises. Simpson apporte une correction très efficace correspondant à la méthode de Newton-Cotes (interpolation de degré 2) :
Soit f une fonction continue sur [a,b], il s'agit d'approcher l'intégrale :
La méthode de Simpson consiste à grouper trois points consécutifs de la courbe Mi, Mi+1 et Mi+2 et de remplacer l'arc de courbe passant par ces trois points par un arc de parabole. Notons que si les points Mi, Mi+1 et Mi+2 sont alignés, le calcul des paramètres de la parabole d'équation y = mx2 + px + q, passant par ces points conduira à m = 0. Par suite, quitte à parler de parabole dégénérée, ce cas n'est pas singulier.

Notons Mi(xi,yi), i = 1,2 ou 3, trois points consécutifs de la courbe représentative de la fonction f. Les paramètres m, p et q de la parabole cherchée sont solutions du système :

h désignant le pas x3 - x2 = x2 - x1 = (b - a)/2 de la subdivision, l'intégrale de la fonction mx2 + px + q entre x1 et x3 peut s'écrire :
Compte tenu du système ci-dessus, que l'on ne résout surtout pas, on fait apparaître y1 + y3 dans le crochet et en remarquant que x1 = x2 - h et x3 = x2 + h, on obtient :
Ce qui peut s'écrire plus élégamment :
|
|
En conséquence, pour une intégration
sur l'intervalle [a,b], en regroupant les points de la
subdivision trois par trois en commençant à
xo =
a : (xo, x1, x2) ,
(x2, x3, x4) , (x4,
x5, x6) , etc.
On remarque que le nombre n doit être pair et en utilisant la relation de Chasles pour les intégrales, on obtient, avec h = (b - a)/n, la formule d'approximation de Simpson :

| Programmation de la méthode en JavaScript avec contrôle des bornes : |
|
<SCRIPT
LANGUAGE=JavaScript> var fonc; var pi=3.141592653589793, e=2.7182818284590452; function sim() { with (Math) { fonc="1/x";a=1 ; b="" ; n=100; fonc=prompt("Entrez votre fonction :",fonc);if (fonc==null) {return} a=eval(prompt("Entrez a :",a));if (a==null) {return} fa="";fa=f(a) if(isNaN(fa) || fa==Infinity) // f(a) non calculable ou infini { fa=eval(prompt("Il y a un souci en "+a+" !!! Entrez f(a) :",fa)) } if (fa==null) {return} b=eval(prompt("Entrez b :",b));if (b==null) {return} fb="";fb=f(b); if(isNaN(fb) || fb==Infinity) // f(a) non calculable ou infini { fb=eval(prompt("Il y a un souci en "+b+" !!! Entrez f(b) :",fb)) } if (fb==null) {return} n=prompt("Nombre de points n pair = ",n); if (n==null) {return} else {n =eval(n)}; h=(b-a)/n;j=fa for(i=1;i<=n-2;i=i+2) {x=a+i*h;j=j+4*f(x)+2*f(x+h)} j=j+4*f(b-h)+f(b); alert("Integrale = "+j*h/3) } } function f(x) { with(Math){y=eval(fonc) return y} } </SCRIPT> |
Par défaut f(x) = 1/x. C'est dire que nous calculons des approximations du logarithme népérien de x en donnant à la borne inférieure a la valeur 1 et en donnant à b une valeur strictement positive de notre choix. Le programme traite les intégrales généralisées convergentes. Par exemple l'intégrale de sin(x)/x sur [0,π] en prolongeant sin(x)/x par 1 en x = 0, de valeur approchée 1,8519. |
Le programme est nettement plus performant que la
méthode des trapèzes :
avec seulement 20 points de subdivision, ln
2 est calculé avec 6 décimales.
| Calcul de l'erreur théorique maximale : |

est exacte pour les polynômes de d°
2. On vérifiera qu'elle est
aussi exacte pour les polynômes de
degré 3 en testant la formule
J = (y1+ 4y2 + y3)
h/3 sur
le monôme f(x) = x3. Pour cette raison, on appelle parfois la
formule de Simpson : formule des trois niveaux.
Étude : On suppose ici que f est au moins de classe C4. Sur un intervalle [xi - h,xi + h], subdivision de 3 points xi - h, xi, xi + h, l'erreur commise par l'approximation de Simpson est :
![]()
Développons le second membre à l'ordre 3 par la formule de Taylor avec reste de Lagrange :

Le crochet multiplié par h/3 est donc égal à :
![]()
Développons maintenant f(x) à l'ordre 3 dans le voisinage [xi - h,xi + h] de xi, posons ensuite t = x - xi et intégrons entre les nouvelles bornes -h et h :

Finalement :
![]()
En notant M le maximum de |f (4)(x)| sur l'intervalle [a,b], l'erreur sur [xi - h, xi + h] ne peut donc excéder ei(h) = 4Mh5/90. Le nombre n de subdivisions est pair : si n = 2p, i varie de 0 à p - 1, p = n/2 et h = (b - a)/n.
Conclusion :
L'erreur globale ε ne peut donc pas dépasser p x 4Mh5/90, soit :
Ainsi, l'erreur théorique est en 1/n4 (par exemple, en doublant n, l'erreur théorique est divisé par 16) ce qui est fort précis en comparaison de la méthode des trapèzes (en 1/n2) ou celle des rectangles (en 1/n). Mais gare aux erreurs d'arrondi que pourrait engendrer l'ordinateur... Toujours s'assurer d'un encadrement de la valeur exacte. La méthode des trapèzes pour une fonction monotone permet cet encadrement (quitte à découper l'intervalle d'intégration). La méthode de Poncelet
Application de la méthode à la
fonction de répartition de la loi normale :
Autres méthodes :