Está en la página 1de 34

Parte II

Resolución numérica de
ecuaciones diferenciales

53
Versión 30/1/2008
http://matematicas.uclm.es/ind-cr/metnum/index.html
Versión 30/1/2008
http://matematicas.uclm.es/ind-cr/metnum/index.html
Capı́tulo 4

Métodos de un paso

Contenidos del capı́tulo


4.1 El método de Euler . . . . . . . . . . . . . . . . . . . . . . . . 56
4.1.1 Planteamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
4.1.2 Cotas para el error en el método de Euler. . . . . . . . . . . . . 58
4.1.3 Efecto de los errores de redondeo en el método de Euler . . . . 59
4.2 Métodos de orden superior . . . . . . . . . . . . . . . . . . . . 61
4.2.1 Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
4.2.2 Método de Euler modificado y de medio paso . . . . . . . . . . 61
4.2.3 Implementación de los métodos de segundo orden . . . . . . . . 63
4.2.4 Rendimiento de los métodos de segundo orden . . . . . . . . . 64
4.3 Métodos de Runge-Kutta de orden superior . . . . . . . . . 65
4.3.1 Generalidades sobre los métodos de Runge-Kutta. . . . . . . . 65
4.3.2 Método clásico de Runge-Kutta de cuarto orden. . . . . . . . . 65
4.3.3 Métodos de Runge-Kutta de orden superior . . . . . . . . . . . 69
4.4 Generalidades sobre los errores global y local de discretiza-
ción en métodos de un paso . . . . . . . . . . . . . . . . . . . 69
4.5 Métodos de un paso y de paso variable . . . . . . . . . . . . 72
4.5.1 Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
4.5.2 Planteamiento de los métodos de un paso y paso variable . . . 72
4.5.3 Métodos embebidos . . . . . . . . . . . . . . . . . . . . . . . . 74
4.5.4 Métodos de un paso y paso variable en Matlab . . . . . . . . 75

En este tema vamos a comenzar el estudio de métodos numéricos para obtener apro-
ximaciones a la solución u(t) de la ecuación diferencial ordinaria

u′ = f (t, u)

con un cierto valor u(t0 ) dado. A esto es a lo que se llama un problema de valor inicial.
También consideraremos sistemas de ecuaciones diferenciales, donde u(t) : [t0 , T ] → RN
es un vector y f una función vectorial f : [t0 , T ] × RN → RN .

55
Versión 30/1/2008
http://matematicas.uclm.es/ind-cr/metnum/index.html
Métodos de un paso 56

Estas ecuaciones aparecen en todas las ramas de las ciencias experimentales e inge-
nierı́a. Como ejemplos podemos citar la Fı́sica donde por ejemplo las leyes de Newton -y
muchas otras- se expresan como ecuaciones diferenciales ordinarias, la Ingenierı́a Eléctri-
ca donde pueden representar la dinámica de un sistema de circuitos, la Biologı́a donde
aparecen por ejemplo en conexión con dinámica de poblaciones, la Quı́mica en rela-
ción con las evolución de las concentraciones de diversos reactivos durante una reacción,
etc. El problema es que las ecuaciones diferenciales no pueden resolverse analı́ticamente
excepto en algunos casos especiales.
Los métodos de integración de ecuaciones diferenciales se basan en la discretización
del dominio unidimensional [t0 , T ] donde se quiere conocer el valor de la función. Esta
discretización en los casos más sencillos consiste en dividir el intervalo en n subintervalos
de igual longitud h, al que se le llama paso de integración. Estos métodos con paso fijo
nos proporcionan entonces unas aproximaciones U1 , .., Un a los valores de la solución
u(t) en los n puntos t1 , .., tn , donde U0 = u(t0 ), tn = T y ti+1 − ti = h.
También estudiaremos en este capı́tulo métodos que se basan en la idea de ajustar
la partición del intervalo en el que se busca la solución en función del comportamiento
de la misma.

4.1 El método de Euler


4.1.1 Planteamiento
Es el método más simple para resolver ecuaciones diferenciales. El método de Euler se
basa en aproximar la derivada por la fórmula de diferencias adelantada

u(tk+1 ) − u(tk ) h ′′
u′ (tk ) = − u (z) = f (tk , u(tk ))
h 2
Despejando obtenemos

h2 ′′
u(tk+1 ) = u(tk ) + hf (tk , u(tk )) + f (zk ).
2
El método de Euler procede despreciando el término de orden h2 de la ecuación ante-
rior por ser desconocido y generando una secuencia de aproximaciones Uk ≃ u(tk ) que
cumplen
Uk+1 = Uk + hf (tk , Uk ).
El método procede de forma recursiva, ası́ con t0 y U0 = u(t0 ) podemos calcular U1 , con
este valor calculamos U2 y ası́ sucesivamente. Cuanto menor es h la solución obtenida
es más precisa y los valores Uk están más próximos a los exactos u(tk ).
El término despreciado es la cantidad por la cual la solución exacta continua u(t) no
satisface las ecuaciones discretas y es lo que se define como error local de discretización,
2
en nuestro caso h2 f ′′ (zk ). En realidad, despreciar este término en la forma explı́cita para
u(tk+1 ) es equivalente a despreciar el término h2 u′′ (z) en la discretización de la ecuación
diferencial. A este término despreciado en la ecuación diferencial es a lo que se denomina
error de truncación, τ , que en nuestro caso es τ (h) = h2 u′′ (z).

Versión 30/1/2008
http://matematicas.uclm.es/ind-cr/metnum/index.html
Métodos de un paso 57

Cuando un método numérico satisface que su error de discretización tiende a cero


cuando h tiende a cero se dice que el esquema numérico es consistente.
Un ejemplo de implementación del método de Euler lo proporciona la siguiente fun-
ción Matlab

function [t,U] = euler(fun, t0, T, n, U0)


%
% [t,U] = euler(fun, t0, T, n, U0)
% Resuelve la ecuacion diferencial u’(t)=fun(t,u)
% aplicando el metodo de Euler
%
%Variables de entrada:
% fun(t,u): parte derecha de la ecuacion diferencial
% t0: punto inicial
% T: punto final del intervalo donde se calcula u(t)
% n: numero de subintervalos en que se divide [t0,T]
% U0: valor de la funcion u(t) en t0.
%
% Variables de salida:
% t: valor de t en los puntos
% U: valor aproximado de la funcion u(t) en los n+1 puntos
%
h = (T-t0)/n;
t = t0:h:T;
U = zeros(1,n+1);
U(1) = U0;

for k=1:n
U(k+1) = U(k) + h*feval(fun, t(k), U(k));
end

Como ejemplo de aplicación del método de Euler vamos a estudiar el siguiente pro-
blema de valores iniciales sencillo
u′ + u = 2 cos t


u(0) = 2

Queremos calcular numéricamente la solución u(t) hasta t = 2 si u(0) = 2. La


solución analı́tica es fácil de obtener, siendo u(t) = cos t + sen t + e−t . El disponer de la
solución exacta nos permite comparar las soluciones numéricas con soluciones analı́ticas.
El primer paso para resolver el problema numéricamente es describir la función
f (t, u(t)) = −u + 2 cos t, por medio de una función Matlab, por ejemplo haciendo

function f = ejemploode(t,u)
f = -u+2*cos(t);

Si aplicamos la función euler para resolver el problema con diferentes pasos de


integración y comparamos el resultado con los resultados exactos usando 100, 50 y 20
pasos obtenemos los resultados para el error en t = 5 que se resumen en la siguiente
tabla.

Versión 30/1/2008
http://matematicas.uclm.es/ind-cr/metnum/index.html
Métodos de un paso 58

Paso h Resultado a t = 5 Error


0.05 -0.6936 0.0253
0.1 -0.7192 0.0506
0.25 -0.7993 0.1308

4.1.2 Cotas para el error en el método de Euler.


Vamos a enunciar un teorema que nos responde a la pregunta de cúan preciso es el
método de Euler.

Teorema. Sea f una función continua tal que |f (t, y) − f (t, x)| ≤ L|y − x| con t ∈
[t0 , T ], pudiendo estar x e y en toda la recta real y siendo L una constante real positiva
(condición de Lipschitz) Supongamos también que existe M > 0 tal que |u′′ (t)| < M .
Entonces
hM n [L(tk −t0 )] o
|u(tk ) − U (tk )| ≤ e −1 .
2L
Demostración. Vamos a partir del desarrollo de Taylor de la solución en torno al punto
tk que es
h2
u(tk+1 ) = u(tk ) + hu′ (tk ) + u′′ (zk ), zk ∈ (tk , tk+1 ).
2
Por otro lado la fórmula de Euler aplicada al mismo intervalo temporal nos dice que
Uk+1 = Uk + hf (tk , Uk ). Restemos ahora ambas aproximaciones

h2 ′′
u(tk+1 ) − Uk+1 = u(tk ) − Uk + hu′ (tk ) − hf (tk , Uk ) + u (zk ), zk ∈ (tk , tk+1 ).
2
El error en cada paso es la diferencia entre la solución real y la aproximada, ek =
|u(tk ) − U (tk )|, entonces tomando valores absolutos en ambos lados de la desigualdad
tendremos que,

