Está en la página 1de 9

PRACTICAS DE CALCULO NUMERICO AVANZADO PRACTICA 3: Mtodos de Runge-Kutta expl e citos.

Pares encajados
En esta prctica implementaremos un mtodo de Runge-Kutta expl a e cito general que posteriormente utilizaremos para construir una rutina adaptativa para integrar sistemas de ecuaciones diferenciales ordinarias (en concreto, implementaremos el mtodo de Runge-Kutta Fehlberg). e

Mtodos de Runge-Kutta expl e citos

Construiremos un mtodo de Runge-Kutta expl e cito general de s etapas, es decir, que implemente cualquier mtodo de un paso con la estructura: e
s

yn+1 = yn + h
i=1

bi ki

(1)

donde

Nuestros programas debern ser vlidos para sistemas de ecuaciones diferenciales ordinarias de primer a a orden. Se sugiere utilizar alg n sistema de ecuaciones sencillo como comprobacin de funcionamiento u o de las rutinas que construyamos, en concreto, una posibilidad es: y1 = y 2 ; y2 = y1 y1 (0) y2 (0) = 0 1 (3)

ki = f tn + ci h, yn + h

i1 j=1

aij kj , i = 1, ..., s

(2)

Los programas debern funcionar para cualquier mtodo de Runge-Kutta sin ms que proporcionar el a e a tablero de Butcher correspondiente. Para facilitar la posterior tarea de construccin de un par encajado, o ser conveniente realizar de forma separada el clculo de las etapas k i y el clculo del paso (es decir, el a a a clculo de yn+1 a partir de yn ). a Construiremos la rutinas generales para mtodos RK considerando como ejemplo concreto, el sie guiente mtodo de orden 3: e 0 0 1/2 1/2 3/4 0 2/9 0 0 3/4 1/3 0 0 0 4/9

c A bT

(4)

En resumen, se pide construir las siguientes rutinas: 1. Funcin fsis: conteniendo la funcin f (t, y), donde y es el vector columna de las soluciones. Por o o ejemplo, en la caso de la Ec. (3), podr amos escribir: function f=fsis(t,y) f=[y(2);-y(1)]; 2. Rutina etapas, en las que calcularemos las k i . En la misma rutina se debern proporcionar las a matrices c y A. La sintaxis ser: a function k=etapas(tn,yn,h) %----------------------------------------------------------------

%Sintaxis: k=etapas(tn,yn,h) %---------------------------------------------------------------%funcion que calcula las etapas de un metodo de RK explicito para %sistemas de n EDOs de primer orden %Inputs: % tn: instante temporal % yn: vector solucion en el instante tn (vector columna n x 1) % h: paso %Outputs: % k: etapas (matriz n x s, donde s es el numero de etapas) %---------------------------------------------------------------%Dentro de la rutina se han de proporcionar las matrices c y A %---------------------------------------------------------------c=[0; 1/2; 3/4]; % Estas son las matrices c a=[0 0 0; % y A para un RK explicito de 3 1/2 0 0 ; % etapas y orden 3 0 3/4 0]; Las salidas de esta rutina son pues las k i denidas en la ecuacin (2). o 3. Rutina paso: dadas los valores para las etapas k i , esta rutina implementa un paso del mtodo de e Runge-Kutta correspondiente. En esta rutina se proporcionar el vector b del tablero de Butcher. a La sintaxis y signicado de inputs y outputs se describe a continuacin. o function yout=paso(tn,yn,h) %---------------------------------------------------------------%Sintaxis: yout=paso(tn,yn,h) %---------------------------------------------------------------%funcion que calcula un paso para un metodo de RK del que se %proporciona el vector b y los valores de las etapas k_i %Inputs: % tn: instante temporal % yn: vector solucion en el instante tn (vector columna n x 1) % h: paso %Outputs: % yout: vector solucion en el instante temporal tn+h %---------------------------------------------------------------%Dentro de la rutina se ha de proporcionar la matriz b %---------------------------------------------------------------%Esta rutina llama a la funcion etapas(tn,yn,h) %---------------------------------------------------------------b=[2/9 1/3 4/9];%vector b para el RK de orden 3 dado como ejemplo 4. Rutina RK: esta rutina, utilizando rutina paso, integra la ecuacin diferencial denida por la o funcin fsis con las condiciones iniciales y0. La sintaxis es la siguiente: o function [t,y]=RK(t0,tf,y0,N) %--------------------------------------------------------%Sintaxis: [t,y]=RK(t0,tf,y0,N)

