Está en la página 1de 5

AMPLIACIN DE MATEMTICAS (2o Ing. de Telecomunicacin y Aeronutica) Departamento de Matemtica Aplicada II.

Universidad de Sevilla CURSO ACADMICO 2008-2009

Prctica II: Problemas de valor inicial en EDOs.

Introduccin

Es sabido que slo en unos cuantos casos se puede expresar la solucin de una ecuacin diferencial ordinaria por medios analticos y que, en general, es imposible resolver el problema de Cauchy aun cuando se sepa que tiene solucin nica, por lo que es necesario desarrollar mtodos que permitan obtener aproximaciones precisas de esa solucin. En esta prctica, utilizaremos un mtodo numrico para resolver problemas de valores iniciales. Se llama problema de valor inicial (PVI) o problema de Cauchy en un intervalo [t0 , tf ], al dado por una EDO y una condicin inicial en la forma: ( 0 y = f(t, y(t)), (P V I) y(t0 ) = y0 . En general, los mtodos numricos se basan en la discretizacin de la variable independiente t (tiempo o espacio) sustituyendo el intervalo [t0 , tf ] por una malla nita de n + 1 puntos o nodos ti (i = 1, . . . , N) en los que se obtiene la solucin de modo aproximado. La distancia entre dos nodos consecutivos de la malla hi = ti+1 ti se denomina paso. El objetivo es denir una estrategia que nos permita producir una sucesin {yn } con n = 1, . . . , N que aproxime a la solucin exacta y(t) en los puntos tn de la malla. A esa sucesin se le llama solucin numrica del problema de Cauchy. MATLAB dispone de varias funciones para resolver numricamente Problemas de Valor Inicial. En esta prctica, nos centramos en la orden ode45, aunque su utilizacin se generaliza a las funciones de tipo ode**. La funcin ode45 est basada en un algoritmo de tipo Runge-Kutta, que se desarroll a partir del mtodo de Euler mejorado. En las aplicaciones, el mtodo de Euler bsico resulta ineciente y por ello se han desarrollado varios mtodo numricos de tipo Runge-Kutta. 1

2
2.1

Uso de la funcin matlab ode45.


La sintaxis simple.

[T,Y]=ode45(funcion, tiempos ,y0) funcion es el nombre de una funcin que evala el segundo miembro de la ecuacin, esto es, f (t, y(t)). Puede ser un objeto inline o bien una referencia a una m-funcin del tipo fun.m. tiempos es el intervalo en el que se quiere calcular la solucin que puede ser [t0, tf] o bien un vector cuyas componentes constituyen una particin t0 < t1 < < tf . y0 es el valor de la condicin inicial. T es un vector columna con la particin realizada en el intervalo [t0, tf]. Y es una matriz con tantas columnas como componentes tenga y0 y tantas las como componentes tenga el vector T . Ejercicio 1 resuelto. Calcular en el intervalo [1, ] la solucin de ( 0 y = 2t + y, (P V I) y(1) = 0.5. >> f=inline(2*t+y,t,y); >> [T,Y]=ode45(f,[1,pi],0.5); La grca se puede dibujar con >> plot(T,Y) En este ejemplo puede observarse que los mtodos ode** son de paso variable. Para observar esto, consulta la ayuda de matlab sobre la funcin diff y teclea >> plot(T(2:length(T)),diff(T)) Otra forma de denir la funcin asociada es usar un m-archivo llamado mifun.m de la forma: function [dydt]=mifun(t,y) dydt=2*t+y; Despus se ejecuta: >> [T,Y]=ode45(@mifun,[1,pi],0.5); Con el smbolo @, MATLAB entiende que es una funcin de nueva creacin. Hay otra forma alternativa de llamar a una funcin con ode45: >> [T,Y]=ode45(mifun,[1,pi],0.5); Para usar esta alternativa, la funcin mifun debe estar grabada en otro chero llamado mifun.m.
t Ejercicio 2. Calcular la solucin al PVI correspondiente a y 0 = 0.2 cos( 2 )y, y(1) = 0.5 usando una particin del intervalo [1, ] en 40 subintervalos (usar la orden linspace de MATLAB). Hacemos notar que la resolucin de sistemas diferenciales con MATLAB se hace igual que la de EDO slo teniendo en cuenta que, en ese caso, la funcin del segundo miembro y

la condicin inicial toman valores vectoriales. Todos los vectores deben introducirse como vectores columnas. Ejercicio 3 resuelto. Resolver en el intervalo [0, 5] el PVI 0 y1 = y2 y3 , 0 y2 = 0.7y1 y3 , 0 y3 = 0.51y1 y2 , y1 (0) = 0, y2 (0) = 1, y3 (0) = 1.

>> f=inline([y(2)*y(3);-0.7*y(1)*y(3);-0.51*y(1)*y(2)], t,y); >> [T,Y]=ode45(f,[0,5*pi],[0;1;1]) Ejercicio 4 resuelto. Resolucin de un problema con la ecuacin de Van der Pol de parmetro = 1 en el intervalo [0, 20]: y 00 (1 y 2 )y 0 + y = 0, (P V I) y(0) = 2, y 0 (0) = 0. Usando el cambio y1 = y; y2 = y 0 , el sistema diferencial asociado es: y2 2 0 ; Y (0) = Y0 = . Y = f(t, Y ) = 2 0 (1 y1 )y2 y1

Escribimos el sistema en forma vectorial como y2 y3 0 0 0.7y1 y3 ; Y (0) = Y0 = 1 . Y = f (t, Y ) = 0.51y1 y2 1

Construimos la funcin de Matlab que evale el segundo miembro (funcin asociada): function dydt=vderp(t,y) dydt = [y(2);(1-y(1)^2)* y(2)-y(1)]; Observe que: en la denicin de la funcion vderp ha de escribirse la variable independiente t. la matriz dydt debe ser escrita por columnas. Si queremos integrar numricamente el problema de Cauchy y obtener una representacin grca de las dos componentes de la solucin al sistema, escribimos: >> [T,Y]=ode45(@vderp,[0,20],[2;0]); >> plot(T,Y(:,1), T,Y(:,2)); Posteriormente podemos escribir lo siguiente para claricar el dibujo. >> legend(y_1, y_2);xlabel(t);ylabel(y_1, y_2)

Observar que la primera componente y1 es realmente la solucin al problema de Van der Pol. Si queremos representar una curva en el plano de fases: >> plot(Y(:,1),Y(:,2)) Si queremos conocer el valor aproximado de la solucin para un valor t que no est en la particin T creada por el programa, podemos interpolar con la orden deval: >> sol=ode45(@vderp,[0 20],[2 0]); >> valor=deval(sol,4.5) valor = -1.3679 0.8764 Ejercicio 5. Resolver en el intervalo [0, 5] el siguiente problema de segundo orden y obtener una aproximacin de la solucin para t = 2: 00 1 y = y0 sen(y), (P V I) y(0) = 1, 0 y (0) = 1.

2.2

La sintaxis general: opciones y parmetros.

[T,Y]=ode45(funcion, tiempos ,y0, options, p1,p2, ... ) El argumento options es una estructura creada con la orden odeset donde podemos indicar una serie de parmetros que intervienen en el clculo. Podemos averiguar los valores que utiliza por defecto la orden ode45 ejecutando el comando odeset sin argumentos: >> odeset Ver ayuda de Matlab para ms detalles. Si no se necesita, poner una matriz vaca [ ] en su lugar. Los argumentos p1, p2, ... son parmetros que sern pasados como argumentos a la funcin creada fun.m cuando sea llamada. Ejercicio 6 resuelto. Escribir un programa que permita resolver el siguiente problema de Cauchy para la ecuacin de Van der Pol general: 00 y (1 y 2 )y 0 + y = 0, y(0) = 0, (P V I) 0 y (0) = 2. Previamente, creamos la funcin asociada en un m-chero que se llame fun.m: function dydt=fun(t,y,mu) dydt = [y(2);mu*(1-y(1)^2)*y(2)-y(1)]; En otro m-chero escribimos las rdenes: function vanderpol(T,mu) 4

[T1,Y]=ode45(@fun,[0,T],[0;2],[ ],mu); plot(T1,Y(:,1), T1,Y(:,2)),shg legend(y1,y2) pause plot(Y(:,1), Y(:,2)),shg Los mtodos en los que estn basados las rdenes ode de MATLAB utilizan el control del paso como herramienta para conseguir el compromiso entre la precisin deseada y el costo numrico. Aun as, podemos encontrarnos con problemas numricos como el problema de stiness, en el que los clculos numricos internos al programa llevan a resoluciones errneas. Introducimos los valores T = 20, = 1, = 10 y = 1000 para observar cundo aparece oscilacin brusca de la solucin. En general, una posible solucin a este problema consiste en proporcionar el jacobiano para evitar que ste sea determinado numricamente. Utilizar ahora los siguientes cheros: function dfdt=jacobiano(t,y,mu) dfdt = [0,1;-2*mu*y(1)*y(2)-1,mu*(1-y(1)^2)]; function vanderstiff(T,mu) options=odeset(Jacobian,@jacobiano); [T1,Y]=ode45(@fun,[0,T],[0;2],options,mu); plot(T1,Y(:,1)) axis([0,T,-2.5,2.5]) Ejercicio 7. Escribir un programa para resolver en el intervalo [0, 6] el problema siguiente para distintos valores del parmetro a. Obtener la grca de la solucin aproximada para los valores a = 1 y a = 1. ( 0 t y = a cos( 2 )y, (P V I) y(0) = 1. Ejercicio 8. Considerar el problema dy = y 4e3t , dt (P V I) y(0) = 1.

Utilizar ode45 para encontrar una solucin aproximada en el intervalo [0, 3]. Qu parece ocurrir cuando t crece? A continuacin dibujar la solucin en un intervalo ms largo (que vaya al menos hasta t = 20). Qu ocurre cuando t crece? Resolver el PVI exactamente, comparar la solucin exacta con la aproximacin de Matlab e interpretar los resultados.

También podría gustarte