h2 ′′
|u (zk )|
ek+1 = |u(tk+1 ) − Uk+1 | ≤ |u(tk ) − Uk | + |hf (tk , u(tk )) − hf (tk , Uk )| +
2
h2 h2
≤ ek + hL|u(tk ) − Uk | + M = (1 + hL)ek + M.
2 2
por la condición de Lipschitz sobre f y la condición de acotación sobre u′′ . La ecuación
anterior es una relación de recurrencia para los errores que se van cometiendo sucesiva-
mente. Vamos a ir iterando la ecuación anterior partiendo de t0 . Evidentemente, si no
consideramos el error de redondeo e0 = 0. A partir de aquı́ obtenemos

h2
e1 ≤ M.
2
h2 h2 h2
e2 ≤ (1 + hL)e1 +
M ≤ (1 + hL) M + M.
2 2 2
... ... 
... 
k
X h2 Mh h i
ek+1 ≤  (1 + hL)j  M = (1 + hL)k+1 − 1 .
2 2L
j=0

Versión 30/1/2008
http://matematicas.uclm.es/ind-cr/metnum/index.html
Métodos de un paso 59

Esta última ecuación ya nos proporciona una cota para el error en el paso k + 1
conocidas la cota M y la constante de Lipschitz L. Es sin embargo más ilustrativo
reescribir esta ecuación de otra forma usando que (1+hL)k+1 ≤ ehL(k+1) y que h(k+1) =
tk+1 − t0 , para obtener
hM h (Ltk+1 −Lt0 ) i
ek+1 ≤ e −1 ,
2L
y por lo tanto a probar lo que querı́amos, que se deduce automáticamente de aquı́.

Lo que nos dice este teorema es que para una función f de clase Lifschitz el error
queda acotado exponencialmente por el intervalo de integración y depende linealmente
de h. Es de esperar que al dividir el paso de integración h por dos el error se reduzca
aproximadamente a la mitad. Este teorema exige unas condiciones algo restrictivas ya
que no todas las funciones son Lipschitz ni solemos conocer una cota para la derivada
segunda de la solución pero al menos nos proporciona pistas sobre las dependencias de la
solución en los parámetros que afectan la resolución numérica de la ecuación diferencial.
Si volvemos a nuestro ejemplo anterior y realizamos los cálculos con pasos cada vez
menores obtenemos el siguiente resultado,

u = exp(-5)+sin(5)+cos(5);
[t1, U1] = euler(’funt21’, 0, 5, 10, 2); Err10=abs(u-U1(11))
[t2, U2] = euler(’funt21’, 0, 5, 100, 2); Err100 = abs(u-U2(101))
[t3, U3] = euler(’funt11’, 0, 5, 1000, 2); Err1000 = abs(u-U3(1001))

Err10=
0.27737207875026
Err100=
0.02506558292072
Err1000=
0.00248400147359

Observemos como efectivamente el error se reduce según lo previsto, de manera


aproximadamente proporcional con h.

4.1.3 Efecto de los errores de redondeo en el método de Euler


El estudio anterior se ha desarrollado suponiendo que fuera posible realizar los cálculos
con precisión infinita. Sin embargo hemos visto en otros capı́tulos que esto no es posible
y de hecho la influencia del error de redondeo puede ser muy apreciable. Aunque el
análisis de este tipo de errores es complicado en la práctica, el método de Euler es
suficientemente sencillo como para poder realizar los cálculos del efecto de los errores
de redondeo hasta el final. Se deja como ejercicio utilizar la misma técnica usada en la
sección 4.1.2 para demostrar el siguiente teorema,

Teorema. Sea f una función continua tal que |f (t, y) − f (t, x)| ≤ L|y − x| con t ∈
[t0 , T ], pudiendo estar x e y en toda la recta real y siendo L una constante real positiva.

Versión 30/1/2008
http://matematicas.uclm.es/ind-cr/metnum/index.html
Métodos de un paso 60

−1
10

−2
10

−3
10

−4
10

−5
10

−6
10

−7
10

−8
10

−9
10
−14 −12 −10 −8 −6 −4 −2 0
10 10 10 10 10 10 10 10

Figura 4.1: Comportamiento de la cota del error frente a h en el método de Euler

Supongamos también que existe M > 0 tal que |u′′ (t)| < M y que en cada paso el error
de redondeo cometido al evaluar la fórmula del método de Euler es ǫk . Entonces
 
hM ǫ n [L(tk −t0 )] o
|u(tk ) − Uk | ≤ + e − 1 + ǫ0 eL(tk −t0 ) ,
2L hL
siendo ǫ una cota superior para los ǫk y ǫ0 el error en la representación en coma flotante
del dato inicial.
La conclusión esencial de este resultado es que cuando h tiende a cero el error no
está acotado, divergiendo la cota como 1/h. Esto quiere decir que calcular con un paso
h demasiado pequeño puede llevar a resultados erroneos.  En particular el menor valor
de la cota en este caso lo da el mı́nimo de hM ǫ
2L  hL con lo que es de esperar que
+
d hM ǫ
eligiendo h como aquel que satisface dh 2L + hL = 0 consigamos minimizar el error.
q

En particular, al realizar el cálculo se obtiene h ∼ M donde ǫ recordemos que era una
cota para los errores de redondeo en los Uk , o sea

ǫ ∼ (máx Uk ) ε,

siendo ε = 10−d con d el número de dı́gitos de precisión. La conclusión es que√usando el


método de Euler no es posible reducir el error tomando h menor que 10−d/2 Umax .
Un ejemplo de curva de dependencia de error con el error de redondeo se dibuja en
la figura 4.1
Esta va a ser la única vez que discutamos en el contexto de las ecuaciones diferenciales
ordinarias el efecto del error de redondeo. Bástenos saber que es otra fuente de error que
está presente y que en alguna situación puntual puede afectar a los cálculos. De todos
modos, el efecto de estos errores se manifiesta sólo cuando los pasos son muy pequeños,
tanto que el mismo uso de los métodos se hace prohibitivo en tiempo de cálculo.

Versión 30/1/2008
http://matematicas.uclm.es/ind-cr/metnum/index.html
Métodos de un paso 61

4.2 Métodos de orden superior


4.2.1 Introducción
El método de Euler, aunque funciona, es un método de muy baja precisión que requiere
el uso de pasos h prohibitivamente pequeños para proporcionar resultados de mayor
calidad. Es por esto que es necesario obtener métodos de mayor precisión para resolver
ecuaciones diferenciales ordinarias.
Una primera forma de aumentar la precisión de las aproximaciones es utilizar bien
fórmulas de derivación más precisas que la de dos puntos utilizada en la derivación
del método de Euler o bien utilizar la información de la función f de la que se va
disponiendo en pasos anteriores. En ambos casos esta filosofı́a lleva a los denominados
métodos multipaso que veremos en capı́tulos próximos.
Para proseguir desarrollando métodos de un paso de orden más elevado reescribamos
de modo formal la ecuación diferencial de nuestro problema, u′ = f (t, u) con u(t0 ) = u0 ,
en forma integral integrando en ambos miembros entre t y t + h.
Z t+h
u(t + h) − u(t) = f (s, u(s))ds.
t

No pensemos que el problema ya está resuelto. En el integrando aparece la función


f (t, u(t)) que depende de la solución desconocida de este problema.
¿Qué ocurre si aproximamos la integral del modo más tosco posible, esto es, supo-
niendo que u(s) no cambia mucho en el intervalo [t, t + h]?

f (s, u(s)), s ∈ [t, t + h] ≃ f (t, u(t))


Z t+h
f (s, u(s))ds ≃ (t + h − t)f (t, u(t)) = hf (t, u(t))
t
u(t + h) ≃ u(t) + hf (t, u(t))

Esta última expresión es precisamente la fórmula del método de Euler.


Esta forma de presentar el problema nos permite ver de otra forma la aproximación
de los métodos numéricos ya que utilizando aproximaciones precisas de esta integral
obtendremos las soluciones con mayor precisión al precio de tener que evaluar la función
f en más puntos interiores del intervalo.

4.2.2 Método de Euler modificado y de medio paso


Dos posibilidades distintas para proximar la integral anterior serı́an las siguientes
t+h
h
Z
[f (t, u(t)) + f (t + h, u(t + h))] + O h3 ,

f (s, u(s))ds =
t 2
Z t+h
f (s, u(s))ds ≃ hf t + h2 , u t + h2 + O h3 .
 
t

En el primer caso se aproxima la integral mediante la regla de trapecios y en el segundo


se utiliza el valor de f en el punto medio t + h/2. Ahora bien, como la solución u(t)

Versión 30/1/2008
http://matematicas.uclm.es/ind-cr/metnum/index.html
Métodos de un paso 62

es desconocida las fórmulas anteriores no pueden aplicarse directamente. Sin embargo


podemos utilizar las estimaciones que nos proporciona el método de Euler, u(t + h) ≃
u(t) + hf (t, u(t)) y u(t + h/2) = u(t) + h2 f (t, u(t)). Procediendo de esta forma llegamos
ya a una expresión cerrada para estos métodos

Fórmula de Euler modificada

h
Uk+1 = Uk + 2 [f (tk , Uk ) + f (tk+1 , Uk + hf (tk , Uk ))] .

Método de medio paso (o de la pı́dola o de medio punto)


 
h h
Uk+1 = Uk + hf tk + , Uk + f (tk , Uk ) .
2 2

El siguiente teorema nos da información sobre el error de truncación del método de