%--------------------------------------------------------%Integracion de un sistema de EDOs de primer orden %mediante un metodo de un paso %Inputs: % t0:instante inicial % tf:instante final % y0:vector columna con las n condiciones iniciales % N:numero de divisiones del intervalo [t0,tf] %Outputs: % t:vector conteniendo los instantes t0,t1,...,tN % y:matriz Nxn de las soluciones en t0,t1,...,tN %--------------------------------------------------------%Esta funcion debe llamar a una rutina para evaluar % y(n+1) a partir de y(n) mediante el correspondiente % metodo de un paso (por ejemplo, mediante un Runge-Kutta) 5. Rutina orden. Escribiremos un programa para comprobar que el orden del mtodo de Runge e Kutta que se da como prueba es, efectivamente, 3.

1.1

Algunos ejemplos de output como comprobacin o

Como ayuda para comprobar el funcionamiento de las rutinas, damos algunos ejemplos numricos para e su comprobacin (aunque la mejor comprobacin ser la de obtener el orden mediante la rutina orden. o o a >> format short e >> etapas(1,[0.1 0.9],0.01) ans = 9.0000e-01 -1.0000e-01 8.9950e-01 -1.0450e-01 8.9922e-01 -1.0675e-01

>> paso(1.4,[1 3],0.1) ans = 1.2945e+00 2.8852e+00 >> [t,y]=RK(0,1,[1 1],5) t = 0 2.0000e-01 4.0000e-01 6.0000e-01 8.0000e-01 1.0000e+00

y = 1.0000e+00 1.0000e+00 1.1787e+00 7.8133e-01 1.3103e+00 5.3154e-01 1.3897e+00 2.6060e-01 1.4137e+00 -2.0704e-02 1.3813e+00 -3.0114e-01

1.2

Listado de programas

En resumen, para esta primera parte se piden los siguientes programas: 1. orden.m 2. RK.m 3. etapas.m 4. paso.m 5. fsis.m

Programacin de un par encajado o

La idea de los pares encajados es simple: se basa en derivar pares de mtodos de Runge-Kutta que e compartan las mismas etapas ki y que sean de ordenes consecutivos. Es decir, supone disponer de un mtodo de orden p e
s

yn+1 = yn + h
i=1

bi ki

y de un mtodo de orden p + 1: e
s

yn+1 = yn + h
i=1

i ki b

donde ki = f tn + ci h, yn + h

i1 j=1

ya que consideramos mtodos expl e citos. De este modo, se puede, por ejemplo, utilizar el mtodo de orden p para obtener la solucin y el e o mtodo de orden p + 1 para estimar el error local de truncamiento. De hecho, una estimacin del mismo e o para el mtodo de orden p est dada por: e a Tn+1 = h
s i=1

aij kj , i = 1, ..., s

(bi i )ki b

(5)

Control adaptativo del paso de integracin o


Si disponemos de una estimacin del error local de truncamiento, podemos plantearnos dise ar un o n algoritmo que permita adaptar el paso de integracin. Si queremos asegurarnos de que o Tn+1 < T ol , siendo T ol la tolerancia al error local de truncamiento que queramos imponer, podemos estimar Tn+1 como antes y comprobar si pasa o no el test. Si no lo pasa, reducimos el paso de integracin y volvemos o a dar el paso. Pero, cmo ha de ser el nuevo paso que tomemos para proceder de forma eciente?. o Mediante argumentos simples podemos estimar que ese nuevo paso debe ser de la forma: hnuevo = q T ol n+1 | |T
1/(p+1)

Hacer h=h ini

Calcular yn+1 ~ Calcular la estimacion Tn+1 Tol hn q ~ = Tn+1 ~ Es Tn+1 < Tol ? Si h n+1q = Tol (T ) ~
n+1
1 p+1

1 p+1

hn

n = n+1 No

hn

No

Es t n+1 > b ? Si Fin

Figura 1: diagrama de ujo para un par encajado siendo q, un factor de seguridad (q 0.8 suele funcionar bien). En alg n momento lograremos un paso de integracin que supere el test. Cuando suceda esto, ser u o a conveniente asegurarnos de que el siguiente paso que demos tambin va a resultar adecuado y econmico. e o Por tanto, avanzaremos el nuevo paso de integracin de acuerdo con la expresin anterior. o o

Algoritmo de un Runge-Kutta adaptativo


Aunque los diagramas de ujo estn algo pasados de moda, tienen su utilidad didctica. Damos a a a continuacin el que corresponder a un mtodo Runge-Kutta adaptativo t o a e pico:

Desarrollo de la prctica a
El mtodo de Runge-Kutta-Fehlberg (4,5) responde al siguiente tablero de Butcher e 0
1 4 3 8 12 13

0
1 4 3 32 1932 2197 439 216 8 27 25 216 16 135 1 360

0 0
9 32 7200 2197

0 0 0
7296 2197 3680 513 3544 2565 1408 2565 6656 12825 128 4275

0 0 0 0
1859 4104 2197 4104 28561 56430 2197 75240 845 4104

1
1 2

bi i b bi i b

8 2 0 0 0

0 0 0 0 0 11 40 1 5 9 50
1 50

0 0 0 0 0 0 0
2 55 2 55

Este mtodo utiliza un mtodo de cuarto orden de 5 etapas y un mtodo de quinto orden de 6 etapas. e e e Se proporcionan los coecientes en formato Matlab en: http://personales.unican.es/segurajj/coefs.txt

Implementacin del mtodo o e


Comenzaremos por repetir la primera parte de la prctica para los mtodos de Runge-Kutta de orden 4 y a e 5 descritos anteriormente, comprobando el orden de convergencia. Para ello, modicaremos ligeramente las rutinas etapas, y paso.

1. etapas45: igual que etapas.m pero con los coecientes A correspondientes al mtodo de Rungee Kutta Fehlberg. La sintaxis ser la misma, salvo porque, para aplicar fcilmente las rutinas a varias a a funciones, andiremos una primera entrada para especicar la funcin f (t, y) correspondiente. La a o sintaxis ser entonces: a function k=etapas45(fun,t,yn,h) Siendo fun una cadena alfanumrica. Por ejemplo, fun=fsis, si queremos considerar la f (t, y) e denida en el chero fsis.m. Otra diferencia respecto a etapas.m, ser en la propia evaluacin de las etapas para la que se a o utilizar el comando feval. Recordemos que, por ejemplo, feval(fun,1,[3 -1]) para fun=fsis a equivale a escribir fsis(1,[3 -1]). Para ms detalles, consultar el help. a 2. paso45: igual que paso.m pero incluyendo los coecientes b para los Runge-Kutta encajados. Las salidas de la rutina sern el nuevo valor dado por el mtodo de orden 5 as como la estimacin a e o del error (ec. (5)): function [yout,err]=paso45(fun,tn,yn,h) %------------------------------------------------------------%Sintaxis: [yout,err]=paso45(fun,tn,yn,h) %-------------------------------------------------------------%funcion que calcula un paso para el metodo de RK-F del que %se proporcionan los vectores b y los valores de las etapas k_i %Inputs: % fun: cadena alfanumerica con el nombre del fichero que % contiene la funcion f(t,y) % tn: instante temporal % yn: vector solucion en el instante tn (vector columna n x 1) % h: paso %Outputs: % yout: vector solucion en el instante temporal tn+h utilizando % el RK de orden 5 % err: estimacion del error de truncamiento local para el RK-F %---------------------------------------------------------------%Dentro de la rutina se han de proporcionar las matrices b (para %orden (4) y bg (para orden 5)) %---------------------------------------------------------------%Esta rutina llama a la funcion etapas45(tn,yn,h) %---------------------------------------------------------------b=[25/216 0 1408/2565 2197/4104 -1/5 0]; bg=[16/135 0 6656/12825 28561/56430 -9/50 2/55]; 3. RK45, igual que RK.m pero para el Runge-Kutta Fehlberg. El vector de salida ser la solucin a o numrica para el mtodo de orden 5. Sintaxis: e e [t,y,error]=RK45(fun,t0,tf,y_0,N) donde la unica diferencia respecto a RK.m es la aparicin del primer input, antes descrito. o 4. orden45.m: para comprobar que el orden obtenido con RK45 es, efectivamente, 5.

Una vez vericado el correcto funcionamiento de RK45, utilizaremos las funciones etapas45 y paso45 para construir el mtodo adaptativo de Runge-Kutta Fehlberg, que implementa el diagrama de e ujo de la Figura 1. La sintaxis ser la siguiente: a function [t,y,errlt]=fehlb(fun,t0,tf,y_0,eps) %-------------------------------------------------------------------%Sintaxis: [t,y,errlt]=fehlb(fun,t0,tf,y_0,eps) %-------------------------------------------------------------------%funcion que implementa el metodo de Runge-Kutta Fehlberg adaptativo %Inputs: % fun: cadena alfanumerica para el nombre del fichero conteniendo la % funcion f(t,y) % tn: instante inicial % tf: instante final % y_0: vector columna de condiciones iniciales % eps: tolerancia de error para el error local de truncamiento %Outputs: % t: vector conteniendo los instantes temporales % y: valores numericos proporcionados para los instantes t; es una % matriz n x N (n: numero de ecuaciones; N: longitud del vector t) % err: estimacion del error de truncamiento local para cada instante %--------------------------------------------------------------------%Dentro de la rutina se han de proporcionar las matrices b (para orden %4) y bg (para orden 5)) %--------------------------------------------------------------------%Esta rutina llama a la funcion paso45(fun,tn,yn,h) %--------------------------------------------------------------------Para la construccin del la rutina fehlb.m se puede tomar cualquier paso inicial (menor que la o longitud del intervalo) puesto que la rutina adaptar el h hasta que resulte conveniente para la precisin a o exigida. Por ejemplo, tomaremos h = (tf t0)/10. Adems de las rutinas etapas45, paso45, RK45 y fehlb, construiremos tres funciones que cona tengan distintas f (t, y): 1. fsis: que hemos dados expl citamente en la primera pgina de este guin. a o 2. fpen: que implementa la f (t, y) para el pndulo simple (tomemos g = 9.8ms 2 , L = 1m). e 3. fbru: que implementa la f (t, y) para el sistema conocido como Brusselator:
2 y1 = 1 + y1 y2 4y1 2 y2 = 3y1 y1 y2

