Matlab Integración Numérica, Método del Trapecio.

[Recuerda que en este Blog los enlaces para la descarga del código se encuentran al final del artículo.]

En ciertas ocasiones nos encontramos con funciones para las que no podemos hallar una primitiva, esto puede deberse por supuesto a falta de habilidad de nuestra parte, aunque también ocurre que alguna funciones elementales simplemente no tienen primitivas que al igual sean funciones elementales que podamos calcular, por ejemplo, no hay funciones elementales que tengan alguna de las siguientes como su derivada:

Funciones que no tienen primitivas, en estos casos se recurre a los métodos numéricos para integrarlas.

Funciones que no tienen primitivas, en estos casos se recurre a los métodos numéricos para integrarlas.

Cuando se desea calcular una integral definida que contiene una función cuya primitiva no podemos hallar, entonces no se puede aplicar el teorema fundamental del cálculo y es aquí cuando se debe recurrir a una técnica de aproximación.

 

Regla de los Trapecios.

Una forma de aproximar una integral definida, consiste en usas N trapecios, como se muestra en la figura 1. En el desarrollo de este método, se supone que f es continua y positiva en el intervalo [a,b] y que la integral definida punto fijo representa el área de la región limitada por la gráfica de y el eje X, desde x=a hasta x=b. [1]

Función Y(x), el área bajo la curva, se puede aproximar mediante n trapecios, en este caso 4.

Figura 1: Función Y(x), el área bajo la curva, se puede aproximar mediante n trapecios, en este caso  4 trapecios.

 

Algoritmo para el Método de los Trapecios.

En el caso de las aproximaciones de las integrales por el método de los trapecios, es tan simple tanto en descripción como a nivel de código, como es sabido, en este blog no nos proponemos dar una demostración matemática de los métodos aquí propuestos, aunque es posible hacerlo, principalmente nos enfocamos en su funcionamiento y en que el lector pueda comprender su uso y llevar a cabo el código (nuestro objetivo es en Matlab, aunque se puede hacer en cualquier lenguaje o programa), es por esto, que nos limitaremos únicamente a la utilización de la “formula” y los pasos que se deben seguir para implementar nuestro método; el algoritmo es el siguiente:

  1. En primer lugar se parte el intervalo comprendido entre [a, b] en subintervalos más pequeños, definidos por la variable N, nombrando el ancho de esos subintervalos como dx (que en nuestro caso representa a delta X).

punto fijo

       2.  Se realiza la siguiente serie (hacer clic para ver en tamaño mas amplio):

punto fijo

Como se puede observar, es una sumatoria, donde todos los términos  están   multiplicados por 2 excepto el primero y el ultimo termino y posteriormente están multiplicados todos por lo que podríamos llamar entonces dx/2.

Código en Matlab.

En esto punto crearemos una función en Matlab, que nos permita aproximar aquellas funciones de las que se habló con anterioridad, manteniendo los criterios ya mencionados  en primer lugar, crearemos en nuestro directorio una función llamada intrap (integrales por trapecios), que recibirá como parametros, el la función, el limite inferior y el limite superior; también pudiéramos recibir como parámetro el numero de subintervalos deseados N, nosotros lo definimos como 400 ya que por lo regular las regiones a integrar no son muy grandes, pero la modificación del código es libre y si quieres, puedes recibir también el parámetro N (tambien se puede hacer, para aumentar la precisión).

punto fijo

Posteriormente, como dijimos le daremos el valor de N=400 aunque esto depende de su elección a la hora de montar el programa como recibiendo el parámetro, en este punto se calcula el valor de dx (delta x) con la formula que se vio en el punto 1 del algoritmo, también se evalúa el primer termino de la serie, ya que este no esta multiplicado por 2 y es el resultado de evaluar la expresión Y en el limite inferior.

punto fijo

 Ahora se usará un ciclo FOR para contar el número de iteraciones, las cuales dependerán del número de subintervalos, la variable I se inicia con un valor de 2, para descontar la evaluación del primer termino que se hizo al inicio del programa, y para descontar la ultima iteración, que se hará luego de termino el FOR, ya que esta ultima tampoco esta multiplicada por 2.

punto fijo

Luego de terminado el ciclo FOR, se procede a hacer la evaluación del n-ésimo termino, es decir, el ultimo termino. después de esto, como se comentó al final de algoritmo, se multiplican todos los términos sumados por DX/2, así:

punto fijo

Finalmente después de ejecutado todo el código, el programa nos retornará una buena aproximación de la integral que queremos hallar por más difícil que esta sea.

La forma correcta de utilizar esta función, en nuestro caso es, declarando inicialmente una variable simbólica por ejemplo t posteriormente podemos nombrar una función f(t) y llamar a la función intrap(f,a,b) donde A será el limite inferior de nuestro intervalo de integración y B el superior, el funcionamiento se ilustra a continuación donde los limites de la función serán de 0 (cero) a PI.

punto fijo

El valor exacto, como resultado de llevar a cabo la integración de SENO(X) entre 0 y pi es 2; en el ejemplo anterior podemos notar la aproximación llevada a cabo mediante el método del trapecio.