Euler modificado. El análisis del método de medio paso es muy similar.
Teorema. El error de truncación en el método de Euler modificado es τ (h) = O(h2 ).
Demostración. Para estudiar el error de truncación sustituimos los valores exactos de
la función en la ecuación discreta
h
u(tk + h) − u(tk ) ≃ [f (tk , u(tk )) + f (tk + h, u(tk ) + hf (tk , u(tk ))] ,
2
y el error de truncación queda definido por el “residuo”
u(tk + h) − u(tk ) 1
τ (h) = − [f (tk , u(tk )) + f (tk + h, u(tk ) + hf (tk , u(tk )))] . (4.1)
h 2
Utilizando el desarrollo de Taylor de f (tk + h, u(tk ) + hf (tk , u(tk ))) encontramos que

f (tk + h, u(tk ) + hf (tk , u(tk ))) =


∂f ∂f (tk , u(tk ))
f (tk , u(tk )) + h (tk , u(tk )) + hf (tk , u(tk )) + O(h2 ).
∂t ∂u
Por otro lado la ecuación diferencial nos dice que u′ = f (t, u(t)) y por lo tanto
∂f (tk , u(tk )) ∂f (tk , u(tk ))
u′′ (tk , u(tk )) = f ′ (tk , u(tk )) = + f (tk , u(tk )) .
∂t ∂u
Con esta información y teniendo en cuenta que
h2 ′′
u(tk + h) = u(tk ) + hf (tk , uk ) + u (tk ) + O(h3 ),
2
obtenemos que, para este método
h 1
τ (h) = f (tk , uk )+ u′′ (tk )+O(h2 )− f (tk , uk ) + f (tk , uk ) + hu′′ (tk ) + O(h2 ) = O(h2 ).

2 2

Versión 30/1/2008
http://matematicas.uclm.es/ind-cr/metnum/index.html
Métodos de un paso 63

Observemos que el error de truncación es de orden superior al que tenı́amos con el


método de Euler, que era O(h). Es de esperar entonces que el método de Euler modificado
nos proporcionará una mejor aproximación a la solución. Más tarde cuantificaremos esta
mejora.

4.2.3 Implementación de los métodos de segundo orden


La implementación de los métodos de segundo orden presentados es muy sencilla. Un
código Matlab que realiza la iteración del método de medio paso es el siguiente

function [t,U] = mediopaso(fun, t0, T, n, u0)


%
% [t,U] = mediopaso(fun, t0, T, n, U0)
% Resuelve u’(t)=fun(t,u(t)) por el metodo de medio paso
%
% Variables de entrada:
% fun(t,u): parte derecha de la ecuacion diferencial
% t0: punto inicial donde conocemos el valor de u(t)
% T: punto final del intervalo donde se calcula u(t)
% n: numero de subintervalos en que se divide el intervalo [t0,T]
% U0: valor de la funcion u(t) en t0.
%
% Variables de salida:
% t: valor de t en los puntos
% U: solucion aproximada en los n+1 puntos
%
U = zeros(1,n+1);
U(1) = u0;
h = (T-t0)/n;
t = t0:h:T;

for k=1:n
U(k+1) =U(k)+h*feval(fun,t(k)+0.5*h,U(k)+0.5*h*feval(fun,t(k),U(k)));
end

En cuanto al método de Euler modificado, su codificación es muy similar

function [t,U] = eulermodif(fun, t0, T, n, u0)


%
%[t,U] = eulermodif(fun, t0, T, n, U0)
% Resuelve u’(t)=fun(t,u) por el metodo de Euler modificado
%
% Variables de entrada:
% fun(t,u): parte derecha de la ecuacion diferencial
% t0: punto inicial
% T: punto final del intervalo donde se calcula u(t)
% n: numero de subintervalos en que se divide [t0,T]
% U0: valor de la funcion u(t) en t0.
%
% Variables de salida:

Versión 30/1/2008
http://matematicas.uclm.es/ind-cr/metnum/index.html
Métodos de un paso 64

0
10

-2
10
Método de Euler
-4
10

-6 Método de
10
Euler modificado
Método de medio paso
-8
10

-10
10

-12
10 -4 -3 -2
-5 -1 0
10 10 10 10 10 10

Figura 4.2: Representación logarı́tmica de los errores de los métodos elementales frente
ah

% t: valor de t en los puntos


% U: valor aproximado de la funcion u(t) en los n+1 puntos
%

U = zeros(1,n+1); U(1) = u0;


h = (T-t0)/n; t = t0:h:T;

for k=1:n
faux = feval(fun, t(k), U(k));
uaux = U(k)+ h*faux;
U(k+1) = U(k) +0.5*h*(feval(fun,t(k+1),uaux)+faux);
end

Dado que el número de operaciones matemáticas, y en particular de llamadas a fun-


ciones externas, que realizan eulermodif y mediopaso es comparable, es de esperar
tiempos de ejecución similares.

4.2.4 Rendimiento de los métodos de segundo orden


Vamos a realizar una comparativa de los distintos métodos. Los resultados obtenidos
para el error con distintos valores de h se muestran en la siguiente tabla (para el ejemplo
modelo u′ = −u + 2 cos t)

h 0.05 0.005 0.0005


Error Euler 2.5 × 10−2 2.5 × 10−3 2.5 × 10−4
Error medio paso 3.5 × 10−4 3.4 × 10−6 3.4 × 10−8
Error Euler modificado 5.7 × 10−4 5.6 × 10−6 5.6 × 10−8

Versión 30/1/2008
http://matematicas.uclm.es/ind-cr/metnum/index.html
Métodos de un paso 65

Puede observarse una mejora evidente en la precisión de los métodos de segundo orden
frente al método de Euler para un mismo valor de h. Al reducir el paso de integración
en una décima parte el error se reduce en un factor del orden de 100, con lo que la
dependencia del error global en el paso de integración es de orden h2 . Por ejemplo si
queremos aproximar la solución con un error de orden 10−8 observamos que el método
de medio paso lo consigue con h = 0.0005. Si quisiéramos obtener esta misma precisión
con el método de Euler tendrı́amos que utilizar h ∼ 0.00000005 con un tiempo de cálculo
muy superior.
La dependencia del error con el paso de integración suele representarse en curvas
logarı́tmicas log(Error) − log(h) como la figura 4.2, que compendia los resultados ante-
riores. La pendiente de la zona lineal corresponde al orden p del error, en nuestro caso
p = 2.

4.3 Métodos de Runge-Kutta de orden superior


4.3.1 Generalidades sobre los métodos de Runge-Kutta.
Los métodos de Runge-Kutta utilizan una combinación de valores de la función en
distintos puntos intermedios comprendidos entre tk y tk+1 para obtener la solución en
tk+1 . De manera general estos métodos pueden escribirse de la forma

s
X
Uk+1 = Uk + bi ki ,
 i=1 
i−1
X
ki = hf tk + ci h, Uk + aij kj  , i = 1, ..., s.
j=1

Los valores de las constantes aij , bi , ci , ası́ como el número entero s definen un método
de Runge-Kutta particular. Las constantes del método suelen elegirse para que el error
de truncación sea lo más pequeño posible ası́ como por razones de estabilidad, etc. A un
método como el anterior se le denomina un método de Runge-Kutta de s etapas.
Todos los métodos que hemos estudiado hasta ahora son métodos de Runge-Kutta.
Por ejemplo, la fórmula de Euler modificada puede escribirse como método de Runge-
Kutta definiendo

Uk+1 = Uk + 12 (k1 + k2 ) ,
k1 = hf (tk , Uk ),
k2 = hf (tk + h, Uk + k1 ),

y por lo tanto es un método de dos etapas.

4.3.2 Método clásico de Runge-Kutta de cuarto orden.


Del mismo modo que pueden deducirse los métodos de Runge-Kutta de orden dos im-
poniendo que el error de truncación sea de ese orden, es posible diseñar métodos de

Versión 30/1/2008
http://matematicas.uclm.es/ind-cr/metnum/index.html
Métodos de un paso 66

Runge-Kutta de orden más alto. Estos métodos utilizan información de la función en


más puntos intermedios del intervalo para disponer de más parámetros libres y poder
anular los términos del error hasta precisiones altas. En la práctica los métodos de or-
den demasiado alto son bastante costosos de implementar y hay que evaluar la función
demasiadas veces por lo que no son demasiado usados. Los métodos de Runge-Kutta
de orden cuarto y superior son unos de los integradores de paso fijo más utilizados en
Ciencias e Ingenierı́a para obtener resultados rápidos y precisos en problemas de valor
inicial que no sean especialmente complicados.

Método clásico de Runge-Kutta de cuarto orden

Uk+1 = Uk + 61 (k1 + 2k2 + 2k3 + k4 ) ,


k1 = hf (tk , Uk ),
k2 = hf (tk + h/2, Uk + k1 /2),
k3 = hf (tk + h/2, Uk + k2 /2),
k4 = hf (tk + h, Uk + k3 ).

El orden del método puede deducirse explicitándolo, siendo su forma


  
h h h
Uk+1 = Uk + f (tk , Uk ) + 2f tk + , Uk + f (tk , Uk )
6 2 2
  
h h h h
+2f tk + , Uk + f tk + , Uk + f (tk , Uk )
2 2 2 2
   
h h h h
+ f tk + h, Uk + hf tk + , Uk + f tk + , Uk + f (tk , Uk ) .
2 2 2 2
Realizando el desarrollo de Taylor se comprueba como esta forma de evaluar las
funciones lleva a un error de truncación O(h4 ). Un programa Matlab que resuelve
ecuaciones diferenciales de primer orden por este método serı́a el siguiente

function [t,U] = rk4una(fun,t0,tf,n,u0);


%
% [t,U] = rk4una(fun,t0,tf,n,u0)
%
% Calcula la solucion de la ecuacion de diferencial de primer orden
% u’ = fun(t,u) usando el metodo de Runge-Kutta de cuarto orden
%
% Variables de entrada:
% fun: nombre de la funcion
% t0, u0: Datos iniciales
% tf: tiempo de parada
% n: numero de subintervalos
%
% Variables de salida:
% [t,U] = Solucion Uk en los instantes de tiempo tk
%

U(1) = u0; h=(tf-t0)/n; t=t0; t = t0:h:tf;

Versión 30/1/2008
http://matematicas.uclm.es/ind-cr/metnum/index.html
Métodos de un paso 67

for k=1:n
k1 = h*feval(fun,t(k),U(k));
k2 = h*feval(fun,t(k)+0.5*h,U(k)+ 0.5*k1);
k3 = h*feval(fun,t(k)+0.5*h,U(k)+ 0.5*k2);
k4 = h*feval(fun,t(k)+ h ,U(k)+k3);
U(k+1) = U(k) + (k1+2*k2+2*k3+k4)/6;
end;

Generalizar este código, o en general cualquier otro para que pueda utilizarse también
para resolver sistemas de ecuaciones diferenciales es inmediato

function [t,U] = rk4(fun,t0,tf,n,u0);


%
% [t,U] = rk4(fun,t0,tf,n,u0)
%
% Calcula la solucion del sistema de ecuaciones diferenciales
% u’ = fun(t,u) usando el metodo de Runge-Kutta de cuarto orden
%
% Variables de entrada:
% fun: nombre de la funcion, que debe realizar operaciones
% sobre vectores
% t0, u0: Datos iniciales. u0 es un vector columna.
% tf: tiempo de parada
% n: numero de subintervalos
%

dim = size(u0); U = zeros(n+1,dim(1));

U(1,:) = u0; h=(tf-t0)/n; t=t0; t = t0:h:tf;

for k=1:n
k1 = h*feval(fun,t(k),U(k,:));
k2 = h*feval(fun,t(k)+0.5*h,U(k,:)+ 0.5*k1.’);
k3 = h*feval(fun,t(k)+0.5*h,U(k,:)+ 0.5*k2.’);
k4 = h*feval(fun,t(k)+ h , U(k,:)+k3.’);
U(k+1,:) = U(k,:) + (k1+2*k2+2*k3+k4).’/6;
end;

Por ejemplo la ecuación de movimiento de un péndulo simple en unidades normalizadas


es
d2 x
+ sen x = 0
dt2
dx
. Definiendo v(t) = dt podemos escribir la ecuación en forma de sistema

dx dv
= v, = − sen x
dt dt
. Para resolverlo definimos la función pendulo.m
function f=pendulo(t,u);
f = [u(2); -sin(u(1))];

Versión 30/1/2008
http://matematicas.uclm.es/ind-cr/metnum/index.html
Métodos de un paso 68

y llamamos a la función rk4 dándole como entrada un vector de datos iniciales, por
ejemplo

[t,U] = rk4(’pendulo’,0,20,100,[2 0]’);

Aplicando este método al ejemplo de las secciones anteriores (la resolución del pro-
blema u′ = −u + 2 cos t con u(0) = 2 en el intervalo [0, 5] obtenemos

h Error
0.5 6.9 × 10−4
0.05 5 × 10−8
0.005 4.9 × 10−12

Obsérvese que la precisión es mucho más alta que la de los métodos de segundo orden
y que además el error es proporcional a h4 , esto es, del mismo orden que el error de
truncación.
En la figura 4.3 se presenta el resultado de ejecutar el método comparativamente con
los métodos ya estudiados para el problema de prueba.
0
10

−2
10
Método de Euler
−4
10

−6
10
Euler modificado
log(Error)

−8
10
Medio paso

−10
10

−12
10 Runge−Kutta 4

−14
10

−16
10
−5 −4 −3 −2 −1 0
10 10 10 10 10 10
log(h)

Figura 4.3: Comparativa de la precisión de distintos métodos de Runge-Kutta elemen-


tales

Para valores muy pequeños de h el método de Runge-Kutta no puede conseguir


reducir más el error debido al efecto del redondeo.

Versión 30/1/2008
http://matematicas.uclm.es/ind-cr/metnum/index.html
Métodos de un paso 69

4.3.3 Métodos de Runge-Kutta de orden superior


Existen muchos métodos de orden superior descritos en la bibliografı́a avanzada sobre la
materia. Un ejemplo de método de quinto orden es el definido por las fórmulas siguientes

k1 = hf (tk , Uk )
 
2h 2
k2 = hf tk + , Uk + k1
5 5
 
h 11 5
k3 = hf tk + , Uk + k1 + k2
4 64 64
 
h 1
k4 = hf tk + , Uk + k3
2 2
 
3 3 15 3 9
k5 = hf tk + h, Uk + k1 − k2 + k3 + k4
4 64 64 8 16
 
5 6 12 8
k6 = hf tk + h, Uk + k2 + k3 − k4 + k5
7 7 7 7
7 32 12 32 7
Uk+1 = Uk + k1 + k3 + k4 + k5 + k6
90 90 90 90 90
Obsérvese como la complejidad de los métodos aumenta al con el número de etapas.
Hemos visto que los métodos de medio paso que son de orden dos poseen dos etapas
mientras que los de orden cuatro poseen cuatro etapas. ¿Será este comportamiento
general? El siguiente teorema aclara esta pregunta
Teorema. No existen métodos de Runge-Kutta para los que el número de etapas sea
igual al orden del método cuando el orden es mayor que cuatro
De hecho el método de orden cinco con menos etapas tiene s = 6 y el de orden
siete con menos etapas tiene s = 10. Para órdenes mayores el número de etapas se
incrementa aún más. Por ejemplo el método de orden 10 con menos etapas construido
hasta el momento tiene s = 17.

4.4 Generalidades sobre los errores global y local de dis-


cretización en métodos de un paso
Al estudiar el método de Euler hemos obtenido que el error global en la solución numérica es
O(h), al igual que el error de truncación. Para los demás métodos que hemos estudiado hemos
visto que los errores de truncación son de obtención directa y no hemos entrado en el cálculo
del error global debido a su mayor complejidad de cálculo. En principio ambos conceptos de
error son diferentes y no está claro que deba existir una conexión entre los mismos. Si ası́ fuese
podrı́amos obtener conclusiones sobre el error global, que es difı́cil de obtener a partir del error
de truncación que puede obtenerse de manera sencilla. Vamos a formalizar esta conexión para el
caso de métodos de un paso. Para ello necesitaremos profundizar más en los conceptos definidos
de modo un tanto cualitativo en la sección anterior.
Vamos a considerar un método de un paso genérico

Uk+1 = Uk + Φ(tk , Uk ; h),

Versión 30/1/2008
http://matematicas.uclm.es/ind-cr/metnum/index.html
Métodos de un paso 70

que aproxima la ecuación diferencial u′ = f (t, u). Diremos que el método es convergente si el
error global tiende a cero, esto es

lı́m |u(tk ) − Uk | = 0
h→0

Definamos ahora la función


(
u(t+h)−u(t)
h , h 6= 0
∆(t, u; h) =
f (t, u(t)), h=0

que es el cociente de diferencias de la solución exacta con paso h.

Definición. Llamaremos error de truncación a la cantidad

τ (t, u; h) = ∆(t, u; h) − Φ(t, u, h)

Como dijimos antes, el error de truncación (o error local de discretización) mide la precisión
con la que la solución exacta satisface las ecuaciones discretas y por lo tanto es una medida de
la calidad de la aproximación. Para un método razonable evidentemente habrá que exigir que

lı́m τ (t, u; h) = 0,
h→0

condición que se conoce como condición de consistencia.

Definición. Se dice que un método es consistente de orden p si

τ (t, u; h) = O(hp )

cuando t ∈ [t0 , T ], u ∈ R, f ∈ Fp (t0 , T ). La clase de funciones Fp (t0 , T ) no es más que funciones


para las que existen todas las derivadas parciales hasta orden p en la región t ∈ [t0 , T ], u ∈ R y
sean continuas y acotadas en esa región.

Antes de presentar el resultado fundamental es necesario introducir un lema auxiliar

Lema. Si los números zk satisfacen condiciones de la forma

|zk+1 | ≤ (1 + δ)|zk | + B, δ > 0, B ≥ 0, i = 0, 1, 2, ...

entonces
enδ − 1
|zn | ≤ enδ |z0 | + B.
δ
Demostración: A partir de las suposiciones del enunciado encontramos inmediatamente que

|z1 | ≤ (1 + δ)|z0 | + B,
|z2 | ≤ (1 + δ)2 |z0 | + B(1 + δ) + B,
..
.
|zn | ≤ (1 + δ)n |z0 | + B (1 + δ)n−1 + ... + (1 + δ) + 1
 

(1 + δ)n − 1 enδ − 1
= (1 + δ)n |z0 | + B ≤ enδ |z0 | + B ,
δ δ
ya que 0 < 1 + δ < eδ cuando 1 + δ > 0.

Con este resultado podemos demostrar el teorema fundamental

Versión 30/1/2008
http://matematicas.uclm.es/ind-cr/metnum/index.html
Métodos de un paso 71

Teorema. Consideremos el problema (4) con t ∈ [t0 , T ], u(t0 ) = u0 cuya solución exacta es u(t).
Supongamos que aproximamos su solución mediante un método de la forma (4.4) con Φ continua
en G = {(t, U, h) : t0 ≤ t ≤ T, |u − U | ≤ γ, 0 ≤ h ≤ h0 } con h0 , γ > 0 y que existen constantes
M, N tales que
|Φ(t, u1 ; h) − Φ(t, u2 ; h)| ≤ M |u1 − u2 |, (4.6)
para todo (t, ui , h) ∈ G, i = 1, 2 y

|τ (t, u(t); h)| = |∆(t, u(t); h) − Φ(t, u(t); h)| ≤ N hp , p > 0, (4.7)

para todo t ∈ [t0 , T ], |h| ≤ |h0 |, entonces existe un valor de h que llamaremos h̄, con 0 < h̄ ≤ h0
tal que el error global de discretización e(t; h) = U (t; h) − u(t) satisface

eM|t−t0 | − 1
|e(t; hn )| ≤ |hn |p N ,
M
para todo t ∈ [t0 , T ] y hn = (t0 − T )/n, n = 1, 2, ..., con |hn | ≤ h̄. Si γ = ∞ entonces h̄ = h0 .

Demostración. Definamos la función



Φ(t, y; h),
 (t, u, h) ∈ G,
Φ̃(t, y; h) = Φ(t, u(x) + γ; h) t ∈ [t0 , T ], |h| ≤ h0 , y ≥ u(x) + γ

Φ(t, u(x) − γ; h) t ∈ [t0 , T ], |h| ≤ h0 , y ≥ u(x) − γ

Esta función es evidentemente continua en G̃ = {(t, y, h) : t ∈ [t0 , T ], y ∈ R, |h| ≤ h0 } y satisface


la condición
|Φ̃(t, y1 ; h) − Φ̃(t, y2 ; h)| ≤ M |y1 − y2 |
en G̃. Como Φ̃(t, u(t); h) = Φ(t, u(t); h) se satisface también

|∆(t, u(t); h) − Φ̃(t, u(t); h)| ≤ N hp .

Definamos la sucesión
Ũk+1 = Ũk + Φ̃(tk , Ũk ; h)
y el error ẽk = Ũk − u(tk ). Escribamos u(tk+1 ) ≡ uk+1 = uk + h∆(tk , uk ; h) y restémosla de la
ecuación para Ũ obteniéndose que
h i h i
ẽk+1 = ẽk + h Φ̃(tk , Ũk ; h) − Φ̃(tk , uk ; h) + h Φ̃(tk , uk ; h) − ∆(tk , uk ; h) .

Usando ahora las condiciones del enunciado del teorema

|Φ̃(tk , Ũk ; h) − Φ̃(tk , uk ; h)| ≤ M |Ũk − uk | = M |ẽi |,


h i
Φ̃(tk , uk ; h) − ∆(tk , uk ; h) ≤ N |h|p ,

y tomando valores absolutos

|ẽk+1 | ≤ |ẽk | + |h|M + N |h|p+1 .

Como ẽ0 = 0 aplicando el lema anterior se obtiene que

ek|h|M − 1
|ẽk | ≤ N |h|p .
M

Versión 30/1/2008
http://matematicas.uclm.es/ind-cr/metnum/index.html
Métodos de un paso 72

Vamos a considerar ahora la aproximación a la solución en un punto con diferentes valores de h,


esto es, definamos un t y h = hn = (t − t0 )/n, n > 0 entero. Entonces definamos tn = t0 + nh = t,
y usando la acotación anterior con k = n llegamos a que
eM|t−t0 | − 1
|ẽ(t, hn )| ≤ N |h|p .
M
Como |t − t0 | ≤ |T − t0 | y γ > 0 existe un h̄ con 0 < h̄ ≤ h0 tal que |ẽ(t; hn )| ≤ γ para todo
t ∈ [t0 , T ], |hn | ≤ h̄. Como el método numérico generado por Φ coincide con el generado por Φ̃
bajo estas hipótesis llegamos a demostrar el resultado final del teorema
eM|t−t0 | − 1
|e(t, hn )| ≤ N |h|p ,
M
siempre que t ∈ [t0 , T ], hn = (t − t0 )/n, n = 1, 2, ... y |hn | ≤ h̄.

Ası́ que lo que expone este teorema es que el error global se comporta como el error local de
truncación. Este es un resultado interesante ya que siempre es más fácil calcular el segundo que
el primero.

4.5 Métodos de un paso y de paso variable


4.5.1 Introducción
Una de las principales limitaciones de los métodos de Runge-Kutta de paso fijo, sea cual
sea su orden, es que carecen de una estimación del error que se comete durante el cálculo;
otra su escasa flexibilidad para acomodarse a distintos regı́menes en el comportamiento
de la solución. Ası́ si se usa un paso de integración grande se estará perdiendo precisión
en las regiones donde u(t) varı́e más bruscamente, pero si se usa un paso de integración
demasiado pequeño se estarán realizando muchos cálculos innecesariamente en las zonas
donde la solución varı́e lentamente.
Esta limitación de los métodos de paso fijo se intenta paliar utilizando métodos de
paso variable. Estos métodos son ampliamente usados y en particular son los que ha-
bitualmente incorporan las rutinas comerciales de resolución de ecuaciones diferenciales
ordinarias.

4.5.2 Planteamiento de los métodos de un paso y paso variable


Supongamos que disponemos de dos métodos de integración, uno de orden q y otro de
orden q + 1, siendo las ecuaciones que definen ambos métodos las siguientes
Uk+1 = Uk + Φq (tk , Uk , h),
Ũk+1 = Ũk + Φq+1 (tk , Uk , h).
Supongamos que partimos del dato inicial u0 que es correcto y calculemos las soluciones
usando las fórmulas anteriores con paso de integración H. Si partimos del dato en tk e
integramos hasta tk+1 = tk + H tendremos
u(tk+1 ) = Uk + Φq (tk , Uk , H) + Hτq (H),
Uk+1 = Uk + Φq (tk , Uk , H),

Versión 30/1/2008
http://matematicas.uclm.es/ind-cr/metnum/index.html
Métodos de un paso 73

y lo mismo para el método de orden q + 1. Entonces, los errores de truncación τq (H) y


τq+1 (H) de los dos métodos satisfarán

Hτq (H) = u(tk+1 ) − Uk+1 ,


Hτq+1 (H) = u(tk+1 ) − Ũk+1 .

Si restamos ahora ambas ecuaciones obtenemos


Ũk+1 (H) − Uk+1 (H)
τq (H) = τq+1 (H) + .
H
Ũ (H)−U (H)
Pero τq+1 (H) = O(H q+1 ) y τq (H) = O(H q ) por lo que τq+1 (H) ≪ k+1 H k+1 .
Entonces el error de truncación cometido al usar el método de menor orden puede
estimarse como
Ũk+1 (H) − Uk+1 (H)
τq (H) ≃ .
H
Si escribimos τq (H) = CH q podemos calcular el valor aproximado de la constante C,
que es
Ũk+1 (H) − Uk+1 (H)
C= .
H q+1
Conocido el valor de la constante podemos extrapolar el resultado a cualquier paso h
obteniendo que el error de truncación vendrá dado aproximadamente por
Ũk+1 (H) − Uk+1 (H) q
τq (h) = h .
H q+1
Ası́ pues si queremos mantener el error de truncación por debajo de una cierta tolerancia
emax , tendremos que elegir h de manera que
 1/q
emax H
h≤H .
Ũk+1 − Uk+1
La idea es que, dado que el error de truncación es del mismo orden que el error global,
si controlamos el primero tendremos controlado el segundo. De hecho, si cada paso lo
realizamos garantizando que el error truncación está acotado por emax , garantizaremos
razonablemente que el error global lo esté por esta misma cantidad.
El modo práctico de proceder es el siguiente: se calculan las aproximaciones Uk+1 , Ũk+1
con paso H, se fija una cota de error emax y se utiliza (4.5.2) para calcular un nuevo paso
de integración h que es el que nos sirve para pasar a tk + h. A partir de aquı́ procedemos
iterativamente.
En resumen, lo que hacen los métodos de paso variable es controlar el h en cada
paso de integración a partir de una estimación del error de truncación, con la esperanza
de que de este modo quede controlado el error global de las soluciones, que siempre es
el que nos interesa reducir.
A la hora de implementar el control de paso se suelen hacer algunas modificaciones
basadas en la experiencia como son sustituir la fórmula de control de paso por la siguiente

emax H 1/q
 
h ≤ αH
Ũ1 − U1

Versión 30/1/2008
http://matematicas.uclm.es/ind-cr/metnum/index.html
Métodos de un paso 74

donde α es una constante real que suele tomarse entre 0.8 y 0.9.
Los métodos de paso variable para resolución de ecuaciones diferenciales, además del
control que ejercen sobre el error presentan otra ventaja que los hace muy atractivos
para las rutinas de integración automáticas que es que el usuario no tiene porqué conocer
nada sobre las escalas en t en las que se mueve la solución ya que no hay que preocuparse
del valor de h que se introduce inicialmente, que es un requisito básico para una rutina
de resolución de ecuaciones diferenciales que se comporte como una caja negra.

4.5.3 Métodos embebidos


Dependiendo de como se elijan los métodos de orden q y q + 1 obtendremos distintos
métodos numéricos de paso adaptativo. En particular resulta interesante y económico
en términos de economı́a computacional que los métodos de orden q + 1 que utilicemos
aprovechen las evaluaciones de la función que se hayan hecho en el cálculo de la solución
de orden q. Los métodos que siguen esta filosofı́a se denominan embebidos.
En los últimos años ha habido mucha investigación para desarrollar métodos embe-
bidos eficientes. El primer método de Runge-Kutta embebido denominado método de
Runge-Kutta-Fehlberg se desarrolló en torno a 1960 y consta de un par de métodos de
orden 4 y 5 respectivamente. Un método más moderno es el de Dormand y Prince, que
es el que implementa Matlab, cuyas ecuaciones son

Método de Dormand-Prince de orden 4-5

k1 = hf (tk , Uk ) ,
 
1 k1
k2 = hf tk + h, Uk + ,
5 5
 
3 3 9
k3 = hf tk + h, Uk + k1 + k2 ,
10 40 40
 
4 44 56 32
k4 = hf tk + h, Uk + k1 − k2 + k3 ,
5 45 15 9
 
8 19372 25360 64448 212
k5 = hf tk + h, Uk + k1 − k2 + k3 − k4 ,
9 6561 2187 6561 729
 
9017 355 46732 49 5103
k6 = hf tk + h, Uk + k1 − k2 + k3 + k4 − k5 ,
3168 33 5247 176 18656
 
35 500 125 2187 11
k7 = hf tk + h, Uk + k1 + k3 + k4 − k5 + k6 .
384 1113 192 6784 84
35 500 125 2187 11
Uk+1 = Uk + k1 + k3 + k4 − k5 + k6 ,
384 1113 192 6784 84
5179 7571 393 92097 187 1
Ũk+1 = Uk + k1 + k3 + k4 − k5 + k6 + k7 ,
57600 16695 640 339200 2100 40

Puede comprobarse como hay un gran número de evaluaciones de la función por lo


que la precisión de este método se obtiene al precio de un coste computacional modera-
damente alto.

Versión 30/1/2008
http://matematicas.uclm.es/ind-cr/metnum/index.html
Métodos de un paso 75

4.5.4 Métodos de un paso y paso variable en Matlab


Matlab incorpora dos rutinas de un paso y paso variable como resolutores de ecuaciones
diferenciales: ode23, que utiliza un par de métodos de órdenes 2 y 3, y ode45 que
incorpora precisamente el método de Dormand y Prince.
Todos los comandos de resolución de sistemas de ecuaciones en Matlab tienen
siempre la misma sintaxis. El primer argumento es el nombre de la función, el segundo
los valores inicial y final del intervalo de tiempos en el que se desea resolver el sistema
de ecuaciones diferenciales entre corchetes y finalmente un vector columna con los datos
iniciales. Es importante tener en cuenta que la función debe devolver un vector columna
a diferencia de las funciones que hemos utilizado en nuestros programas para resolver
ecuaciones diferenciales que producen vectores fila.
Como argumento opcional se puede incluir al final el nombre de un conjunto de
opciones especificadas mediante la instrucción odeset.
Por ejemplo si consideramos de nuevo el movimiento de un péndulo simple regido
por las ecuaciones diferenciales

u′1 = u2
u′2 = − sin(u1 )

con datos iniciales u1 (0) = 2, u2 (0) = 0 en el intervalo t ∈ [0, 20]. Utilizando la instruc-
ción ode45 y la función pendulo definida anteriormente hacemos

[t U] = ode45(@pendulo,[0 20],[2 0]’);


plot(t,U)

El resultado, mostrado en la figura 4.4 muestra que la matriz U contiene las dos compo-
nentes de la solución en sus columnas
Para cambiar las precisiones por defecto, por ejemplo la tolerancia relativa (ver help
odeset para conocer las opciones que se pueden modificar) utilizarı́amos la secuencia
de comandos

misopciones = odeset(’RelTol’,1e-9);
[t U] = ode45(@pendulo,[0 20],[2 0]’);

y se resolverı́a el sistema de ecuaciones con tolerancia relativa 10−9 en lugar del valor
por defecto de Matlab que es 10−6 .

Versión 30/1/2008
http://matematicas.uclm.es/ind-cr/metnum/index.html
Métodos de un paso 76

2.5

1.5

0.5

−0.5

−1

−1.5

−2
0 2 4 6 8 10 12 14 16 18 20

Figura 4.4: Resultado de la solución del sistema de ecuaciones diferenciales u′1 = u2 ,


u′2 = − sin(u1 ), con u1 (0) = 2, u2 (0) = 0 en el intervalo t ∈ [0, 20] mediante el comando
Matlab ode45.

Ejercicios resueltos

4.1 Considérese el problema de valores iniciales


y ′ = sen t y, y(1) = 3e1−cos 1
cuya solución exacta es y(t) = 3e1−cos t .

1. Calcular la solución en t = 1.2 utilizando el método de Euler con h = 0.2, h =


0.1 y h = 0.05.
2. Estudiar cualitativamente de que orden es el error que se comete al calcular la
solución con los distintos pasos (utilizando los valores exactos de la solución).

Solución. Calculemos en primer lugar la solución con los distintos pasos tempo-
rales. En primer lugar, con h = 0.1
yh=0.2 (1.2) = 4.750786 + 0.2 · 4.750786 sen 1.0 = 5.550316
Con h = 0.1 tenemos
yh=0.1 (1.1) = 4.750786 + 0.1 · 4.750786 sen 1.0 = 5.150550
yh=0.1 (1.2) = 5.150551 + 0.1 · 5.150550 sen 1.1 = 5.609571

Versión 30/1/2008
http://matematicas.uclm.es/ind-cr/metnum/index.html
Métodos de un paso 77

Por último,

yh=0.05 (1.05) = 4.750786 + 0.05 · 4.750786 sen 1.0 = 4.950668


yh=0.05 (1.1) = 4.950668 + 0.05 · 4.950668 sen 1.05 = 5.165385
yh=0.05 (1.15) = 5.165385 + 0.05 · 5.165385 sen 1.1 = 5.395556
yh=0.05 (1.2) = 5.395556 + 0.05 · 5.395556 sen 1.15 = 5.641800

Todas estas soluciones numéricas deben compararse con la solución exacta del
problema es y(1.2) = 3e1−cos 1.2 = 5.676044. Los errores exactos son por lo tanto

e(h = 0.2) = |yex − yh=0.2 (1.2)| = 0.13


e(h = 0.1) = 0.066
e(h = 0.05) = 0.034

Que para todos valores de h pequeños parece ser proporcional a h (al reducir el
paso a la mitad en el último caso el error se reduce a la mitad).

4.2 Aproximar la solución del problema de valores iniciales

y ′ = ty 3 , y(2) = 1,

en t = 3 utilizando el método de medio paso con h = 0.5 y h = 0.25. Estimar el


error que tienen las soluciones numéricas en t = 3.

Solución. El método del medio paso es yn+1 = yn + hf tn + h2 , yn + h2 f (tn , yn ) ,




aplicándolo a nuestro caso obtenemos unos números enormes en el primer caso


y desbordamiento (con una calculadora de mano) en el segundo. Evidentemente,
algo está ocurriendo. Si se observan los datos se ve un crecimiento muy rápido
entre t = 2 y t = 3 que corresponde al tipo de función utilizado, que tiene un
término y 3 que crece rápidamente. De hecho la solución exacta del problema es
fácil de obtener separando las variables e integrando
1
y(t) = √ ,
5 − t2

por lo que hay una singularidad en t∗ = 5 ≃ 2.24. Esto quiere decir que para
tiempos mayores que t∗ la solución numérica no será creible.

4.3 Resolver el problema de valores iniciales u′ = t (cos u)2 , u(0) = 0 mediante el


método de medio paso con h = 0.5 y h = 0.25. Comparar las soluciones en t = 1
con el valor exacto u(1) = arctan(0.5). ¿Tiene el error la dependencia esperada de
h?

Solución. El valor exacto es u(1) = arctan(0.5) = 0.463648. Vamos a calcular los


valores aproximados usando la regla de medio paso
 
h
Uk+1 = Ukh + hf tk + h2 , Ukh + h2 f (tk , Ukh )

Versión 30/1/2008
http://matematicas.uclm.es/ind-cr/metnum/index.html
Métodos de un paso 78

y pasos h = 0.5, 0.25. Con h = 0.5 tenemos

U10.5 = U0 + 0.5f (0.25, U0 + 0.25f (0, U0 )) = 0.125,


U20.5 = U10.5 + 0.5f 0.75, U10.5 + 0.25f (0.5, U10.5 ) = 0.47739.


El error en este caso es E h=0.5 = 0.0137. Con h = 0.25 tenemos

U10.25 = U0 + 0.25 f (0.125, U0 + 0.125f (0, U0 )) = 0.03125,


U20.25 = U10.25 + 0.25 f 0.375, U10.25 + 0.125f (0.25, U10.25 ) = 0.1246346,


U30.25 = U20.25 + 0.25 f 0.625, U20.25 + 0.125f (0.25, U20.25 ) = 0.2714921,




U40.25 = U30.25 + 0.25 f 0.875, U30.25 + 0.125f (0.25, U30.25 ) = 0.4590065,




de donde se obtiene que el error es E h=0.25 = 0.0046. Puede observarse que


E h=0.5 /E h=0.25 ∼ 3, que es del orden del factor de reducción de error espera-
do (4). Téngase en cuenta que los valores de h son aún grandes y la dependencia
O(h2 ) se espera para h → 0.

4.4 Para resolver una ecuación diferencial ordinaria u′ = f (t, u) se valora el uso de los
métodos de medio paso con paso h y de Runge-Kutta de cuarto orden con paso
2h.

1. Compara el coste computacional de ambos métodos.


2. Razona de cual de los métodos esperas mejor precisión para valores pequeños
de h.

Solución. El coste computacional de dos pasos del método de medio paso se cal-
cula teniendo en cuenta que éste método realiza dos evaluaciones de la función
que defina el sistema de ecuaciones diferenciales, por lo tanto tenemos cuatro
evaluaciones de la función en total para tener un error O(h2 ).
El método de Runge-Kutta requiere cuatro evaluaciones de la función por
lo que el coste serı́a el mismo, siendo sin embargo el error O(24 h4 ). En general,
para valores de h pequeños, esta cantidad será mucho menor que la anterior por
lo que este método proporciona mejor precisión al mismo coste.

4.5 Un método de Runge-Kutta implı́cito se escribe en la forma

k1 = f (t0 , u0 )
 
h
k2 = f t0 + 32 h, u0 + (k1 + k2 )
3
h
U1 = U0 + 4 (k1 + 3k2 )

Aplicar este método para calcular y(1.1) en los problemas

u′ = 4tu + 3et , u(1) = −1/2


u′ = sen u, u(1) = 1

Versión 30/1/2008
http://matematicas.uclm.es/ind-cr/metnum/index.html
Métodos de un paso 79

con h = 0.1 (utilizar seis o más cifras de precisión en los cálculos). ¿Existe alguna
diferencia esencial en la aplicación del método en ambos problemas?

Solución. En el primer caso tenemos f1 (t, u) = 4tu + 3et con lo que

k1 = f1 (1, −0.5) = −2 + 3e = 6.154845


k2 = f1 (1.066666, −0.5 + 0.033333(6.154845 + k2 )) ,

de donde es fácil despejar k2 como k2 = 8.695789 e introduciéndolo en la fórmula


del método.
U1 = U0 + h4 (k1 + 3k2 ) = 0.306055

Para el segundo caso f2 (t, u) = sen u por lo que tendremos

k1 = sen 1 = 0.841471
 
0.1
k2 = sen 1 + (0.841471 + k2 ) = sen (1.039054 + k2 ) .
3

Nos encontramos con una ecuación algebráica que habrá que resolver para encon-
trar k2 . Utilicemos el método de Newton con g(k2 ) = k2 − sen (1.039054 + k2 ) y la
(j+1) (j) (j) (j)
iteración k2 = k2 −g(k2 )/g′ (k2 ). Como k2 deberá ser similar a k1 probemos
(0)
con k2 = 1
(0)
(1) (0) g(k2 )
k2 = k2 − (0)
= 0.927983
g′ (k2 )
(1)
(2) (1) g(k2 )
k2 = k2 − (1)
= 0.926278
g′ (k2 )
(2)
(3) (2) g(k2 )
k2 = k2 − (2)
= 0.926277
g′ (k2 )

Que nos proporciona la solución k2 ≃ 0.926277 con la precisión requerida y enton-


ces

h 0.1
U1 = U0 + 4 (k1 + 3k2 ) = 1 + (0.841471 + 0.926277) = 1.044194
4

4.6 Indicar razonadamente la veracidad o falsedad de las siguientes afirmaciones.

1. Si al resolver un sistema de ecuaciones diferenciales mediante el método de


Runge-Kutta clásico de cuarto orden con h = 0.1 se encuentra una diferencia
entre la solución exacta y la aproximada de 1.32 × 10−8 el resultado no es
correcto ya que el error deberı́a ser del orden de 10−4 .

Versión 30/1/2008
http://matematicas.uclm.es/ind-cr/metnum/index.html
Métodos de un paso 80

2. El método de Euler, al ser de orden h, permite resolver cualquier ecuación


diferencial con precisión arbitraria con sólo reducir el valor de h suficiente-
mente.
3. Al aproximar la solución de una ecuación diferencial mediante un esquema
numérico de un paso con h = 0.1 se obtiene un error Eh=0.1 = 0.00432. Al
resolver la misma ecuación con h = 0.01 se obtiene Eh=0.01 = 0.00000429. De
aquı́ podemos deducir que el esquema es de tercer orden en h.
4. El método de Euler modificado es un método de orden h2 , lo cual quiere decir
que en cada paso el error que se comente al calcular la solución aproximada
es de orden h3 .

Solución. .

1. Falso. El error es e ≤ Ch4 y dependiendo del valor de C los resultados serán


unos u otros.
2. Falso. Los errores de redondeo limitan la precisión del método de Euler cuan-
do h → 0.
3. Efectivamente, si hacemos el cociente de los errores obtenemos 0.00432/0.00000429 ≃
103 por lo que el esquema es de tercer orden en h.
4. Evidentemente cierto, cuando se habla del “orden”de un método numérico
siempre se hace referencia al error de truncación, que coincide con el orden
del error global.

4.7 La función de Bessel J0 (t) es la solución de la ecuación t2 y ′′ + ty ′ + t2 y = 0 con


y(0) = 1, y ′ (0) = 0. Al resolver la ecuación mediante el método de medio paso con
h = 0.02 y 0.01 obtenemos los siguientes resultados en t = 1 y 3.

Paso J0 (1) J0 (3)


0.02 0.765940 -0.260136
0.01 0.765421 -0.260086

1. Estimar el error que se comete en la aproximación a la solución (esto es


E ≃ Ch2 , estimar C) con h = 0.01.
2. Considérese el cálculo de la función J0 (t) por otros dos métodos alternativos.
En primer lugar su desarrollo de Taylor

t2 t4 t6 ζ8
J0 (t) = 1 − + − +
4 64 2304 1457456
con ζ ∈ (0, t). En segundo lugar la fórmula integral
1 π
Z
J0 (t) = cos (t sen θ) dθ,
π 0

Versión 30/1/2008
http://matematicas.uclm.es/ind-cr/metnum/index.html
Métodos de un paso 81

que puede calcularse mediante la regla del trapecio, cuyo término de error
2
es de la forma E = h12 (b − a) máx |f ′′ (ξ)|, ξ ∈ (a, b). Hacer una tabla con las
estimaciones del error por cada método con h = 0.01 en t = 1 y 3 y discutir
comparativamente la precisión de los mismos.

Solución. Como nos dan la solución con dos pasos distintos podemos hacer

yex (t = 1) ≃ yh=0.01 (t = 1) + C1 h21


yex (t = 1) ≃ yh=0.02 (t = 2) + C1 h22

de donde se obtiene que


y2 − y1
C(t = 1) = = −1.7
h21 − h22

de modo que el error con h = 0.01 es E(t = 1) ≃ −1.7 × 10−4 . Para t = 3 se


encuentra C(t = 3) = 0.167 por lo que el error con h = 0.01 es del orden de
E(t = 3) ≃ 1.7 × 10−5 .

El método del desarrollo de Taylor resulta trivial ya que el valor máximo


t8
del error es 1457456 por lo que E(t = 1) ≤ 7 × 10−7 y E(t = 3) ≤ 4 × 10−3 .

En cuanto a la cota del método del trapecio, usando que f ′ = − sen(t sen θ)t cos θ
2
y f ′′ = t sen(t sen θ) sen θ − cos(t sen θ) cos2 θ ≤ 2t la cota queda E ≤ h12 t2t =
 
h2 t2 2 −5 y en t = 3, E(t = 3) ≤
6 por lo que tenemos E(t = 1) ≤ h /6 = 1.67 × 10
1.5 × 10−4 . Resumiendo los resultados son los siguientes

Tiempo Método de medio paso Desarrollo de Taylor Integral


t=1 ≃ 1.7 × 10−5 ≤ 7 × 10−7 ≤ 1.67 × 10−5
t=3 ≃ −1.7 × 10−4 ≤ 4 × 10−3 ≤ 1.5 × 10−4

Los métodos de medio paso e integral son comparables. El desarrollo de Taylor es


válido sólo para valores bajos de t.

4.8 Calcular la solución en t = 1 de la ecuación diferencial

y ′ = −2 (tg t) y

con y(0) = 1 mediante el método de Runge-Kutta de cuarto orden usando h = 0.5


y h = 0.25. Comparar los resultados entre sı́ y con la solución exacta dada por
y(t) = cos2 t. ¿Qué observas respecto al error de truncación? ¿Es de esperar una
influencia importante del error de redondeo?

Solución. Para resolver el problema no hay más que calcular utilizando el método
de Runge-Kutta. Dada f (t, y) = −2(tg t)y vamos a calcular las distintas aproxi-
maciones (utilizando siete dı́gitos de precisión)

Versión 30/1/2008
http://matematicas.uclm.es/ind-cr/metnum/index.html
Métodos de un paso 82

1. Cálculo de la solución en t = 0.5 con h = 0.5. Evidentemente tan sólo


hay que dar un paso para alcanzar la solución, esto es

k1 = hf (t0 , y0 ) = 0
k2 = hf t0 + h2 , y0 + h2 k1 = −0.255342


k3 = hf t0 + h2 , y0 + h2 k2 = −0.222742


k4 = hf (t0 + h, y0 + hk3 ) = −0.424618

y entonces
1
y(0.5) ≃ y(0) + (k1 + 2k2 + 2k3 + k4 ) = 0.769869
6
resultado que podemos comparar con la solución exacta y(0.5) = 0.770151
de donde obtenemos que el error absoluto es

εh=0.5 = 2.8 × 10−4

2. Cálculo de la solución en t = 0.5 con h = 0.5. Ahora hay que dar dos
pasos para alcanzar la solución, esto es, usando h = 0.25 calcular

k1 = hf (t0 , y0 ) = 0
k2 = hf t0 + h2 , y0 + h2 k1 = −0.0626275


k3 = hf t0 + h2 , y0 + h2 k2 = −0.060854


k4 = hf (t0 + h, y0 + hk3 ) = −0.1199017

y entonces
1
y(0.25) ≃ y1 = y(0) + (k1 + 2k2 + 2k3 + k4 ) = 0.938789
6
Un segundo paso es calcular

k1 = hf (0.25, y1 ) = −0.119856
k2 = hf 0.25 + h2 , y1 + h2 k1 = −0.172972


k3 = hf 0.25 + h2 , y1 + h2 k2 = −0.167745


k4 = hf (0.25 + h, y1 + hk3 ) = −0.210612


1
y(0.5) ≃ y2 = y1 + (k1 + 2k2 + 2k3 + k4 ) = 0.770139
6
resultado que tiene un error

εh=0.25 = 1.2 × 10−5

unas veinte veces inferior al anterior lo cual nos indica un orden de precisión
relativamente elevado (y de hecho del orden de 24 = 16, O(h4 )). Como se
realizan pocas operaciones aritméticas y no son inestables frente al redondeo
no es de esperar ninguna influencia importante del mismo.

Versión 30/1/2008
http://matematicas.uclm.es/ind-cr/metnum/index.html
Métodos de un paso 83

4.9 ¿Es cierto que los métodos embebidos de paso variable resuelven las ecuaciones
diferenciales en menos tiempo que los de paso fijo?

Solución. En general no, los métodos embebidos se diseñan para tener acotado el
error final y no para reducir el tiempo de cálculo aunque en muchas situaciones el
tiempo se vea reducido debido a la estrategia de control de paso.

4.10 Al dar un paso mediante un método de Runge-Kutta-Felhberg para resolver una


ecuación diferencial con h = 0.01 se encuentra los valores U = 1.7894325 con el
método de cuarto orden y U = 1.7894311 con el método de quinto orden. Si se
quiere garantizar que el error se mantenga por debajo de un valor de 2 × 10−4
¿Será necesario cambiar el paso de integración?

Solución. Como se trata de un método embebido el h recomendado viene definido


por la ecuación
 1/4
emax H
h≤H = 0.0109,
|Ũk+1 − Uk+1 |
donde etextmax = 2 × 10−4 , Ũk+1 = 1.7894311, Uk+1 = 1.7894325 y H = 0.01,
por lo que el valor H = 0.01 que estamos usando es aproximadamente válido para
realizar la integración del problema.

Ejercicios propuestos

4.11 Resolver los siguientes problemas de valores iniciales utilizando el método de


Euler. Comparar las soluciones aproximadas con las soluciones exactas. ¿Qué de-
be satisfacer el paso de integración para que el método de Euler proporcione
soluciones satisfactorias?

1. u′ = (sen t) u, u(0) = 3. Sol exacta: u(t) = 3e− cos t . Estudiar en [0,10].


2. u′ = −(t + u)/(t ln t), u(2) = −2/ ln 2. Sol. exacta: u(t) = −t/ ln t.Estudiar
en [2,10]
12 2
3. u′ /t − 2u/t2 = t cos t, u(π/2) = 3. Sol. exacta: u(t) = t2 sen t + π 2 −1 t .
Estudiar hasta t = 8.
4. u′ = 1 + (t − u)2 , u(2) = 1. Sol. exacta: u(t) = t + 1/(1 − t). Estudiar en
[2,6].

Versión 30/1/2008
http://matematicas.uclm.es/ind-cr/metnum/index.html
Métodos de un paso 84

4.12 La solución de la ecuación diferencial u′ = t sen t e u , con u(0) = 1 viene dada


−u

en forma implı́cita por la ecuación

−t cos t + sen t = (u − 1) eu

Calcular la solución de la ecuación diferencial en t = 2 mediante el método de


Euler y compararla con la solución exacta para distintos valores del paso h.
4.13 Acotar, cuando sea posible, el error que se comete al resolver aproximadamente
las ecuaciones diferenciales de los ejercicios 4.11 y 4.12 mediante el método de
Euler.
4.14 Aproximar la solución del problema de valores iniciales

u′ = tu3 , y(2) = 1,

en t = 3 utilizando el método de medio paso con h = 0.5 y h = 0.25. Estimar el


error que tienen las soluciones numéricas en t = 3.
4.15 Resolver el problema de valores iniciales u′ = t (cos u)2 , u(0) = 0 mediante el
método de medio paso con h = 0.5 y h = 0.25. Comparar las soluciones en t = 1
con el valor exacto u(1) = arctan(0.5). ¿Tiene el error la dependencia esperada
de h?
4.16 Calcular el error de truncación del método de medio paso y compararlo con el
de Euler modificado y el de Euler.
4.17 El método de Heun viene definido por las fórmulas
  
h 2h 2h
Uk+1 = Uk + f (tk , Uk ) + 3f tk + , Uk + f (tk , Uk ) .
4 3 3

Se pide

1. Calcular el error de truncación del método de Heun.


2. Implementar el método de Heun mediante una función Matlab.
3. Comparar el rendimiento y la precisión de este método con el de medio paso
aplicándolos a resolver la ecuación diferencial del ejercicio 4.12

4.18 El método de Runge-Kutta 3/8 viene definido por las ecuaciones

Uk+1 = Uk + 81 (k1 + 3k2 + 3k3 + k4 ) ,


k1 = hf (tk , Uk ),
k2 = hf (tk + h/3, Uk + k1 /3),
k3 = hf (tk + 2h/3, Uk − k1 /3 + k2 ),
k4 = hf (tk + h, Uk + k1 − k2 + k3 ).

Versión 30/1/2008
http://matematicas.uclm.es/ind-cr/metnum/index.html
Métodos de un paso 85

Implementar este método en Matlab y comparar su rendimiento y precisión con


los del método clásico de Runge-Kutta de cuarto orden en el ejemplo de prueba:
u′ = −u + 2 cos t.
4.19 Demostrar que cuando la f (t, u) no depende de u la solución del problema de valor
inicial mediante el método de Euler modificado coincide con la que se obtiene al
resolver la ecuación diferencial u′ = f (t) mediante integración numérica aplicando
la regla de trapecios. ¿Qué ocurre al resolverlo mediante el método de Runge-
Kutta de cuarto orden?
4.20 Implementar una función Matlab para método de Runge-Kutta de orden quinto.
Comparar su rendimiento con h = 0.1 con el del método de Runge-Kutta clásico
de orden cuarto al aplicarlo a la ecuación diferencial u′ = −u + 2 cos t, en [0,5] y
con u(0) = 2.
4.21 Utilizar las rutinas ode23 y ode45 para resolver los problemas del ejercicio 4.11
con distintas tolerancias. Comparar su rendimiento y precisión con los de medio
paso y rk4.
4.22 Un resorte con envejecimiento viene descrito por la ecuación diferencial siguiente

u′′ + e−t/10 u = 0

(el envejecimiento se traduce en que la constante recuperadora es cada vez más


débil). Al resolver los problemas de valores iniciales: (a) u(0) = 1, u′ (0) = 0.1 (b)
u(0) = 1.0, u′ (0) = 0.6 utilizando el método de Dormand-Prince se encuentran los
comportamientos de las gráficas. Razona si los resultados numéricos son fiables.

4.23 El método de Taylor para resolver ecuaciones diferenciales u′ = f (t, u) es

h2 ′′ h2 ∂f
 
′ 3 ∂f
u(t + h) = u(t) + hu + u + O(h ) = u(t) + hf (t, u) + + f + O(h3 ).
2 2 ∂t ∂u

Resolver la ecuación diferencial u′ = −u2 cos t mediante el método de Taylor


hasta t = 1 con h = 0.5 siendo u(0) = 1.
4.24 El movimiento de un resorte forzado viene regido por la ecuación diferencial
ẍ + x = H(t) donde H(t) = 0 si t ∈ [0, 2] y H(t) = 1 para t > 2 con condiciones
iniciales x0 = 0, ẋ0 = 1. La solución exacta es
(
sen t, t ∈ [0, 2]
x(t) =
sen t + 1 − cos(t − 2), t > 2

Versión 30/1/2008
http://matematicas.uclm.es/ind-cr/metnum/index.html
Métodos de un paso 86

Calcular numéricamente la solución por medio de los métodos ode45, rk4 y


mediopaso, comparar con las soluciones exactas y estudiar el error cerca de la
discontinuidad.

Versión 30/1/2008
http://matematicas.uclm.es/ind-cr/metnum/index.html