(6)

sistema para el que, a diferencia de los otros sistemas estudiados, no tenemos solucin anal o tica, ni siquiera en trminos de funciones especiales como ocurre con el pndulo simple. e e Adems, para poder comparar en el caso del pndulo, construiremos la rutina analitica.m, que a e proporciona la solucin anal o tica del pndulo simple considerada en la anterior prctica. La sintaxis e a ser: a function theta=analitica(t,cond_in);

Esta rutina se proporciona en http://personales.unican.es/segurajj/analitica.txt A continuacin, describiremos las actividades a realizar con los programas desarrollados en la seo gunda parte de esta prctica. Esta actividades debern ser ejecutadas por un programa Matlab al que a a llamaremos adaptativo.m.

2.1

Listado de programas

En resumen, los programas necesarios para realizar esta parte de la prctica son: a 1. orden45.m 2. RK45.m 3. etapas45.m 4. paso45.m 5. adaptativo.m 6. fehlb.m 7. fsis.m (programa ya utilizado en la primera parte) 8. fpen.m 9. fbrus.m 10. analitica.m (programa que se proporciona en la pgina web). a

2.2
2.2.1

Actividades a realizar (adaptativo.m)


Primer problema

Resolveremos el problema de valores iniciales de le Ec. (3) para t [0, 10]. Dibujaremos cuatro grcas a (que se recomienda que aparezcan en la misma ventana grca utilizando subplot): a 1. Aplicaremos el mtodo adaptativo para una tolerancia de error absoluto = 10 10 . Dibujaremos e en una misma grca la solucin y el paso h como funcin del tiempo. Como los pasos sern a o o a peque os, se recomienda multiplicarlos por un factor para que sean visibles en la grca (un n a factor 20 debe bastar). 2. Dibujaremos el error absoluto cometido para la primera componente del vector solucin, compao rando con la solucin exacta y1 (t) = sin t. o 3. Considerando el mismo n mero de puntos que resultan en el mtodo adaptativo pero escogiendo u e un paso constante, resolveremos el mismo problema mediante RK45 y dibujaremos la solucin. o 4. Representar el error para la primera componente obtenida mediante RK45 comparando con la solucin exacta. o Tiene en este caso alguna ventaja el mtodo adaptativo RK-Fehlberg?, Por qu?. e e

2.2.2

Segundo problema (pndulo: primera parte) e

Resolveremos el problema del pndulo simple comparndolo con la solucin anal e a o tica. Las condiciones iniciales sern: angulo inicial /2 y velocidad angular inicial nula. Consideraremos el intervalo t [0, 10] a y una tolerancia para el error absoluto = 10 10 . Repetimos las representaciones grcas consideradas para el primer problema. La solucin anal a o tica en este caso se obtiene mediante analitica.m. Los pasos h convendr escalarlos por un factor 100 a para que aperezcan claramente en la grca. a Adems, en otra ventana grca proporcionaremos dos grcas con las estimaciones de los errores a a a de truncamiento locales para los dos mtodos (fehlb y RK45) e 2.2.3 Tercer problema (pndulo: segunda parte) e

Repetimos las grcas del segundo problema pero tomamos como condiciones iniciales: angulo inicial a 0.999999, velocidad angular inicial 0. Consideraremos el intervalo t [0, 20] y una tolerancia para el error absoluto = 1014 . Al igual que antes, utilizaremos un factor 100 para los pasos h. Qu diferencias se observan respecto a los anteriores valores iniciales?. e 2.2.4 Cuarto problema: el Brusselator

Consideraremos el problema del Brusselator con condiciones iniciales y 1 (0) = 1.5, y2 (0) = 3.1 en el intervalo t [0, 30]. Como tolerancia de error absoluto tomaremos = 10 10 . Dibujaremos dos grcas a en una misma ventana grca: a 1. Grca con las soluciones y1 , y2 y los pasos h en funcin de t (se recomienda multiplicar los pasos a o por 50 para que sean visibles en la grca). a 2. Grca con la estimacin del error local de truncamiento. a o Discutir brevemente los resultados.

También podría gustarte