Professional Documents
Culture Documents
DE CALCULO
NUMERICO
AVANZADO
PRACTICA
3: M
etodos de Runge-Kutta explcitos. Pares encajados
En esta practica implementaremos un metodo de Runge-Kutta explcito general que posteriormente
utilizaremos para construir una rutina adaptativa para integrar sistemas de ecuaciones diferenciales
ordinarias (en concreto, implementaremos el metodo de Runge-Kutta Fehlberg).
M
etodos de Runge-Kutta explcitos
s
X
bi ki
(1)
(2)
i=1
donde
ki = f tn + ci h, yn + h
i1
X
j=1
aij kj , i = 1, ..., s
Nuestros programas deberan ser validos para sistemas de ecuaciones diferenciales ordinarias de primer
orden. Se sugiere utilizar alg
un sistema de ecuaciones sencillo como comprobacion de funcionamiento
de las rutinas que construyamos, en concreto, una posibilidad es:
y10 = y2
;
y20 = y1
y1 (0)
y2 (0)
0
1
(3)
Los programas deberan funcionar para cualquier metodo de Runge-Kutta sin mas que proporcionar el
tablero de Butcher correspondiente. Para facilitar la posterior tarea de construccion de un par encajado,
sera conveniente realizar de forma separada el calculo de las etapas k i y el calculo del paso (es decir, el
calculo de yn+1 a partir de yn ).
Construiremos la rutinas generales para metodos RK considerando como ejemplo concreto, el siguiente metodo de orden 3:
c A
bT
0
0
1/2 1/2
3/4 0
2/9
0
0
3/4
1/3
0
0
0
4/9
(4)
%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 definidas en la ecuacion (2).
3. Rutina paso: dadas los valores para las etapas k i , esta rutina implementa un paso del metodo de
Runge-Kutta correspondiente. En esta rutina se proporcionara el vector b del tablero de Butcher.
La sintaxis y significado de inputs y outputs se describe a continuacion.
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 ecuacion diferencial definida por la
funcion fsis con las condiciones iniciales y0. La sintaxis es la siguiente:
function [t,y]=RK(t0,tf,y0,N)
%--------------------------------------------------------%Sintaxis: [t,y]=RK(t0,tf,y0,N)
1.1
Como ayuda para comprobar el funcionamiento de las rutinas, damos algunos ejemplos numericos para
su comprobacion (aunque la mejor comprobacion sera la de obtener el orden mediante la rutina orden.
>> 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
2.0000e-01
4.0000e-01
6.0000e-01
8.0000e-01
1.0000e+00
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
y =
1.2
Listado de programas
Programaci
on de un par encajado
La idea de los pares encajados es simple: se basa en derivar pares de metodos de Runge-Kutta que
compartan las mismas etapas ki y que sean de ordenes consecutivos. Es decir, supone disponer de un
metodo de orden p
yn+1 = yn + h
s
X
bi ki
i=1
y de un metodo de orden p + 1:
yn+1 = yn + h
s
X
bi ki
i=1
donde
ki = f tn + ci h, yn + h
i1
X
j=1
aij kj , i = 1, ..., s
s
X
(bi bi )ki
(5)
i=1
T ol
|Tn+1 |
!1/(p+1)
Calcular yn+1
~
Calcular la estimacion Tn+1
h n= q ~Tol
Tn+1
n = n+1
~
Es Tn+1 < Tol ?
1
p+1
hn
No
Si
1
p+1
h n+1
=q
( TTol
)
~
hn
No
Es t n+1 > b ?
n+1
Si
Fin
Desarrollo de la pr
actica
El metodo de Runge-Kutta-Fehlberg (4,5) responde al siguiente tablero de Butcher
0
1
4
3
8
12
13
1
4
3
32
1932
2197
439
216
8
27
25
216
16
135
1
360
1
1
2
bi
bi
bi bi
0
0
9
32
7200
2197
8
2
0
0
0
0
0
0
7296
2197
3680
513
3544
2565
1408
2565
6656
12825
128
4275
0
0
0
0
845
4104
1859
4104
2197
4104
28561
56430
2197
75240
0
0
0
0
0
11
40
15
9
50
1
50
0
0
0
0
0
0
0
2
55
2
55
Este metodo utiliza un metodo de cuarto orden de 5 etapas y un metodo de quinto orden de 6 etapas.
Se proporcionan los coeficientes en formato Matlab en:
http://personales.unican.es/segurajj/coefs.txt
Implementaci
on del m
etodo
Comenzaremos por repetir la primera parte de la practica para los metodos de Runge-Kutta de orden 4 y
5 descritos anteriormente, comprobando el orden de convergencia. Para ello, modificaremos ligeramente
las rutinas etapas, y paso.
1. etapas45: igual que etapas.m pero con los coeficientes A correspondientes al metodo de RungeKutta Fehlberg. La sintaxis sera la misma, salvo porque, para aplicar facilmente las rutinas a varias
funciones, anadiremos una primera entrada para especificar la funcion f (t, y) correspondiente. La
sintaxis sera entonces:
function k=etapas45(fun,t,yn,h)
Siendo fun una cadena alfanumerica. Por ejemplo, fun=fsis, si queremos considerar la f (t, y)
definida en el fichero fsis.m.
Otra diferencia respecto a etapas.m, sera en la propia evaluacion de las etapas para la que se
utilizara el comando feval. Recordemos que, por ejemplo, feval(fun,1,[3 -1]) para fun=fsis
equivale a escribir fsis(1,[3 -1]). Para mas detalles, consultar el help.
2. paso45: igual que paso.m pero incluyendo los coeficientes b para los Runge-Kutta encajados.
Las salidas de la rutina seran el nuevo valor dado por el metodo de orden 5 as como la estimacion
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 sera la solucion
numerica para el metodo de orden 5. Sintaxis:
[t,y,error]=RK45(fun,t0,tf,y_0,N)
donde la u
nica diferencia respecto a RK.m es la aparicion del primer input, antes descrito.
4. orden45.m: para comprobar que el orden obtenido con RK45 es, efectivamente, 5.
Una vez verificado el correcto funcionamiento de RK45, utilizaremos las funciones etapas45 y
paso45 para construir el metodo adaptativo de Runge-Kutta Fehlberg, que implementa el diagrama de
flujo de la Figura 1. La sintaxis sera la siguiente:
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 construccion del la rutina fehlb.m se puede tomar cualquier paso inicial (menor que la
longitud del intervalo) puesto que la rutina adaptara el h hasta que resulte conveniente para la precision
exigida. Por ejemplo, tomaremos h = (tf t0)/10.
Ademas de las rutinas etapas45, paso45, RK45 y fehlb, construiremos tres funciones que contengan distintas f (t, y):
1. fsis: que hemos dados explcitamente en la primera pagina de este guion.
2. fpen: que implementa la f (t, y) para el pendulo simple (tomemos g = 9.8ms 2 , L = 1m).
3. fbru: que implementa la f (t, y) para el sistema conocido como Brusselator:
y10 = 1 + y12 y2 4y1
y20 = 3y1 y12 y2
(6)
sistema para el que, a diferencia de los otros sistemas estudiados, no tenemos solucion analtica,
ni siquiera en terminos de funciones especiales como ocurre con el pendulo simple.
Ademas, para poder comparar en el caso del pendulo, construiremos la rutina analitica.m, que
proporciona la solucion analtica del pendulo simple considerada en la anterior practica. La sintaxis
sera:
function theta=analitica(t,cond_in);
2.1
Listado de programas
En resumen, los programas necesarios para realizar esta parte de la practica son:
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 pagina web).
2.2
2.2.1
Resolveremos el problema de valores iniciales de le Ec. (3) para t [0, 10]. Dibujaremos cuatro graficas
(que se recomienda que aparezcan en la misma ventana grafica utilizando subplot):
1. Aplicaremos el metodo adaptativo para una tolerancia de error absoluto = 10 10 . Dibujaremos
en una misma grafica la solucion y el paso h como funcion del tiempo. Como los pasos seran
peque
nos, se recomienda multiplicarlos por un factor para que sean visibles en la grafica (un
factor 20 debe bastar).
2. Dibujaremos el error absoluto cometido para la primera componente del vector solucion, comparando con la solucion exacta y1 (t) = sin t.
3. Considerando el mismo n
umero de puntos que resultan en el metodo adaptativo pero escogiendo
un paso constante, resolveremos el mismo problema mediante RK45 y dibujaremos la solucion.
4. Representar el error para la primera componente obtenida mediante RK45 comparando con la
solucion exacta.
Tiene en este caso alguna ventaja el metodo adaptativo RK-Fehlberg?, Por que?.
2.2.2
Segundo problema (p
endulo: primera parte)
Resolveremos el problema del pendulo simple comparandolo con la solucion analtica. Las condiciones
iniciales seran: angulo inicial /2 y velocidad angular inicial nula. Consideraremos el intervalo t [0, 10]
y una tolerancia para el error absoluto = 10 10 .
Repetimos las representaciones graficas consideradas para el primer problema. La solucion analtica
en este caso se obtiene mediante analitica.m. Los pasos h convendra escalarlos por un factor 100
para que aperezcan claramente en la grafica.
Ademas, en otra ventana grafica proporcionaremos dos graficas con las estimaciones de los errores
de truncamiento locales para los dos metodos (fehlb y RK45)
2.2.3
Tercer problema (p
endulo: segunda parte)
Repetimos las graficas del segundo problema pero tomamos como condiciones iniciales: angulo inicial
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.
Que diferencias se observan respecto a los anteriores valores iniciales?.
2.2.4
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 graficas
en una misma ventana grafica:
1. Grafica con las soluciones y1 , y2 y los pasos h en funcion de t (se recomienda multiplicar los pasos
por 50 para que sean visibles en la grafica).
2. Grafica con la estimacion del error local de truncamiento.
Discutir brevemente los resultados.