1. Pr 1 – Derivación e Integración Numérica
Función para aproximación de integrales mediante la
regla del trapecio
En esta parte de la práctica se confeccionará el código de programación para
la obtención de la integral aproximada de una función empleando para ello el
método del trapecio. La declaración de la función se ha realizado introduciendo
como argumentos la función objetivo fx (recordar que se introduce entrecomillado
como un vector de caracteres), el paso h y los extremos del intervalo de integración
a y b. Además, la salida de la función es el valor de la integral aproximada
declarada con el nombre integral_trapecio.
Para evitar que el usuario introduzca un valor del paso h incorrecto, se han
preparado unas líneas de código con la intención de impedir que el código se ejecute
para un valor erróneo de paso h. Para ello se emplea la función rem y abs, de modo
que obtengamos el resto de la división entre la diferencia positiva entre los
extremos y el paso. Por lo tanto, si se introdujera un valor de h incorrecto, el
programa quedaría “encerrado” en un bucle de repetición a la espera de que el
usuario acertara con un valor correcto de h.
El cuerpo del programa queda claramente dividido en dos partes, la
obtención de los valores extremos del método y la de los valores centrales. Para la
obtención de los valores extremos empleamos valor=subs(fx,'x',a) y
valor=subs(fx,'x',b). En cambio, para obtener el valor de las áreas interiores
empleamos un bucle donde se “machaca” el valor de la suma de las áreas con el
suyo propio más la nueva área añadida.
Al final, se obtiene el valor del resultado multiplicando por h/2.
function integral_trapecio=mitrapecio(fx,h,a,b)
% Comprobación de que el valor de h debe ser un divisor exacto de|b-a|
while rem(abs(b-a),h)~=0
h=input('Nos has introducido un paso válido. Inténtalo de nuevo:');
end
%Calculamos los términos de la integral
valor=subs(fx,'x',a);
for i=a+h:h:b-h
valor=valor+2*subs(fx,'x',i);
end
valor=valor+subs(fx,'x',b);
integral_trapecio=valor*h/2;
return
Jaime Martínez Verdú Página 1
2. Pr 1 – Derivación e Integración Numérica
Función para aproximación de integrales mediante la
regla del Simpson
En esta ocasión se confeccionará el código de programación para la
obtención de la integral aproximada de una función empleando para ello la regla de
Simpson. La declaración de la función se ha realizado introduciendo como
argumentos la función fx, el paso h y los extremos del intervalo de integración a y
b. Además, la salida de la función es integral_simpson.
Para evitar que el usuario introduzca un paso incorrecto se ha preparado
unas líneas de código con la intención de impedir que el código se ejecute para un
valor erróneo de paso h. El planteamiento es semejante al del caso anterior.
El cuerpo del programa queda claramente dividido en dos partes, la
obtención de los valores extremos del método y la de los valores centrales. Para la
obtención de los valores extremos empleamos valor=subs(fx,'x',a) y
valor=subs(fx,'x',b). En cambio, para obtener el valor de las áreas interiores
empleamos un bucle donde se “machaca” el valor de la suma de las áreas con el
suyo propio más la nueva área añadida.
En esta ocasión el código tiene una curiosidad puesto que los términos
interiores van alternándose. Para contemplar este caso en el código es necesario
realizar una comprobación para averiguar si el contador es par o impar. Si el valor
del contador es divisible por dos, entonces estamos en un elemento interior de la
forma f1, f3, f5,… por lo que es necesario multiplicarlo por 4. En caso contrario se
multiplica por 2. Al final, se obtiene el valor del resultado multiplicando por h/3.
function integral_simpson=misimpson(fx,h,a,b)
% Comprobación de que el valor de h debe ser un divisor exacto de |b-
a|
while rem(abs(b-a),h)~=0
h=input('No has introducido un paso válido. Inténtalo de nuevo:');
end
%Calculamos los términos de la integral
valor=subs(fx,'x',a);
j=2;
for i=a+h:h:b-h
if(rem(j,2)==0)
valor=valor+4*subs(fx,'x',i);
else
valor=valor+2*subs(fx,'x',i);
end
j=j+1;
end
valor=valor+subs(fx,'x',b);
integral_simpson=valor*h/3;
return
Jaime Martínez Verdú Página 2
3. Pr 1 – Derivación e Integración Numérica
Función para aproximación de integrales mediante el
método de Romberg
En esta práctica se confeccionará el código de programación para la
obtención de la integral aproximada de una función empleando para ello el método
de Romberg. La declaración de la función se ha realizado introduciendo como
argumentos la función fx, el paso h y los extremos del intervalo de integración a y b
y el valor del k-ésimo. Además, la salida de la función es integral_simpson.
Debe comentarse un aspecto. El valor de h introducido será el valor de
(2^(k-1))*h por lo que es un aspecto a tenerse en cuenta.
Para evitar que el usuario introduzca un paso incorrecto se ha preparado
unas líneas de código con la intención de impedir que el código se ejecute para un
valor erróneo de paso h. Para ello se emplea la función rem y abs, de modo que
obtengamos el resto de la división entre la diferencia positiva entre los extremos y
el paso.
A continuación, se machaca el valor de (2^(k-1))*h a h para empezar por el
primer elemento de la aproximación. A continuación, inicializamos el valor de la
matriz donde se colocarán los valores procedentes del algoritmo.
El cuerpo del programa queda claramente dividido en tres partes, la
obtención de los valores de la primera columna del algoritmo, el resto de valores y
el volteo de la matriz para que visualmente se represente como el método.
En la primera parte del código se emplea
R(i,1)=mitrapecio(fx,h*2^(i-1),a,b) para calcular los primeros elementos
empleando la regla del trapecio.
En la segunda parte del código se calculan el resto de “casillas” de modo que,
aplicando R(i,j)=(4^(j-1)*R(i,j-1)-R(i+1,j-1))/(4^(j-1)-1) se
consigue calcular el resto de códigos. Véase que se trata de la fórmula de la página
21 donde el término k de la fórmula se ha implementado empleando j-1, R(i,j-1)
hace referencia al término de la fórmula k-1-ésimo para paso h y el término
R(i+1,j-1) hace referencia al k-1-ésimo para paso 2h.
Finalmente, se procede a invertir la matriz para que se asemeje a la matriz
estudiada en teoría.
Jaime Martínez Verdú Página 3
4. Pr 1 – Derivación e Integración Numérica
function integral_romberg=miromberg(fx,h,a,b,k)
while rem(abs(b-a),h)~=0
h=input('No has introducido un paso válido. Inténtalo de nuevo:');
end
h=h/2^(k-1);
%Calculamos los términos de la integral
R=zeros(k,k);
i=1;
while (i<=k)
R(i,1)=mitrapecio(fx,h*2^(i-1),a,b);
i=i+1;
end
i=1;
j=2;
while(j<=k)
while(i<=k-j+1)
R(i,j)=(4^(j-1)*R(i,j-1)-R(i+1,j-1))/(4^(j-1)-1);
i=i+1;
end
i=1;
j=j+1;
end
i=1;
T=zeros(k,k);
while(i<=k)
T(i,:)=R(1+k-i,:);
i=i+1;
end
T
integral_romberg=T(k,k);
return
Jaime Martínez Verdú Página 4
5. Pr 1 – Derivación e Integración Numérica
Función para aproximación de integrales mediante el
método de Richardson
El programa para implementar informáticamente el método de Richardson
para obtener la segunda derivada de una función dada en un punto usando
esquemas hacia delante de orden O(h4) es el siguiente
function integral_richardson=mirichardson(fx,h,a,o)
if (nargin~=4)
disp('Se ha confundido. Esta función tiene 4 parámetros.')
fx=input('Introduzca fx: ');
h=input('Introduzca el paso h: ');
a=input('Introduzca el punto donde quiere conocer la derivada: ');
o=input('Introduzca el orden: ');
end
k=(o-2)/2;
%Calculamos los términos de la integral
R=zeros(k,k);
i=1;
while (i<=k)
R(i,1)=(subs(fx,a+2*h*2^(i-1))-2*subs(fx,a+h*2^(i-
1))+subs(fx,a))/(h*2^(i-1))^2;
i=i+1;
end
i=1;
j=2;
while(j<=k)
while(i<=k-j+1)
R(i,j)=(4^(j-1)*R(i,j-1)-R(i+1,j-1))/(4^(j-1)-1);
i=i+1;
end
i=1;
j=j+1;
end
i=1;
T=zeros(k,k);
while(i<=k)
T(i,:)=R(1+k-i,:);
i=i+1;
end
T
integral_richardson=T(k,k);
return
En la primera parte del programa se procede a comprobar que se han
indicado cuatro variables. Primeramente, emplearemos una línea de código para
calcular el valor de k en función del orden deseado (según apuntes de teoría). Se
crea posteriormente una matriz donde se almacenarán todos los valores deseados.
Una vez creada la matriz, se emplea un bucle para generar los valores de la
primera columna empleando la expresión para las diferencias hacia delante:
R(i,1)=(subs(fx,a+2*h*2^(i-1))-2*subs(fx,a+h*2^(i-1))+subs(fx,a))/(h*2^(i-1))^2;
Posteriormente se emplea la misma línea de código que en el método de
Romberg puesto que el algoritmo es el mismo. Finalmente se voltea la matriz y se
obtiene la integral de Richardson.
Jaime Martínez Verdú Página 5
6. Pr 1 – Derivación e Integración Numérica
El programa anterior podemos modificarlo del siguiente modo:
function [secdevRich,T]=mirichardsonimp(fx,h,a,o,e)
if (nargin~=5)
disp('Se ha confundico. Esta función tiene 4 parámetros.')
fx=input('Introduzca fx: ');
h=input('Introduzca el paso h: ');
a=input('Introduzca el punto donde quiere conocer la derivada: ');
o=input('Introduzca el orden: ');
e=input('Introduzca el error deseado: ');
end
k=(o-2)/2;
%Calculamos los términos de la integral
R=zeros(k,k);
i=1;
while (i<=k)
R(i,1)=(subs(fx,a+2*h*2^(i-1))-2*subs(fx,a+h*2^(i-
1))+subs(fx,a))/(h*2^(i-1))^2;
if (abs(subs(diff(fx,'x',2),a)-R(i,1))<e)
secdevRich=R(i,1);
break
end
i=i+1;
end
if i==k+1;
i=1;
j=2;
while(j<=k)
while(i<=k-j+1)
R(i,j)=(4^(j-1)*R(i,j-1)-R(i+1,j-1))/(4^(j-1)-1);
if abs(subs(diff(fx,'x',2),a)-R(i,j))<e
secdevRich=R(i,j);
break
end
i=i+1;
end
if abs(subs(diff(fx,'x',2),a)-R(i,j))<e
secdevRich=R(i,j);
break
end
i=1;
j=j+1;
end
i=1;
T=zeros(k,k);
while(i<=k)
T(i,:)=R(1+k-i,:);
i=i+1;
end
T
end
return
Este código incluye una variación respecto al anterior puesto que ahora se
introduce como dato también el error deseado. Por tanto, el programa calculará
términos hasta que encuentre el valor cuyo error sea inferior al deseado. Una vez
comentados todos los programas sólo queda comentar que ante alguna duda
respecto de la resolución o cualquier corrección por favor comunícamelo.
Finalmente, Mavi me gustaría agradecerte tu ayuda en las prácticas y la gran
labor realizada.
Jaime Martínez Verdú Página 6
7. Pr 1 – Derivación e Integración Numérica
Bibliografía
1. Burden, Richard L., "Análisis numérico", México International Thomson
Editores op.1998
2. Mathews, John H., "Métodos numéricos con MATLAB", Madrid [etc.] Prentice
Hall 1999
3. Chapra, Steven C., "Métodos numéricos para ingenieros", México [etc.]
McGraw-Hill cop. 1999
4. Kincaid, David, "Análisis numérico las matemáticas del cálculo científico",
Buenos Aires [etc.] Addison-Wesley Iberoamericana cop.1994
5. Amigó García, José María, "Métodos numéricos", [Alicante] Universidad
Miguel Hernández D.L. 2002
6. Nakamura, Shoichiro, "Análisis numérico y visualización gráfica con
MATLAB", Naucalpan de Juárez (México) Prentice-Hall Hispanoamericana
cop. 1997
Jaime Martínez Verdú Página 7
8. Pr 1 – Derivación e Integración Numérica
Tabla de contenidos
Función para aproximación de integrales mediante la regla del trapecio ................. 1
Función para aproximación de integrales mediante la regla del Simpson ................ 2
Función para aproximación de integrales mediante el método de Romberg ............. 3
Función para aproximación de integrales mediante el método de Richardson ......... 5
Bibliografía .................................................................................................................. 7
Tabla de contenidos ..................................................................................................... 8
Tabla de software ........................................................................................................ 8
Tabla de software
integral_trapecio=mitrapecio ...................................................................................... 1
integral_simpson=misimpson ..................................................................................... 2
integral_romberg=miromberg ..................................................................................... 4
integral_richardson=mirichardson ............................................................................. 5
[secdevRich,T]=mirichardsonimp ............................................................................... 6
Jaime Martínez Verdú Página 8