El método se Simpson

prev.gif (997 bytes)chapter.gif (1105 bytes)home.gif (1232 bytes)next.gif (1211 bytes)

Integración numérica

El método de Simpson

La jerarquía de clases

El código fuente


El método de Simpson

En este procedimiento, se toma el intervalo de anchura 2h, comprendido entre xi y xi+2, y se sustituye la función f(x) por la parábola que pasa por tres puntos (xi, yi), (xi+1, yi+1), y (xi+2, yi+2). El valor del área aproximada, sombreada en la figura, se calcula con un poco más de trabajo y el resultado es

FIG15_02.gif (2880 bytes)

La simple inspección visual de esta figura y la que describe el procedimiento de los trapecios nos confirma que el método de Simpson deberá ser mucho más exacto que el procedimiento del del trapecio. El área aproximada en el intervalo [a, b] es

bien, agrupando términos

El primer paréntesis, contiene la suma de los extremos, el segundo, la suma de los términos de índice impar, y el tercero la suma de los términos de índice par. En el método de Simpson, el número de divisiones n debe de ser par. En el caso de que el usuario introduzca un número impar el programa lo convierte en el número par siguiente.

 

La jerarquía de clases

Crearemos una clase base abstracta denominada Simpson, que defina la función miembro integral que calcula la integral definida de cualquier función f(x) por el procedimiento de Simpson.

public abstract class Simpson {
    public double integral(double a, double b, int n){
        if(n%2==1) n++;     
        double h=(b-a)/n;
        double suma=f(a)+f(b);
        for(int i=1; i<n; i+=2){
            suma+=4*f(a+i*h);
        }
        for(int i=2; i<n; i+=2){
            suma+=2*f(a+i*h);
        }
        return (suma*h/3);
    }
    abstract public double f(double x);
}

En la clase derivada Funcion de Simpson definiremos la función f(x) cuya integral deseamos calcular.

public class Funcion extends Simpson{
    public double f(double x){
        return Math.cos(x);
    }
}

Para hallar la integral definida de esta función entre los límites 0 y p /2, creamos un objeto de la clase Funcion mediante new y llamamos desde este objeto a la función integral pasándole en el primer argumento el límite inferior 0, en el segundo el límite superior, p /2, y por último, el número 10 de divisiones del intervalo.

        double resultado=new Funcion().integral(0.0, Math.PI/2, 10);
        System.out.println("integral "+resultado);

Comparando los resultados obtenidos por este procedimiento y por el procedimiento de los trapecios podemos comprobar la mayor exactitud de éste último.

 

El código fuente

disco.gif (1035 bytes) Simpson.java, Funcion.java, IntegralApp2.java