El código de la función estudiada en esta entrada lo puedes descargar desde este enlace, puedes hacer las modificaciones que quieras, con el fin de experimentar y obtener una mayor comprensión de este método, si tienes alguna duda, puedes dejar tu comentario.

Si este turorial te ha ayudado, compártelo, el conocimiento es de todos. “el conocimiento humano le pertenece al mundo”.

Comentar es una forma de agradecer.

Referencias: Larson. Hostetler. “Cálculo y geometría analítica”, 3ra edición. editorial McGraw-Hill. México.

17 comentarios en “Matlab Integración Numérica, Método del Trapecio.

  1. Hola, tengo un problema.
    He descargado el archivo que está puesto en el enlace, y al ejecutar la misma función que hay puesta en el ejemplo, el resultado no me lo da como un número, sino como una multiplicación que no se ha realizado de este tipo:
    (pi*(4*sin(pi/20) + 4*sin((3*pi)/20) + 4*sin(pi/25) + 4*sin((2*pi)/25) + 4*sin((7*pi)/20) + 4*sin((3*pi)/25) + 4*sin((4*pi)/25) + 4*sin((9*pi)/20) + 4*sin((6*pi)/25) + 4*sin((7*pi)/25) + 4*sin((8*pi)/25) + 4*sin((9*pi)/25) + 4*sin((11*pi)/25) + 4*sin((12*pi)/25) + 4*sin(pi/50) + 4*sin((3*pi)/50) + 4*sin((7*pi)/50) + 4*sin((9*pi)/50) + 4*sin((11*pi)/50) + 4*sin((13*pi)/50) + 4*sin((17*pi)/50) + 4*sin((19*pi)/50) + 4*sin((21*pi)/50) + 4*sin((23*pi)/50) + 4*sin(pi/100) + 4*sin((3*pi)/100) + 4*sin((7*pi)/100) + 4*sin((9*pi)/100) + 4*sin((11*pi)/100) + 4*sin((13*pi)/100) + 4*sin((17*pi)/100) + 4*sin((19*pi)/100) + 4*sin((21*pi)/100) + 4*sin((23*pi)/100) + 4*sin(pi/125) + 4*sin((2*pi)/125) + 4*sin((27*pi)/100) + 4*sin((3*pi)/125) + 4*sin((4*pi)/125) + 4*sin((29*pi)/100) + 4*sin((6*pi)/125) + 4*sin((241*pi)/500) + 4*sin((243*pi)/500) + 4*sin((247*pi)/500) + 4*sin((249*pi)/500) + 2^(1/2)*(5 – 5^(1/2))^(1/2) + 2*2^(1/2) + 2*5^(1/2) + 2^(1/2)*(5^(1/2) + 5)^(1/2) + 2))/1000

    qué debo hacer para que me la realice?
    Gracias

    Me gusta

    • Hola Juanjo, gracias por comentar.
      se me hizo extraño el resultado que obtuviste al ejecutar el código ya que nunca subo scripts sin comprobarlos, así que lo descargué y lo ejecuté. Efectivamente algo sucede con el resultado cosa que nunca sucedio en la versión que lo programé R2012a la que uso ahora y me entrega este resultado es la R2013a, así que supongo que algo debió cambiar entre estas versiones.

      para que soluciones esto por el momento, antes de dar una respuesta más profunda acerca de este cambio en Matlab® puedes poner la siguiente linea al final del script antes del end de la función

      in = double(in);

      lo que se hace con double( ) es forzar a que la expresión que está simbólica, se vuelva numérica completamente.

      y me deja una duda bastante grande sobre que cambió en Matlab® a la hora de hacer estos cálculos, cuando tenga tiempo investigaré más.

      Me puedes decir en que versión ejecutaste el script?

      Saludos y espero te sirva la solución.

      Me gusta

      • Hola @casey, ¿si introdujiste bien los parámetros de la función?.. lo acabo de probar con el ejemplo que está en el tutorial y da el resultado correcto, recuerda que la función recibe los limites inferior y superior, y el error que mencionas se produce si uno de esos argumentos no es ingresado.

        Gracias por comentar.

        Me gusta

  2. Pingback: Método del Trapecio en Scilab, Integración Numérica. | El Blog de Programación para Ingenierías

  3. muchas gracias, al principio me ocurría el mismo problema que a Juanjo, al ejecutar el script no me daba el resultado como un valor numérico sino como una sumatoria, tu solución me ayudo mucho, yo lo ejecute en la versión de MATLAB R2013b

    Me gusta

  4. Modifiqué el programa original, lo ejecuté en matlab 2015a
    function[in]=intrap(f,a,b)
    clc
    clear all
    lim = input(‘Escriba los límites =’);
    a=lim(:,1);
    b=lim(:,2);
    n=input(‘Número de intervalos = ‘);
    syms x;
    f=input(‘Escriba la función f =’);

    dx=(b-a)/n;
    in=subs(f,a);

    for i=2:n
    a=a+dx;
    in=in+2*subs(f,a);
    end
    in=in+subs(f,a+dx);
    in=in*(dx/2);
    in = double(in);
    end

    Me gusta

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s