integracion numerica con matlab
TRANSCRIPT
![Page 1: Integracion Numerica Con Matlab](https://reader030.vdocuments.pub/reader030/viewer/2022012303/55cf99af550346d0339ea4b8/html5/thumbnails/1.jpg)
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
![Page 2: Integracion Numerica Con Matlab](https://reader030.vdocuments.pub/reader030/viewer/2022012303/55cf99af550346d0339ea4b8/html5/thumbnails/2.jpg)
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
![Page 3: Integracion Numerica Con Matlab](https://reader030.vdocuments.pub/reader030/viewer/2022012303/55cf99af550346d0339ea4b8/html5/thumbnails/3.jpg)
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)
![Page 4: Integracion Numerica Con Matlab](https://reader030.vdocuments.pub/reader030/viewer/2022012303/55cf99af550346d0339ea4b8/html5/thumbnails/4.jpg)
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
![Page 5: Integracion Numerica Con Matlab](https://reader030.vdocuments.pub/reader030/viewer/2022012303/55cf99af550346d0339ea4b8/html5/thumbnails/5.jpg)
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)
![Page 6: Integracion Numerica Con Matlab](https://reader030.vdocuments.pub/reader030/viewer/2022012303/55cf99af550346d0339ea4b8/html5/thumbnails/6.jpg)
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
![Page 7: Integracion Numerica Con Matlab](https://reader030.vdocuments.pub/reader030/viewer/2022012303/55cf99af550346d0339ea4b8/html5/thumbnails/7.jpg)
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
![Page 8: Integracion Numerica Con Matlab](https://reader030.vdocuments.pub/reader030/viewer/2022012303/55cf99af550346d0339ea4b8/html5/thumbnails/8.jpg)
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
![Page 9: Integracion Numerica Con Matlab](https://reader030.vdocuments.pub/reader030/viewer/2022012303/55cf99af550346d0339ea4b8/html5/thumbnails/9.jpg)
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
![Page 10: Integracion Numerica Con Matlab](https://reader030.vdocuments.pub/reader030/viewer/2022012303/55cf99af550346d0339ea4b8/html5/thumbnails/10.jpg)
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
![Page 11: Integracion Numerica Con Matlab](https://reader030.vdocuments.pub/reader030/viewer/2022012303/55cf99af550346d0339ea4b8/html5/thumbnails/11.jpg)
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.
![Page 12: Integracion Numerica Con Matlab](https://reader030.vdocuments.pub/reader030/viewer/2022012303/55cf99af550346d0339ea4b8/html5/thumbnails/12.jpg)
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
![Page 13: Integracion Numerica Con Matlab](https://reader030.vdocuments.pub/reader030/viewer/2022012303/55cf99af550346d0339ea4b8/html5/thumbnails/13.jpg)
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
![Page 14: Integracion Numerica Con Matlab](https://reader030.vdocuments.pub/reader030/viewer/2022012303/55cf99af550346d0339ea4b8/html5/thumbnails/14.jpg)
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
![Page 15: Integracion Numerica Con Matlab](https://reader030.vdocuments.pub/reader030/viewer/2022012303/55cf99af550346d0339ea4b8/html5/thumbnails/15.jpg)
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
![Page 16: Integracion Numerica Con Matlab](https://reader030.vdocuments.pub/reader030/viewer/2022012303/55cf99af550346d0339ea4b8/html5/thumbnails/16.jpg)
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
![Page 17: Integracion Numerica Con Matlab](https://reader030.vdocuments.pub/reader030/viewer/2022012303/55cf99af550346d0339ea4b8/html5/thumbnails/17.jpg)
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
![Page 18: Integracion Numerica Con Matlab](https://reader030.vdocuments.pub/reader030/viewer/2022012303/55cf99af550346d0339ea4b8/html5/thumbnails/18.jpg)
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)
![Page 19: Integracion Numerica Con Matlab](https://reader030.vdocuments.pub/reader030/viewer/2022012303/55cf99af550346d0339ea4b8/html5/thumbnails/19.jpg)
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
![Page 20: Integracion Numerica Con Matlab](https://reader030.vdocuments.pub/reader030/viewer/2022012303/55cf99af550346d0339ea4b8/html5/thumbnails/20.jpg)
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)