Integracion Numerica Con Matlab

20
Tema 6 Rosa Echevarría Líbano. Dpto. Ecuaciones Diferenciales y Análisis Numérico. Universidad de Sevilla Asignatura: Programación Científica 1er. curso Licenciatura en Física Introducción a MATLAB Tema 6 : Integración numérica

Transcript of Integracion Numerica Con Matlab

Page 1: Integracion Numerica Con Matlab

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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)