5
AMPLIACIÓN DE MATEMÁTICAS (2 o Ing. de Telecomunicación y Aeronáutica) Departamento de Matemática Aplicada II. Universidad de Sevilla CURSO ACADÉMICO 2008-2009 Práctica II: Problemas de valor inicial en EDO’s. 1 Introducción Es sabido que sólo en unos cuantos casos se puede expresar la solución de una ecuación diferencial ordinaria por medios analíticos y que, en general, es imposible resolver el pro- blema de Cauchy aun cuando se sepa que tiene solución única, por lo que es necesario desarrollar métodos que permitan obtener aproximaciones precisas de esa solución. En esta práctica, utilizaremos un método numérico para resolver problemas de valores ini- ciales. Se llama problema de valor inicial (PVI) o problema de Cauchy en un intervalo [t 0 ,t f ], al dado por una EDO y una condición inicial en la forma: (PVI ) ( y 0 = f (t, y(t)), y(t 0 )= y 0 . En general, los métodos numéricos se basan en la discretización de la variable inde- pendiente t (tiempo o espacio) sustituyendo el intervalo [t 0 ,t f ] por una malla nita de n +1 puntos o nodos t i (i =1,...,N ) en los que se obtiene la solución de modo aproxi- mado. La distancia entre dos nodos consecutivos de la malla h i = t i+1 t i se denomina paso. El objetivo es denir una estrategia que nos permita producir una sucesión {y n } con n =1,...,N que aproxime a la solución exacta y(t) en los puntos t n de la malla. A esa sucesión se le llama solución numérica del problema de Cauchy. MATLAB dispone de varias funciones para resolver numéricamente Problemas de Valor Inicial. En esta práctica, nos centramos en la orden ode45, aunque su utilización se generaliza a las funciones de tipo ode**. La función ode45 está basada en un algoritmo de tipo Runge-Kutta, que se desarrolló a partir del método de Euler mejorado. En las aplicaciones, el método de Euler básico resulta ineciente y por ello se han desarrollado varios método numéricos de tipo Runge-Kutta. 1

Ode45

Embed Size (px)

DESCRIPTION

matlab

Citation preview

AMPLIACIÓN DE MATEMÁTICAS (2o Ing. de Telecomunicación y Aeronáutica)

Departamento de Matemática Aplicada II. Universidad de Sevilla

CURSO ACADÉMICO 2008-2009

Práctica II: Problemas de valor inicial en EDO’s.

1 Introducción

Es sabido que sólo en unos cuantos casos se puede expresar la solución de una ecuacióndiferencial ordinaria por medios analíticos y que, en general, es imposible resolver el pro-blema de Cauchy aun cuando se sepa que tiene solución única, por lo que es necesariodesarrollar métodos que permitan obtener aproximaciones precisas de esa solución. Enesta práctica, utilizaremos un método numérico para resolver problemas de valores ini-ciales.Se llama problema de valor inicial (PVI) o problema de Cauchy en un intervalo [t0, tf ],

al dado por una EDO y una condición inicial en la forma:

(PV I)

(y0 = f(t, y(t)),

y(t0) = y0.

En general, los métodos numéricos se basan en la discretización de la variable inde-pendiente t (tiempo o espacio) sustituyendo el intervalo [t0, tf ] por una malla finita den+ 1 puntos o nodos ti (i = 1, . . . , N) en los que se obtiene la solución de modo aproxi-mado. La distancia entre dos nodos consecutivos de la malla hi = ti+1 − ti se denominapaso. El objetivo es definir una estrategia que nos permita producir una sucesión {yn}con n = 1, . . . , N que aproxime a la solución exacta y(t) en los puntos tn de la malla. Aesa sucesión se le llama solución numérica del problema de Cauchy.MATLAB dispone de varias funciones para resolver numéricamente Problemas de

Valor Inicial. En esta práctica, nos centramos en la orden ode45, aunque su utilización segeneraliza a las funciones de tipo ode**. La función ode45 está basada en un algoritmode tipo Runge-Kutta, que se desarrolló a partir del método de Euler mejorado. En lasaplicaciones, el método de Euler básico resulta ineficiente y por ello se han desarrolladovarios método numéricos de tipo Runge-Kutta.

1

2 Uso de la función matlab ode45.

2.1 La sintaxis simple.

[T,Y]=ode45(funcion, tiempos ,y0)funcion es el nombre de una función que evalúa el segundo miembro de la ecuación,

esto es, f(t, y(t)). Puede ser un objeto inline o bien una referencia a una m-función deltipo fun.m.tiempos es el intervalo en el que se quiere calcular la solución que puede ser [t0, tf ] o

bien un vector cuyas componentes constituyen una partición t0 < t1 < · · · < tf .y0 es el valor de la condición inicial.T es un vector columna con la partición realizada en el intervalo [t0, tf ].Y es una matriz con tantas columnas como componentes tenga y0 y tantas filas como

componentes tenga el vector T .

Ejercicio 1 resuelto. Calcular en el intervalo [1, π] la solución de

(PV I)

(y0 = 2t+ y,

y(1) = 0.5.

>> f=inline(’2*t+y’,’t’,’y’);>> [T,Y]=ode45(f,[1,pi],0.5);

La gráfica se puede dibujar con>> plot(T,Y)

En este ejemplo puede observarse que los métodos ode** son de paso variable. Paraobservar esto, consulta la ayuda de matlab sobre la función diff y teclea

>> plot(T(2:length(T)),diff(T))Otra forma de definir la función asociada es usar un m-archivo llamado mifun.m de laforma:function [dydt]=mifun(t,y)dydt=2*t+y;

Después se ejecuta:>> [T,Y]=ode45(@mifun,[1,pi],0.5);• Con el símbolo @, MATLAB entiende que es una función de nueva creación.• Hay otra forma alternativa de llamar a una función con ode45:>> [T,Y]=ode45(’mifun’,[1,pi],0.5);Para usar esta alternativa, la función mifun debe estar grabada en otro fichero llamado

mifun.m.

Ejercicio 2. Calcular la solución al PVI correspondiente a y0 = 0.2 cos( t2)y, y(1) = 0.5

usando una partición del intervalo [1, π] en 40 subintervalos (usar la orden linspace deMATLAB).• Hacemos notar que la resolución de sistemas diferenciales con MATLAB se hace igual

que la de EDO sólo teniendo en cuenta que, en ese caso, la función del segundo miembro y

2

la condición inicial toman valores vectoriales. Todos los vectores deben introducirse comovectores columnas.

Ejercicio 3 resuelto. Resolver en el intervalo [0, 5π] el PVI⎧⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎩

y01 = y2y3,y02 = −0.7y1y3,y03 = −0.51y1y2,y1(0) = 0,y2(0) = 1,y3(0) = 1.

Escribimos el sistema en forma vectorial como

Y 0 = f(t, Y ) =

⎛⎝ y2y3−0.7y1y3−0.51y1y2

⎞⎠ ; Y (0) = Y0 =

⎛⎝ 011

⎞⎠ .

>> 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. Resolución de un problema con la ecuación de Van der Pol deparámetro μ = 1 en el intervalo [0, 20]:

(PV I)

⎧⎪⎨⎪⎩y00 − (1− y2)y0 + y = 0,

y(0) = 2,y0(0) = 0.

Usando el cambio y1 = y; y2 = y0, el sistema diferencial asociado es:

Y 0 = f(t, Y ) =

µy2

(1− y21)y2 − y1

¶; Y (0) = Y0 =

µ20

¶.

Construimos la función de Matlab que evalúe el segundo miembro (función asociada):function dydt=vderp(t,y)dydt = [y(2);(1-y(1)^2)* y(2)-y(1)];Observe que:• en la definición de la funcion vderp ha de escribirse la variable independiente t.• la matriz dydt debe ser escrita por columnas.Si queremos integrar numéricamente el problema de Cauchy y obtener una repre-

sentación gráfica de las dos componentes de la solución al sistema, escribimos:>> [T,Y]=ode45(@vderp,[0,20],[2;0]);>> plot(T,Y(:,1), T,Y(:,2));

Posteriormente podemos escribir lo siguiente para clarificar el dibujo.>> legend(’y_1’, ’y_2’);xlabel(’t’);ylabel(’y_1, y_2’)

3

• Observar que la primera componente y1 es realmente la solución al problema de Vander Pol.Si queremos representar una curva en el plano de fases:>> plot(Y(:,1),Y(:,2))Si queremos conocer el valor aproximado de la solución para un valor t que no está en

la partición 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.36790.8764

Ejercicio 5. Resolver en el intervalo [0, 5] el siguiente problema de segundo orden yobtener una aproximación de la solución para t = 2:

(PV I)

⎧⎪⎨⎪⎩y00 = 1

y0 − sen(y),

y(0) = 1,y0(0) = 1.

2.2 La sintaxis general: opciones y parámetros.

[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 parámetros que intervienen en el cálculo. Podemos averiguar losvalores que utiliza por defecto la orden ode45 ejecutando el comando odeset sin argu-mentos:>> odesetVer ayuda de Matlab para más detalles. Si no se necesita, poner una matriz vacía [ ]

en su lugar.Los argumentos p1, p2, ... son parámetros que serán pasados como argumentos a la

función creada fun.m cuando sea llamada.

Ejercicio 6 resuelto. Escribir un programa que permita resolver el siguiente problemade Cauchy para la ecuación de Van der Pol general:

(PV I)

⎧⎨⎩ y00 − μ(1− y2)y0 + y = 0,y(0) = 0,y0(0) = 2.

Previamente, creamos la función asociada en un m-fichero 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-fichero escribimos las órdenes:function vanderpol(T,mu)

4

[T1,Y]=ode45(@fun,[0,T],[0;2],[ ],mu);plot(T1,Y(:,1), T1,Y(:,2)),shglegend(’y1’,’y2’)pauseplot(Y(:,1), Y(:,2)),shg• Los métodos en los que están basados las órdenes ode de MATLAB utilizan el control

del paso como herramienta para conseguir el compromiso entre la precisión deseada yel costo numérico. Aun así, podemos encontrarnos con problemas numéricos como elproblema de “stiffness”, en el que los cálculos numéricos internos al programa llevan aresoluciones erróneas. Introducimos los valores T = 20, μ = 1, μ = 10 y μ = 1000para observar cuándo aparece oscilación brusca de la solución. En general, una posiblesolución a este problema consiste en proporcionar el jacobiano para evitar que éste seadeterminado numéricamente. Utilizar ahora los siguientes ficheros: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 siguien-te para distintos valores del parámetro a. Obtener la gráfica de la solución aproximadapara los valores a = 1 y a = −1.

(PV I)

(y0 = a cos( t

2)y,

y(0) = 1.

Ejercicio 8. Considerar el problema

(PV I)

⎧⎪⎨⎪⎩dy

dt= y − 4e−3t,

y(0) = 1.

• Utilizar ode45 para encontrar una solución aproximada en el intervalo [0, 3]. ¿Quéparece ocurrir cuando t crece? A continuación dibujar la solución en un intervalomás largo (que vaya al menos hasta t = 20). ¿Qué ocurre cuando t crece?

• Resolver el PVI exactamente, comparar la solución exacta con la aproximación deMatlab e interpretar los resultados.

5