Integracion Numerica Con Matlab

Post on 31-Dec-2015

163 views 8 download

Transcript of 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

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)