En càlcul numèric, el mètode de Simpson o regla de Simpson és un mètode d'integració numèrica que dona una aproximació numèrica de la integral definida. Específicament, és la següent aproximació:
Rep el seu nom en honor de Thomas Simpson.[1]
El mètode de Simpson es pot obtenir de diverses maneres.
Una forma d'obtenir-la es basa a substituir la funció a integrar per la funció polinòmica de segon grau que té els mateixos valors que als extrems a i b i al mig m = (a+b) / 2. Es pot fer servir la interpolació polinòmica de Lagrange per a trobar una expressió d'aquest polinomi,
Un càlcul fàcil (però pesat) mostra que
Una altra forma d'obtenir el mètode de Simpson és calculant la mitjana aritmètica ponderada de dues aproximacions més simples: el mètode rectangular
I el mètode trapezial
Els errors d'aquestes aproximacions són
respectivament. D'aquí en resulta que el terme principal de l'error s'anul·la si es pren la mitjana aritmètica ponderada
Aquesta mitjana aritmètica ponderada és exactament el mètode de Simpson.
Emprant una altra aproximació (per exemple, el mètode trapezial amb doble quantitat de punts), és possible d'obtenir una mitjana aritmètica ponderada adequada per eliminar un altre terme de l'error. Aquest és el mètode de Romberg.
El tercer mètode comença a partir de la hipòtesi que
Els coeficients α, β i γ es poden determinar imposant que aquesta aproximació sigui exacta pel cas de polinomis de segon grau. Això porta al mètode de Simpson.
L'error en aproximar una integral amb el mètode de Simpson és
on és algun nombre entre i .[3]
L'error és (asimptòticament) proporcional a . En canvi, els procediments d'obtenció emprats anteriorment, suggerien una error proporcional a . El mètode de Simpson guanya un ordre extra perquè els punts en què s'avalua l'integrand, estan distribuïts simètricament en l'interval [a, b].
Si l'interval d'integració és "petit" en algun sentit, llavors el mètode de Simpson donarà una aproximació adequada de la integral exacta. Petit, el que en realitat significa és que la funció a integrar sigui relativament suau sobre l'interval . Per aquest tipus de funcions, una interpolació amb un polinomi de segon grau suau, com el que es fa servir en el mètode de Simpson, donarà bons resultats.
En canvi, sovint el cas és que la funció que s'està intentant integrar no és suau sobre l'interval. Típicament, això significa que la funció és altament oscil·lant o que no té derivades a certs punts. En aquests casos, el mètode de Simpson pot donar resultats molt pobres. Una forma habitual de manejar aquest problema és a base de trencar l'interval en un determinat nombre de subintervals petits. Llavors s'aplica el mèode de Simpson a cada subinterval, i se sumen els resultats per a obtenir una aproximació de la integral sobre l'inteval complet. D'aquesta mena d'aproximació sen diu el mètode de Simpson compost.
Suposeu que l'interval es parteix en subintervals, amb un nombre parell. Llavors, el mètode de Simpson compost dona l'aproximació
on per amb ; en particular, i . La fórmula anterior també es pot escriure com
L'error comès pel mètode de Simpson compost està fitat (en valor absolut) per
on és el pas, donat per [4]
Aquesta formulació parteix l'interval en subintervals de la mateixa longitud. A la pràctica, sovint és avantatjós emprar subintervals de diferents longituds, i concentrar els esforços en els llocs on l'integrand té menys bon comportament. Això porta al mètode de Simpson adaptatiu.
Aquí hi ha una implementació del mètode de Simpson en Python.
def metode_de_simpson(f, a, b):
"Aproxima la integral definida de f des de a fins a b pel mètode de Simpson."
c = (a + b) / 2.0
h3 = abs(b - a) / 6.0
return h3 * (f(a) + 4.0*f(c) + f(b))
# Càlcul de la integral de sin(x) des de 0 fins a 1
from math import sin
print metode_de_simpson(sin, 0, 1)
Aquesta és la versió del mètode de Simpson compost, també en Python.
def metode_de_simpson_compost(f,a,b,n):
"Aproxima la integral definida de f des de a fins a b amb el mètode de Simpson
compost, dividint l'interval en n parts."
dx = (float(b)-a)/n
i = 0
fks = 0.0
while i<=n:
xk = a+i*dx
if i==0 or i==n:
fk = f(xk)
elif i%2 == 1:
fk = 4*f(xk)
else:
fk = 2*f(xk)
fks += fk
i += 1
return (dx/3)*fks
# Càlcul de la integral de sin(x) des de 0 fins a 1
from math import sin
print metode_de_simpson_compost(sin, 0, 1, 10000)
Integrant sin(x) des de 0 fins a 1 amb el primer codi dona 0.459862189871, el segon dona 0.459697694132 mentre que el verdader valor és 1 − cos(1) = 0.45969769413... La versió composta del mètode dona una aproximació notablement millor.
El mètode de Simpson s'esmenta en molts llibre de text de càlcul numèric: