Tema 6
Rosa Echevarría Líbano. Dpto. Ecuaciones Diferenciales y Análisis Numérico. Universidad de Sevilla
Asignatura:Programación Científica
1er. cursoLicenciatura en Física
Introducción a
MATLABTema 6 : Integración numérica
Integración numérica: cálculo con MATLAB
Rosa Echevarría Líbano. Dpto. Ecuaciones Diferenciales y Análisis Numérico. Universidad de Sevilla
Cálculo de integrales definidas:
es el área de la región limitada
por la curva
el eje X y las rectas
y
Integración numérica: cálculo con MATLAB
Rosa Echevarría Líbano. Dpto. Ecuaciones Diferenciales y Análisis Numérico. Universidad de Sevilla
MATLAB dispone de la función quad para calcular integrales definidas:
>> quad(fun,a,b)>> quad(fun,a,b)>> quad(fun,a,b)>> quad(fun,a,b)
fun fun fun fun es la funcion a integrar y puede ser especificada de dos formas:
• mediante un objeto inline: quad(fun,a,b)quad(fun,a,b)quad(fun,a,b)quad(fun,a,b)
• mediante una M-función: quad(@fun,a,b)quad(@fun,a,b)quad(@fun,a,b)quad(@fun,a,b)
Integración numérica: cálculo con MATLAB
Rosa Echevarría Líbano. Dpto. Ecuaciones Diferenciales y Análisis Numérico. Universidad de Sevilla
EJEMPLO (función inline): calcular
>> f=inline('sin(4*log(x))')>> f=inline('sin(4*log(x))')>> f=inline('sin(4*log(x))')>> f=inline('sin(4*log(x))')>> quad(f,0.2,3)>> quad(f,0.2,3)>> quad(f,0.2,3)>> quad(f,0.2,3)ans =ans =ans =ans =
0.10130.10130.10130.1013
Integración numérica: cálculo con MATLAB
Rosa Echevarría Líbano. Dpto. Ecuaciones Diferenciales y Análisis Numérico. Universidad de Sevilla
>> f=inline('x.*sin(4*log(x))')>> f=inline('x.*sin(4*log(x))')>> f=inline('x.*sin(4*log(x))')>> f=inline('x.*sin(4*log(x))')>> quad(f,0.2,3)>> quad(f,0.2,3)>> quad(f,0.2,3)>> quad(f,0.2,3)ans =ans =ans =ans =
----0.28370.28370.28370.2837
ATENCIÓN: LA EXPRESIÓN DE LA FUNCIÓN DEBE ESCRIBIRSE EN FORMA VECTORIZADA
(de forma que si el argumento es un vector, devuelva un vector)
Integración numérica: cálculo con MATLAB
Rosa Echevarría Líbano. Dpto. Ecuaciones Diferenciales y Análisis Numérico. Universidad de Sevilla
EJEMPLO (M-función): calcular
function [y]=mifun(x)function [y]=mifun(x)function [y]=mifun(x)function [y]=mifun(x)y=sin(4*log(x));y=sin(4*log(x));y=sin(4*log(x));y=sin(4*log(x));
mifun.mmifun.mmifun.mmifun.mLa función a integrar se calcula mediante una M-función:
crear el fichero mifun.m
Integración numérica: cálculo con MATLAB
Rosa Echevarría Líbano. Dpto. Ecuaciones Diferenciales y Análisis Numérico. Universidad de Sevilla
EJEMPLO (M-función): calcular
>> quad(@mifun,0.2,3)>> quad(@mifun,0.2,3)>> quad(@mifun,0.2,3)>> quad(@mifun,0.2,3)ans =ans =ans =ans =
0.10130.10130.10130.1013
Integración numérica: cálculo con MATLAB
Rosa Echevarría Líbano. Dpto. Ecuaciones Diferenciales y Análisis Numérico. Universidad de Sevilla
Ejercicio: calcular la integral definida siguiente, usando una M-función
Integración numérica: cálculo con MATLAB
Rosa Echevarría Líbano. Dpto. Ecuaciones Diferenciales y Análisis Numérico. Universidad de Sevilla
Ejercicio: calcular la integral definida siguiente, usando una M-función
>> quad(@mifun,0.2,3)>> quad(@mifun,0.2,3)>> quad(@mifun,0.2,3)>> quad(@mifun,0.2,3)ans =ans =ans =ans =
----0.28370.28370.28370.2837
function [y]=mifun(x)function [y]=mifun(x)function [y]=mifun(x)function [y]=mifun(x)y=x.*sin(4*log(x));y=x.*sin(4*log(x));y=x.*sin(4*log(x));y=x.*sin(4*log(x));
mifun.mmifun.mmifun.mmifun.m
Integración numérica: cálculo con MATLAB
Rosa Echevarría Líbano. Dpto. Ecuaciones Diferenciales y Análisis Numérico. Universidad de Sevilla
PASO DE ARGUMENTOS OPCIONALES:
Supongamos que se desea calcular el valor de una integral que depende de un parámetro:
>> k=3.3425;>> k=3.3425;>> k=3.3425;>> k=3.3425;>> quad(@func,a,b,[],[],k)>> quad(@func,a,b,[],[],k)>> quad(@func,a,b,[],[],k)>> quad(@func,a,b,[],[],k)
function [y]=func(x,k)function [y]=func(x,k)function [y]=func(x,k)function [y]=func(x,k)y=k*x.*sin(4*log(x));y=k*x.*sin(4*log(x));y=k*x.*sin(4*log(x));y=k*x.*sin(4*log(x));
func.mfunc.mfunc.mfunc.m
Integración numérica: Ejercicio
Rosa Echevarría Líbano. Dpto. Ecuaciones Diferenciales y Análisis Numérico. Universidad de Sevilla
Ejercicio: para un gas que se expande en un cilindro, la presión es función del volumen: p=p(v).
El trabajo realizado por el gas cuando se expande de un volumen v1 a otro v2 viene dado por
Cuando no existe pérdida de calor
Se sabe de un gas que, ocupando un volumen 100, tiene una presión 160. Calcular el trabajo realizado cuando pasa de un volumen 100 a un volumen 800.
Integración numérica: Ejercicio
Rosa Echevarría Líbano. Dpto. Ecuaciones Diferenciales y Análisis Numérico. Universidad de Sevilla
Se trata de calcular
Para ello escribimos en primer lugar una M-función que devuelva el valor del integrando, es decir, de la presión en función de k y de v
function [p]=presion(v,k)function [p]=presion(v,k)function [p]=presion(v,k)function [p]=presion(v,k)p=k*v.^(p=k*v.^(p=k*v.^(p=k*v.^(----1.4);1.4);1.4);1.4);
presion.mpresion.mpresion.mpresion.m
Integración numérica: Ejercicio
Rosa Echevarría Líbano. Dpto. Ecuaciones Diferenciales y Análisis Numérico. Universidad de Sevilla
Ahora, para calcular, por ejemplo,
para el valor de pondríamos
>> k=9954;>> k=9954;>> k=9954;>> k=9954;>> quad(@presion,200,500,[],[],k)>> quad(@presion,200,500,[],[],k)>> quad(@presion,200,500,[],[],k)>> quad(@presion,200,500,[],[],k)ans =ans =ans =ans =
447.5038447.5038447.5038447.5038
Integración numérica: Ejercicio
Rosa Echevarría Líbano. Dpto. Ecuaciones Diferenciales y Análisis Numérico. Universidad de Sevilla
Escribir una M-función (trabajo.m) que lea del teclado los valores
• p1 : presión inicial
• v1 : volumen inicial
• v2 : volumen final
y que:
• Calcule el valor del parámetro k
• Dibuje la gráfica de la presión en relación al volumen
• Calcule el trabajo realizado
Integración numérica: programación
Rosa Echevarría Líbano. Dpto. Ecuaciones Diferenciales y Análisis Numérico. Universidad de Sevilla
function trabajofunction trabajofunction trabajofunction trabajo%%%%p1=input('>> Valor de la presion inicial ? ');p1=input('>> Valor de la presion inicial ? ');p1=input('>> Valor de la presion inicial ? ');p1=input('>> Valor de la presion inicial ? ');v1=input('>> Valor del volumen inicial ? ');v1=input('>> Valor del volumen inicial ? ');v1=input('>> Valor del volumen inicial ? ');v1=input('>> Valor del volumen inicial ? ');v2=input('>> Valor del volumen final ? ');v2=input('>> Valor del volumen final ? ');v2=input('>> Valor del volumen final ? ');v2=input('>> Valor del volumen final ? ');%%%%k=p1*v1^1.4; v=linspace(v1,v2); p=presion(v,k);k=p1*v1^1.4; v=linspace(v1,v2); p=presion(v,k);k=p1*v1^1.4; v=linspace(v1,v2); p=presion(v,k);k=p1*v1^1.4; v=linspace(v1,v2); p=presion(v,k);plot(v,p) ; xlabel('Volumen'); ylabel('Presion');plot(v,p) ; xlabel('Volumen'); ylabel('Presion');plot(v,p) ; xlabel('Volumen'); ylabel('Presion');plot(v,p) ; xlabel('Volumen'); ylabel('Presion');shg;shg;shg;shg;trab=quad(@presion,v1,v2,[],[],k);trab=quad(@presion,v1,v2,[],[],k);trab=quad(@presion,v1,v2,[],[],k);trab=quad(@presion,v1,v2,[],[],k);texto=[' Trabajo realizado : ',num2str(trab,'%15.5f')];texto=[' Trabajo realizado : ',num2str(trab,'%15.5f')];texto=[' Trabajo realizado : ',num2str(trab,'%15.5f')];texto=[' Trabajo realizado : ',num2str(trab,'%15.5f')];pmax=max(p); pmin=min(p); pmax=max(p); pmin=min(p); pmax=max(p); pmin=min(p); pmax=max(p); pmin=min(p); pt=pmaxpt=pmaxpt=pmaxpt=pmax----(pmax(pmax(pmax(pmax----pmin)/10; vt=v1+(v2pmin)/10; vt=v1+(v2pmin)/10; vt=v1+(v2pmin)/10; vt=v1+(v2----v1)/4;v1)/4;v1)/4;v1)/4;text(vt,pt,texto);text(vt,pt,texto);text(vt,pt,texto);text(vt,pt,texto);%%%%------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------function [p]=presion(v,k)function [p]=presion(v,k)function [p]=presion(v,k)function [p]=presion(v,k)p=k*v.^(p=k*v.^(p=k*v.^(p=k*v.^(----1.4);1.4);1.4);1.4);
trabajo.mtrabajo.mtrabajo.mtrabajo.m
Integración numérica: cálculo con MATLAB
Rosa Echevarría Líbano. Dpto. Ecuaciones Diferenciales y Análisis Numérico. Universidad de Sevilla
INTEGRALES DOBLES:
La integral doble
es el volumen de la región (3D) limitada por la superficie , el plano XY y los planos verticales
a
b
c
d
X
Y
Z
También se escribe:
con
Integración numérica: cálculo con MATLAB
Rosa Echevarría Líbano. Dpto. Ecuaciones Diferenciales y Análisis Numérico. Universidad de Sevilla
INTEGRALES DOBLES
se puede calcular como una integral reiterada:
se calcula primero la integral más interior, integrando con respecto de la variable y, considerando constante la x, y luego se integra el resultado con respecto a x
Integración numérica: cálculo con MATLAB
Rosa Echevarría Líbano. Dpto. Ecuaciones Diferenciales y Análisis Numérico. Universidad de Sevilla
MATLAB dispone de la función dblquad para calcular integrales dobles:
>> dblquad(fun,a,b,c,d)>> dblquad(fun,a,b,c,d)>> dblquad(fun,a,b,c,d)>> dblquad(fun,a,b,c,d)
igual que antes, fun puede ser:
• un objeto inline: dblquad(fun,a,b,c,d)dblquad(fun,a,b,c,d)dblquad(fun,a,b,c,d)dblquad(fun,a,b,c,d)
• una M-función : dblquaddblquaddblquaddblquad(@fun,a,b,c,d)(@fun,a,b,c,d)(@fun,a,b,c,d)(@fun,a,b,c,d)
La función funfunfunfun debe admitir un vector como argumento x (y devolver un vector de su misma dimensión)
Integración numérica: cálculo con MATLAB
Rosa Echevarría Líbano. Dpto. Ecuaciones Diferenciales y Análisis Numérico. Universidad de Sevilla
EJEMPLO: calcular
>> f=inline('1./(1+x.^2+y.^2)','x','y')>> f=inline('1./(1+x.^2+y.^2)','x','y')>> f=inline('1./(1+x.^2+y.^2)','x','y')>> f=inline('1./(1+x.^2+y.^2)','x','y')>> >> >> >> ezmesh(f,[ezmesh(f,[ezmesh(f,[ezmesh(f,[----1,1,0,1])1,1,0,1])1,1,0,1])1,1,0,1])>> f=inline('1./(1+x.^2+y.^2)','x','y')>> f=inline('1./(1+x.^2+y.^2)','x','y')>> f=inline('1./(1+x.^2+y.^2)','x','y')>> f=inline('1./(1+x.^2+y.^2)','x','y')>> dblquad(f,>> dblquad(f,>> dblquad(f,>> dblquad(f,----1,1,0,1)1,1,0,1)1,1,0,1)1,1,0,1)ans =ans =ans =ans =
1.27901.27901.27901.2790
Integración numérica: cálculo con MATLAB
Rosa Echevarría Líbano. Dpto. Ecuaciones Diferenciales y Análisis Numérico. Universidad de Sevilla
MATLAB dispone de la función triplequad para calcular integrales dobles:
>> triplequad(fun,a,b,c,d,e,f)>> triplequad(fun,a,b,c,d,e,f)>> triplequad(fun,a,b,c,d,e,f)>> triplequad(fun,a,b,c,d,e,f)