Lunes, 01 Agosto 2016 00:00

Integrales (definidas) en Java (Metodo de Simpson)

Escrito por 
Valora este artículo
(0 votos)

El cálculo de área es unos de los problemas más frecuentes en Análisis Matemático, siempre se trata de calcular el área que pasa que es cortada por una curva  representada por una función f(x) y los limites xo y x1.

 

Un típico ejemplo de cálculo de area seria el de la siguiente figura:

A= area a calcular.
X0= límite inferior.
X1= límite superior.

El cálculo de esta área generalmente se resuelve de las siguientes maneras:

  • Soluciones algebraicas: se obtiene una fórmula precisa y exacta para el área solicitada.
  • Soluciones numéricas: se calcula numéricamente, mediante un método numérico una estimación del área, no es exacta dependiendo del método a utilizar se puede llegar a obtener muy buenos resultados.

 

Lo ideal sería siempre utilizar las soluciones algebraicas, ya que estas son perfectas, nos dan un resultado exacto, pero hay veces en que la función  es demasiada compleja que se hace difícil y hasta imposible realizar el cálculo algebraico, de tal modo que no queda otra solución que aplicar métodos numéricos que se aproximen a lo que buscamos.
En este post lo que haremos es tratar de explicar el método de Simpson simple y desarrollar un sencillo programita en Java que lo haga por nosotros.

METODO DE SIMPSON, deducción a partir de la ecuación de la parábola

Sabemos que la ecuación de una parábola tiene la siguiente forma

 
Esta parábola delimitada por los limites, uno inferior –h  y otro superior h, cuya mitad será 0, tal como se muestra en la siguiente figura
 


Procedemos a integrar dicha parábola entre los limites –h y h



Reemplazamos los limites tenemos



Suprimimos los paréntesis obtenemos



Simplificamos términos



Aplicamos algunos artificios matemáticos para acomodar la ecuación, en este caso sacamos factor común a los dos miembros

 
Que es nuestra ecuación que denominaremos ecuación Ec. 1

 Ahora bien consideremos la figura anterior, en la que los límites que cortan de nuestra curva f(x) coinciden a los puntos de nuestra parábola cortada por Xi, entonces  podemos decir:


Entonces para nuestra curva f(x) se puede decir que los valores de f(-h), f(0), f(h) son los siguientes:


Que es lo mismo a decir

Entonces acomodando convenientemente los términos tenemos tenemos



Miramos la ecuación Ec.1 , la podemos expresar de la siguiente manera, en este caso descomponemos unos de sus factores:



Ahora vemos que podemos reemplazar Ec.2 y Ec.3  en  Ec.4. Observemos los términos iguales



Lo reemplazamos y obtenemos lo que buscamos


Bien con esta ecuación obtendremos el área aproximada de una figura, para comprobar lo anterior haremos  un ejemplo simple de un cálculo de área de la siguiente figura


 
En donde

X0=0
X1=2

El valor de su área utilizando el cálculo algebraico es el siguiente:

 

Reemplazando los límites

 


Ahora utilizamos el método de Simpson-EJEMPLO

 

En donde el valor para de h para nuestros límites es igual a

-h=0
h=1
f(x)=x 2

Reemplazamos


Y observamos que nos da igual al cálculo algebraico, esto porque la curva de la función F(x), es igual a la parábola analizada, pero solo paso en este caso si analizaríamos una función por ej., una exponencial ya no nos daría una igualdad ya que está entre los limites puede tener picos mínimos o máximos, así como  también puntos de inflexión.
Ahora codifiquemos un poco en JAVA para  automatizar esto. Implementamos la siguiente clase.
En este caso utilizamos el Netbeans, nos creamos un proyecto del tipo Aplicación Java, vamos a Archivo->Proyecto Nuevo y elegimos del tipo Aplicación  Java

Luego creamos el proyecto, en mi caso le doy el nombre Integrales

Ahora ya tenemos nuestro proyecto creado, el próximo paso a seguir es incluir nuestra clase “Funcion” Que la podemos conseguir en este post

-  http://compujuy.com.ar/blogs/item/41-valor-de-una-funcion-matematica-en-java

Ahora creamos una clase Integral con el siguiente codigo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package integrales;
 
public class Integral {
  private String h0;
  private String h1;
  private String h2;
  private String y0;
  private String y1;
  private String y2;
  private String area;
 
  public Integral() {
  }
  public String CalcularIntegral(String funcion, String h0, String h2){
      this.h0=h0;//inicializamo los limites
      this.h2=h2;
      this.h1=(Double.parseDouble(this.h2)/2)+"".trim();
      Funcion f=new Funcion();
      //calculamos los valores para los y
      this.y0=f.evaluar(funcion,this.h0);
      this.y1= ((Double.parseDouble(f.evaluar(funcion,this.h1)))*4)+"".trim();
      this.y2=f.evaluar(funcion,this.h2);
      this.area=((Double.parseDouble(this.h1)/3)*
      (Double.parseDouble(this.y0)+Double.parseDouble(this.y1)+
       Double.parseDouble(this.y2)))+"".trim();
      return this.area;
  }
 
  public String getArea() {
    return area;
  }
 
}

La anterior clase nos  calcula la integral con el metodo de Simposon descrito anteriormente

Ahora estamos en condiciones de probar nuestra clase Integral, para ello lo probaremos desde nuestro Main Incluimos el siguiente código al Main para realizar el ejemplo de este post

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package integrales;
 
/**
 *
 * @author rafael
 */
public class Integrales {
 
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
       //instanciamos la clase Integral
        Integral integ=new Integral();
        //llamamos al metodo que nos calcula la integral
        integ.CalcularIntegral(" x ^2", "0", "2");
        //mostramos el resultado por la salida estandar
        System.out.println(integ.getArea());
    }
    
}

 

Una vez instanciada la clase llamamos al método

integ.CalcularIntegral("x^2", "0", "2");

en donde le pasamos por parámetro la función  "x^2" con los limites 0 y 2, como lo habíamos planteado en el ejemplo
Ahora estamos en condiciones de ejecutar nuestro ejemplo

Observamos la salida que es igual a la realizada manualmente en el ejemplo osea 2.66

Ahora lo probamos para una función seno, en los limites sobre las cordenadas de las x entre 0 y 1, el código de nuestro Main es

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
package integrales;
 
/**
 *
 * @author rafael
 */
public class Integrales {
 
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
       //instanciamos la clase Integral
        Integral integ=new Integral();
        //llamamos al metodo que nos calcula la integral
        integ.CalcularIntegral("sen x", "0", "1");
        //mostramos el resultado por la salida estandar
        System.out.println(integ.getArea());
    }
    
}

 

Lo ejecutamos  y la salida es 0.45, recordemos que esta expresada  en RADIANES

Bueno esto es todo, es un ejemplo sencillo de cómo tener una muy buena aproximación de un calculo de una integral definida, en este caso teniendo ayuda de un código java que lo podemos manipular a nuestra conveniencia, especialmente cuando se pide codigo unico para materias como analisis numerico.

 Descarga el codigo fuente del ejemplo (no te olvides de comentar)

Codigo Fuente en Netbeans

 

Visto 2708 veces Modificado por última vez en Lunes, 01 Agosto 2016 18:06

Deja un comentario

Asegúrate de llenar la información requerida marcada con (*). No está permitido el código HTML. Tu dirección de correo NO será publicada.