V Solución de Ecuaciones Diferenciales Ordinarias

Anuncio
V
Solución de Ecuaciones
Diferenciales Ordinarias
V.1
V.1.1
Introducción
Problema
Una ecuación diferencial es una ecuación que involucra una función indeterminada y(t) y sus
derivadas y 0 (t), y 00 (t), . . . junto con condiciones iniciales o de frontera. Una solución para la ecuación
diferencial es una función que satisface la ecuación y las condiciones iniciales. Estas ecuaciones
aparecen en el modelamiento matemático de todo tipo de sistemas. Por ejemplo, el ángulo θ que
un péndulo forma con la vertical satisface la ecuación diferencial
d2 θ
g
+ sin θ = 0
2
dt
L
con las condiciones iniciales
θ0 (0) = θ00 .
θ(0) = θ0 ,
Aunque para algunas clases particulares de ecuaciones existen métodos para determinar soluciones,
este no es el caso en general. Por lo tanto es importante la posibilidad de obtener soluciones
numéricas. El objetivo aquı́ es estudiar algunos métodos para la solución numérica de algunas
clases importantes de ecuaciones diferenciales.
Aquı́ inicialmente, y la mayor parte del tiempo, nos restringimos al problema de valor inicial
(PVI), de primer orden, de la forma
y 0 (t) =
dy(t)
= f (t, y(t))
dt
con
y(t0 ) = y0 (∗)
donde f es una función definida sobre un subcojunto apropiado de R × R y con valor en R. Una
solución para (∗) en el intervalo [t0 , t0 +T ] es una función y : [t0 , t0 +T ] → R tal que y 0 (t) = f (t, y(t))
para t ∈ [t0 , t0 + T ] y y(t0 ) = y0 . Geométricamente, f (t, y) especifica para cada (t, y) en el plano
t-y la pendiente que debe tener una solución que pasa por ese punto.
Ejemplo. Consideremos la ecuación
dy
= 1 − e−t
dt
con
V.1
y(0) = y0 .
V.2
V. SOLUCIÓN DE ECUACIONES
DIFERENCIALES ORDINARIAS
Como la parte derecha de la ecuación depende sólo de t, se puede integrar y se obtiene y(t) =
t + e−t + C donde C es una constante a determinar. Reemplazando t = 0, la condición inicial
implica que 1 + C = y0 y entonces la solución es
y(t) = t + e−t + y0 − 1.
La siguiente figura, producida por el segmento de Matlab a continuación, muestra la curva
solución y(t) para diferentes valores de la condición inicial y0 . Bajo ciertas condiciones a ser
discutidas más adelante, para cada punto (t0 , y0 ) existe una curva solución única que pasa por este.
Dos de estas curvas solución son disyuntas o la misma.
0.9
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
f=@(t,y0) t+exp(-t)+y0-1;
figure;
hold on;
for i=0:5
fplot(@(t) f(t,.1*i),[0,1]);
end
Note que la instrucción f=@(t,y0) t+exp(-t)+y0-1 define la función f de dos variables t y
y0 como se desea. Por otra parte, el primer parámetro de fplot, es la función @(t) f(t,.1*i) de
una sóla variable t, la cual es la función f con la segunda variable igual a .1*i. Alternativamente,
se podrı́a haber empleado la instrucción inline.
V.1.2
Solución Numérica
Los métodos que consideramos producen una aproximación discreta de la solución: pares (ti , wi )
donde t0 , t1 , t2 , . . . , tM con tM = t0 + T , es una discretización del intervalo de tiempo [t0 , t0 + T ]
y w0 , w1 , . . . , wM es una aproximación de y0 = y(t0 ), y1 = y(t1 ), . . . , yM = y(tM ). Usualmente
todos los subintervalos [tk , tk+1 ] tienen la misma longitud. Más precisamente, tk = t0 + kh para
k = 0, . . . , M y donde h = T /M . En general estudiaremos métodos de diferencia de primer orden
en que wk+1 está dado explı́citamente en términos de wk , k = 1, 2, . . . , M , de la siguiente forma
(métodos explı́citos de un paso)
wk+1 = wk + hΦ(tk , wk ) (∗)
con condición inicial w0 = C0 . La ecuación (∗) es llamada ecuación de diferencias ó también
fórmula de avance. La función Φ es llamada la función incremental.
V.2. EXISTENCIA DE SOLUCIONES
V.2
V.3
Existencia de Soluciones
Definición. Sea f (t, y) una función definida en el rectángulo
R = {(t, y) | a ≤ t ≤ b, c ≤ y ≤ d}.
Se dice que f satisface una condición de Lipschitz con respecto a la segunda variable si existe L > 0,
llamada la constante de Lipschitz, tal que para todo (t, y1 ), (t, y2 ) ∈ R se tiene que
|f (t, y1 ) − f (t, y2 )| ≤ L · |y1 − y2 |.
Si f satisface una condición de Lipschitz en R con respecto a la segunda variable con constante
de Lipschitz L, entonces f es continua en la segunda variable: dado > 0, si tomamos δ = /L,
entonces para todo (t, y1 ), (t, y2 ) ∈ R con |y1 −y2 | ≤ δ se tiene que |f (t, y1 )−f (t, y2 )| ≤ L|y1 −y2 | ≤
Lδ ≤ . En lo que sigue, fy (t, y) denota la derivada parcial de f con respecto a y.
Teorema V.1 Sea f (t, y) definida en un rectángulo R como antes. Si existe L > 0 tal que para
todo (t, y) ∈ R se tiene
|fy (t, y)| ≤ L,
entonces f satisface la condición de Lipschitz en la variable y con constante L en R.
Para verificar este teorema, note que utilizando el teorema del valor medio podemos escribir,
para y1 , y2 con c ≤ y1 < y2 ≤ d y algún ξ ∈ [y1 , y2 ],
f (t, y1 ) − f (t, y2 ) = fy (t, ξ)(y1 − y2 )
y de aquı́
|f (t, y1 ) − f (t, y2 )| = |f (t, ξ)(y1 − y2 )| ≤ |f y(t, ξ)| · |y1 − y2 |.
Puesto que |f y(t, ξ)| ≤ L entonces
|f (t, y1 ) − f (t, y2 )| ≤ L · |y1 − y2 |,
lo cual es la condición de Lipschitz.
Ejemplo. Verifiquemos que
2
f (t, y) = y + t2 et
t
satisface la condición de Lipschitz con respecto a la segunda variable para t ∈ [1, 2]. Primero
directamente, usando 2/t ≤ 2 para t ≥ 1,
2
2
2
2
t
2
t
|f (t, y1 ) − f (t, y2 )| = y1 + t e − y2 − t e = |y1 − y2 | ≤ 2|y1 − y2 |
t
t
t
Alterativamente fy (t, y) = 2/t y entonces |fy (t, y)| ≤ 2 para t ≥ [1, 2]. Ası́, por el teorema anterior,
f (t, y) es Lipschitz con respecto a la segunda variable.
V.4
V. SOLUCIÓN DE ECUACIONES
DIFERENCIALES ORDINARIAS
Ejemplo. Consideremos f (t, y) = |y|2/3 . Esta función no satisface la condición de Lipschitz con
respecto a y en regiones que contengan puntos con y = 0 porque, con y2 = 0 y y1 > 0 tenemos que
|f (t, y1 ) − f (t, y2 )| = |y1 |2/3 , |y1 − y2 | = |y1 |
y entonces no existe constante C > 0 tal que
|y1 |2/3 = |f (t, y1 ) − f (t, y2 )| ≤ C|y1 − y2 | = C|y1 |,
porque esta desigualdad implicarı́a C ≥ 1/|y1 |1/3 y 1/|y1 |1/3 tiende a infinito cuando y1 tiende a 0
(recuerde que C debe ser idependiente de la selección de y1 , y2 ).
La importancia de la condición de Lipschitz condición radica en el siguiente teorema (y también
se usa en el análisis del error de los métodos numéricos).
Teorema V.2 Sea f (t, y) continua en un rectángulo R (como antes), que satisface la condición de
Lipschitz con respecto a la segunda variable en R, y sea (t0 , y0 ) ∈ R. Entonces el PVI y 0 = f (t, y),
y(t0 ) = y0 , tiene una solución única en un subintervalo [t0 , t0 + δ] para algún δ > 0.
Ejemplo. Si la condición de Lipschitz no se satisface, es posible que la solución al PVI no sea
única. Considere por ejemplo
y 0 (t) = y 2/3 , y(0) = 0.
Este PVI tiene las soluciones y(t) = 0 y y(t) = (t/3)3 lo cual se puede verificar fácilmente. Otro
ejemplo en que ninguna solución es trivial (zero) es
o
1 np 2
t + 4y − t ,
y (t) =
2
0
y(2) = −1,
con soluciones y(t) = −(t/2)2 y y(t) = 1 − t.
V.3
Método de Euler
Consideramos un PVI de la forma
y 0 = f (t, y) en [t0 , t0 + T ] con y(t0 ) = C0
y para su solución numérica usamos la discretización del tiempo: tk = t0 +kh para k = 0, 1, 2, . . . , M
donde h = T /M . Ası́ que tM = t0 + T (se ha dividido el intervalo de tiempo de longitud T en M
subintervalos de longitud h).
La aproximación de Euler se obtiene del desarrollo de Taylor
y(t) = y(tk ) + y 0 (tk )(t − tk ) +
y 00 (ck )(t − tk )2
,
2
donde ck ∈ [tk , t], tomando t = tk+1 , usando y 0 (tk ) = f (tk , y(tk )), y despreciando el término de de
segundo orden; resulta entonces la aproximación
y(tk+1 ) ≈ y(tk ) + hf (tk , y(tk )).
V.3. MÉTODO DE EULER
V.5
Excepto en t0 , en realidad no se conoce y(tk ) sino la aproximación previa, ası́ que esta aproximación
se traduce en la siguiente regla para calcular la aproximación wk+1 de y(tk ) en términos de la
aproximación wk de y(tk ):
wk+1 = wk + hf (tk , wk )
par k = 0, 1, 2, . . . , M − 1, con la condición inicial w0 = C0 . Geométricamente, la solución entre
tk y tk+1 es aproximada por la lı́nea con pendiente f (tk , wk ), es decir, tangente a la curva solución
que pasa por (tk , wk ).
yk+1
yk
y1
y
0
t0
tk
t1
tk+1
V.1: El segmento que conecta (tk , wk ) con (tk+1 , wk+1 ) es tangente a la curva solución que pasa
por (tk , wk ).
A continuación se tiene la función Matlab euler que implementa el método de Euler. Note
que regresa una matriz con dos columnas que contienen los tk y wk respectivamente.
function
E = euler (f, a, b, ya, M)
% Entrada - f es la funcion introducida como una cadena de caracteres
%
- a y b son los extremos izquierdo y derecho
%
- ya es la condicion inicial y(a)
%
- M es el numero de pasos
% Salida
- E = [T’, Y’] donde T es el vector de abscisas y
%
Y es el vector de ordenadas
h = (b - a) / M;
T = zeros(1, M+1);
Y = zeros(1, M+1);
T = a:h:b;
Y(1) = ya;
for j = 1:M
Y(j+1) = Y(j) + h * feval(f, T(j), Y(j));
end
E = [T’, Y’];
’f’
Ejemplos
Ejemplo 0 Considere el PVI
y 0 = Ry,
y(0) = y0 .
La solución exacta es y(t) = y0 eRt y nos interesa conocer la aproximación que resulta de aplicar el
método de Euler. Este da la recurrencia
wk+1 = wk + hRwk = (1 + hR)wk ,
V.6
V. SOLUCIÓN DE ECUACIONES
DIFERENCIALES ORDINARIAS
que tiene la solución
wk = (1 + hR)k y0 .
Esto es una buena aproximación si hR es suficientemente pequeño: Note que 1 + hR es la aproximación de primer orden de ehR y entonces (1 + hR)k es una aproximación de ehRk = eRt .
Ejemplo 1 Usamos el método de Euler para obtener una aproximación para la solución del PVI:
dy
= y − t2 + 1;
dt
y(0) = 0.5.
en [0, 2], con M = 10. Note que aquı́ f (t, y) = y − t2 + 1. Para la discretización del tiempo, los
subintervalos son de longitud h = 2/10. Entonces el método de Euler resulta en la ecuación de
recurrencia
wk+1 = wk + h(wk − t2k + 1)
= (1 + h)wk − ht2k + 0.2
= 1.2wk − 0.2t2k + 0.2
De aquı́ obtenemos los valores:
w0
w1
w2
w3
=
=
=
=
..
.
0.5
1.2w0 − 0.2t20 + 0.2 = 1.2 × 0.5 − 0.2 × 02 + 0.2 = 0.6 + 0.2 = 0.8
1.2w1 − 0.2t21 + 0.2 = 1.2 × 0.8 − 0.2 × 0.22 + 0.2 = 0.96 − 0.008 + 0.2 = 1.1520
1.2w2 − 0.2t22 + 0.2 = 1.2 × 1.1520 − 0.2 × 0.42 + 0.2 = 1.3824 − 0.032 + 0.2 = 1.5504
y ası́ sucesivamente. A continuación completamos el ejercicio con MATLAB para M = 10 y
M = 20. Las columnas del resultado muestran ti , wi , yi = y(ti ) y |wi − yi |.
>> f=inline(’y-t^2+1’,’t’,’y’);
>> g=inline(’(t+1).^2-0.5*exp(t)’);
>> A10=euler(f,0,2,0.5,10);
>> E10=g(A10(:,1));
>> ERR10=abs(E10-A10(:,2));
>> [A10 E10 ERR10]
ans =
0
0.5000
0.5000
0
0.2000
0.8000
0.8293
0.0293
0.4000
1.1520
1.2141
0.0621
0.6000
1.5504
1.6489
0.0985
0.8000
1.9885
2.1272
0.1387
1.0000
2.4582
2.6409
0.1827
1.2000
2.9498
3.1799
0.2301
1.4000
3.4518
3.7324
0.2806
1.6000
3.9501
4.2835
0.3334
1.8000
4.4282
4.8152
0.3870
2.0000
4.8658
5.3055
0.4397
V.4. ANÁLISIS DEL ERROR
V.7
>> A20=euler(f,0,2,0.5,20);
>> E20=g(A20(:,1));
>> ERR20=abs(E20-A20(:,2));
>> [A20 E20 ERR20]
ans =
0
0.5000
0.5000
0.1000
0.6500
0.6574
0.2000
0.8140
0.8293
0.3000
0.9914
1.0151
0.4000
1.1815
1.2141
0.5000
1.3837
1.4256
0.6000
1.5971
1.6489
0.7000
1.8208
1.8831
0.8000
2.0538
2.1272
0.9000
2.2952
2.3802
1.0000
2.5438
2.6409
1.1000
2.7981
2.9079
1.2000
3.0569
3.1799
1.3000
3.3186
3.4554
1.4000
3.5815
3.7324
1.5000
3.8437
4.0092
1.6000
4.1030
4.2835
1.7000
4.3573
4.5530
1.8000
4.6040
4.8152
1.9000
4.8405
5.0671
2.0000
5.0635
5.3055
0
0.0074
0.0153
0.0237
0.0325
0.0419
0.0519
0.0624
0.0734
0.0850
0.0971
0.1098
0.1230
0.1367
0.1509
0.1655
0.1805
0.1957
0.2111
0.2266
0.2420
La figura a continuación muestra el (valor absoluto del) error para M = 5, 10, 20, 40, 80. Note
que, como se puede esperar, el error aumenta con el tiempo (se acumula) y disminuye con M
(aproximadamente se reduce a la mitad al doblar M ).
0.8
5
10
20
40
80
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0
0
0.2
0.4
0.6
0.8
1
1.2
1.4
1.6
1.8
2
V.2: Error de la solución para M = 5, 10, 20, 40, 80.
V.4
Análisis del Error
Se espera que el valor yk sea una buena aproximación de la solución exacta y(tk ), ası́ que nos
interesa acotar la diferencia y(tk ) − yk . Dado esto, se define el error global de truncamiento o
V.8
V. SOLUCIÓN DE ECUACIONES
DIFERENCIALES ORDINARIAS
discretización ek en tk (acumulado en los pasos 1 a k) como
ek = yk − wk
(recuerde que yk = y(tk )). Para el análisis resulta conveniente definir el error local de truncación
en el paso k + 1 como
yk+1 − (yk + hΦ(tk , yk ))
,
εk+1 =
h
es decir, la diferencia entre la solución exacta en tk+1 y el valor predecido por el método utilizando
la solución exacta en tk como punto de partida, dividida por h.
En general es posible probar una cota de la forma
|εk | ≤ ChN ,
donde C > 0 es una constante, y se escribe entonces |εk | = O(hN ). El error total acumulado
E(h) = eM en las aproximaciones de t0 a tM es en general una función de f , h y el método.
En el caso del método de Euler, con Φ(t, y) = f (t, y), tenemos de la ecuación al comienzo de la
sección que
y 00 (ck )
yk+1 − (yk + hf (tk , yk ))
=
h.
εk+1 =
h
2
Ası́ que |εk+1 | ≤ Ch donde C = maxk y 00 (ck )/2. Es decir, para el método de Euler tenemos N = 1.
A continuación hacemos un análisis más detallado del error total bajo ciertas condiciones.
Teorema V.3 Supongamos que se tiene una cota |εk | ≤ ChN para el error local de truncación, y
que la función incremental Φ(t, y) satisface la condición de Lipschitz con constante L con respecto
a y. Entonces existe una constante C 0 que depende de C y L tal que
|eM | ≤ C 0 hN
Prueba. Para acotar el error global en términos de los errores locales, tenemos la siguiente derivación:
ek+1
= yk+1 − wk+1
= yk+1 − (wk + hΦ(tk , wk ))
=
(yk+1 − (yk + hΦ(tk , yk )) + (yk − wk ) + h (Φ(tk , yk ) − Φ(tk , wk ))
= hεk+1 + ek + h (Φ(tk , yk ) − Φ(tk , wk )).
Tomando valor absoluto, entonces,
|ek+1 |
≤
h|εk+1 | + |ek | + h |Φ(tk , yk ) − Φ(tk , wk )|.
Suponiendo que Φ(t, y) es Lipschitz en la segunda variable con constante L, es decir
|Φ(t, y) − Φ(t, y 0 )| ≤ L |y − y 0 |,
obtenemos
|ek+1 |
≤
h|εk+1 | + |ek | + hL |yk − wk | = h|εk+1 | + |ek | (1 + hL).
Expandiendo esta relación de recurrencia, obtenemos
|ek+1 |
≤
h
k
X
j=0
|εk+1−j |(1 + hL)j + |e0 |(1 + hL)k+1 .
V.5. MÉTODO DE TAYLOR
V.9
Ahora usando |εk+1−j | ≤ ChN , la suma 1 + x + x2 + · · · + xk = (xk+1 − 1)/(x − 1) para x 6= 1, e0 = 0 y la desigualdad
1 + x ≤ ex , válida para x > 0 (se obtiene truncando la serie de Taylor ex = 1 + x + x2 + · · · + xn + · · · ), obtenemos
|ek+1 | ≤ ChN +1 1 + (1 + hL) + (1 + hL)2 + · · · + (1 + hL)k
=
≤
C
(1 + hL)k+1 − 1
= hN ((1 + hL)k+1 − 1)
(1 + hL) − 1
L
C N
C
h (1 + hL)k+1 ≤ hN ehL(k+1) .
L
L
ChN +1
En particular, para el error final |EM | en tM se tiene
|eM | ≤
C LT N
e h
L
donde T = tM − t0 = M h es el tiempo total de la solución. Entonces
|eM | ≤ C 0 hN
donde C 0 = (C/L)eLT .
Como ejemplo, en el método de Euler, si f (t, y) es Lipschitz en la segunda varible entonces el
error total es O(h). Esto se observó en el ejemplo de la sección anterior (el error se reduce a la
mitad al doblar M ).
V.5
Método de Taylor
El método de Euler usa la aproximación de Taylor de primer orden. En general, es posible obtener
mejores aproximaciones con aproximaciones de Taylor de ordenes más altos. La expansión de
Taylor de orden N alrededor de t = tk se puede escribir como
y(tk + h) = y(tk ) +
N
X
y (j) (tk )
j=1
j!
hj +
y (j) (tk ) N +1
h
j!
Las derivadas y (j) (t) que aparecen en la expansión se pueden expresar en términos de f (t, y) y sus
derivadas parciales partiendo de la ecuación del PVI
y 0 (t) = f (t, y)
y en general
y (j) (t) =
dj−1
f (t, y(t)).
dtj−1
Por ejemplo,
d2 0
d
∂f
∂f dy
y (t) = f (t, y(t)) =
+
= ft + f fy
2
dt
dt
∂t
∂y dt
donde ft = ∂f /∂t y fy = ∂f /∂y,
y 00 (t) =
d
(ft + f fy )
dt
d ∂
∂f
=
(ft + f fy ) + f (ft + fy f )
dt ∂t
∂y
= ftt + ft fy + f fty + f fyt + f fyy f + f fy fy
= ftt + ft fy + 2f fty + f 2 fyy + f fy2
y (3) (t) =
V.10
V. SOLUCIÓN DE ECUACIONES
DIFERENCIALES ORDINARIAS
Y ası́ sucesivamente. Es posible escribir una ecuación general, pero no lo hacemos porque el cálculo
es más fácil directamente para una función f (t, y) concreta, como se verá en los ejemplos. Entonces
podemos escribir
y(tk + h) ≈ y(tk ) + h TN (tk , yk )
donde
TN (t, y) =
N
X
y (j) (t)
j=1
j!
j−1
h
=
N
X
f (j−1) (t, y)
j!
j=1
hj−1
Con esto, podemos escribir la ecuación de diferencias del método de Taylor para las aproximaciones
wk como
wk+1 = wk + h TN (tk , wk )
Ejemplo. Consideremos de nuevo el PVI y 0 = Ry con y(0) = C0 . Entonces
y 0 (t) = Ry(t)
y 00 (t) = Ry 0 (t) = R2 y(t)
y 000 (t) = Ry 00 (t) = R3 y(t)
..
.
(j)
y (t) = Ry (j−1) (t) = Rj y(t)
..
.
Entonces el método de Taylor de orden N aplicado a este PVI resulta en la fórmula
wk+1 = wk + h
N
X
R j wk
j!
j=1
= wk
N
X
j=0
= w0
hj−1
(Rh)j
j!
N
X
(Rh)j
j=0
!k+1
j!
La suma entre paréntesis es la aproximación de Taylor de orden N para eRh y (eRh )k+1 = eRtk+1
mientras que la solución exacta del PVI da y(tk+1 ) = y0 eRtk+1 .
Ejemplo. Consideremos de nuevo el PVI
dy
= y − t2 + 1;
dt
y(0) = 0.5
V.5. MÉTODO DE TAYLOR
V.11
con t ∈ [0, 2] y M = 10. Como antes h = 0.2 y tk = 0.2k. Obtenemos las derivadas
y 0 (t)
y 00 (t)
y 000 (t)
y (4) (t)
=
=
=
=
..
.
y (j) (t) =
y − t2 + 1
y 0 − 2t = y − t2 + 1 − 2t = y − t2 − 2t + 1
y 0 − 2t − 2 = y − t2 + 1 − 2t − 2 = y − t2 − 2t − 1
y 0 − 2t − 2 = y − t2 − 2t − 1
y − (t + 1)2
para j ≥ 3
El método de Taylor de segundo, tercero y cuarto orden resulta en las fórmulas
h2
(wk − t2k − 2tk + 1)
2
h2
= wk + h(wk − t2k + 1) + (wk − t2k − 2tk + 1) +
2
h2
= wk + h(wk − t2k + 1) + (wk − t2k − 2tk + 1) +
2
wk+1 = wk + h(wk − t2k + 1) +
wk+1
wk+1
h3
(wk − (tk + 1)2 )
6
h3
h
((wk − (tk + 1)2 )(1 + )
6
4
respectivamente. Por ejemplo, usando el método de cuarto orden obtenemos
h2
h3
h
(w0 − t20 − 2t0 + 1) + ((w0 − (t0 + 1)2 )(1 + )
2
6
4
0.22
0.23
0.2
0.5 + 0.2(0.5 − 0 + 1) +
(0.5 − 0 + 1) +
(0.5 − (0 + 1)2 )(1 +
)
2
6
4
0.004
0.5 + 0.2(1.5) + 0.02(1.5) +
(−0.5)(1.05)
3
0.8293
h2
h3
h
w1 + h(w1 − t21 + 1) + (w1 − t21 − 2t1 + 1) + ((w1 − (t1 + 1)2 )(1 + )
2
6
4
0.22
0.8293 + 0.2(0.8293 − 0.04 + 1) +
(0.8293 − 0.04 − 0.4 + 1) +
2
0.2
0.23
(0.8293 − (0.2 + 1)2 )(1 +
)
6
4
0.22
0.23
0.8293 + 0.2(1.7893) +
(1.3893) +
(−0.6107)(1.05)
2
6
1.214091,
w1 = w0 + h(w0 − t20 + 1) +
=
=
=
w2 =
=
=
=
etc. Usando Matlab tenemos, comparando con la solución exacta
y(t) = (t + 1)2 − 0.5et
V.12
V. SOLUCIÓN DE ECUACIONES
DIFERENCIALES ORDINARIAS
>> df = @(t,y) [y-t^2+1,y-t^2-2*t+1,y-t^2-2*t-1,y-t^2-2*t-1];
>> T4=taylor(df,0,2,0.5,10);
>> y=@(t) (t+1).^2 -0.5*exp(t);
>> yy=y(T4(:,1));
>> [T4, abs(T4(:,2)-yy)]
ans =
0
0.500000000000000
0
0.200000000000000
0.829300000000000
0.000001379080085
0.400000000000000
1.214091020000000
0.000003368820636
0.600000000000000
1.648946771828000
0.000006172023254
0.800000000000000
2.127239587110719
0.000010051356953
1.000000000000000
2.640874431697033
0.000015345926556
1.200000000000000
3.179964030874756
0.000022492243029
1.400000000000000
3.732432067310427
0.000032050732765
1.600000000000000
4.283528527012956
0.000044739210512
1.800000000000000
4.815237742893624
0.000061475100098
2.000000000000000
5.305555379170272
0.000083428635597
Comparamos los errores de los cuatro ordenes:
>> df1 = @(t,y) [y-t^2+1,0,0,0];
>> df2 = @(t,y) [y-t^2+1,y-t^2-2*t+1,0,0];
>> df3 = @(t,y) [y-t^2+1,y-t^2-2*t+1,y-t^2-2*t-1,0];
>> T1=taylor(df1,0,2,0.5,10);
>> T2=taylor(df2,0,2,0.5,10);
>> T3=taylor(df3,0,2,0.5,10);
>> err1=abs(T1(:,2)-yy);
>> err2=abs(T2(:,2)-yy);
>> err3=abs(T3(:,2)-yy);
>> err4=abs(T4(:,2)-yy);
>> [err1 err2 err3 err4]
ans =
0
0
0
0.029298620919915
0.000701379080085
0.000034712413418
0.062087651179364
0.001712348820636
0.000084793265080
0.098540599804746
0.003135400195254
0.000155345676735
0.138749535753766
0.005103184246233
0.000252978994283
0.182683085770477
0.007786832629523
0.000386225575140
0.230130338631727
0.011406481816273
0.000566068291720
0.280626576577662
0.016244568368897
0.000806607344841
0.333355659802442
0.022662605832360
0.001125902214908
0.387022514193524
0.031122332440934
0.001547033614333
0.439687446214673
0.042212341751366
0.002099441584789
0
0.000001379080085
0.000003368820636
0.000006172023254
0.000010051356953
0.000015345926556
0.000022492243029
0.000032050732765
0.000044739210512
0.000061475100098
0.000083428635597
Implementación Matlab. Note que la función fija la longitud de df en 4; pero se puede modificar fácilmente para permitir más altos ordenes.
function
T4 = taylor (df, a, b, ya, M)
% Entrada - df = [y’, y’’, y’’’, y’’’’] como cadena de caracteres
%
donde y’ = f(t, y)
%
- a y b son los extremos izquierdo y derecho
%
- ya es la condicion inicial y(a)
%
- M es el numero de pasos
% Salida
- T4 = [T’, Y’] donde T es el vector de abscisas y
%
Y es el vector de ordenadas
h = (b - a) / M;
T = zeros(1, M+1);
Y = zeros(1, M+1);
T = a:h:b;
Y(1) = ya;
for j = 1:M
D = feval(df, T(j), Y(j));
’df’
V.6. MÉTODO DE EULER MODIFICADO
V.13
Y(j+1)=Y(j)+h*(D(1)+h*(D(2)/2+h*(D(3)/6+h*D(4)/24)));
end
T4 = [T’, Y’];
V.6
Método de Euler Modificado
Continuamos considerando el mismo PVI de primer orden
y 0 (t) = f (t, y(t)),
y(t0 ) = y0
para t ∈ [t0 , t0 + T ]. El método se basa en eliminar la derivada mediante integración en ambos
lados de la ecuación en el intervalo [tk , tk+1 ]
Z tk+1
Z tk+1
0
f (t, y(t))dt
y (t)dt =
tk
tk
y entonces
Z
tk+1
f (t, y(t))dt.
y(tk+1 ) = y(tk ) +
tk
Como no es posible evaluar la integral en la derecha, la idea aquı́ es reemplazarla por una aproximación. La aproximación más directamente obtenible es simplemente hf (tk , y(tk )), lo cual nos
llevarı́a de nuevo a la recurrencia del método de Euler. El método de Euler modificado emplea la
regla del trapecio y entonces se obtiene
h
y(tk+1 ) ≈ y(tk ) + (f (tk , y(tk )) + f (tk+1 , y(tk+1 ))).
2
Esto conduce a la ecuación
h
wk+1 = wk + (f (tk , wk ) + f (tk+1 , wk+1 )). (∗)
2
Esta ecuación no da en forma explı́cita wk+1 en términos de wk porque wk+1 aparece a la izquierda
de tal forma que puede no ser fácil despejar y obtener una ecuación explı́cita para wk+1 . Para
corregir esto se emplea en la derecha la predicción w̃k+1 obtenida por el método de Euler
w̃k+1 = wk + hf (tk , wk ).
Entonces se obtiene
h
wk+1 = wk + (f (tk , wk ) + f (tk+1 , wk + hf (tk , wk ))).
2
Análisis del Error. Para el método del trapecio el (valor absoluto del) error está acotado por
|y (2) (ck )| 3
h
12
donde ck ∈ [tk , tk+1 ]. La otra fuente de error (predicción) es menor y por lo tanto se tiene que
|εk | = O(h2 ) (más adelante cuando veamos los métodos de Runge-Kutta confirmaremos esto). Si
el teorema sobre el error acumulado aplica, se tiene que el error total es
E(h) = O(h2 ).
Ası́ que podemos esperar que doblar M tiene el efecto de reducir por un factor de 4 el error.
V.14
V. SOLUCIÓN DE ECUACIONES
DIFERENCIALES ORDINARIAS
Implementación Matlab. A continuación está la función Matlab que implementa el método
de Euler modificado.
function H = eulerMod (f, a, b, ya, M)
% Entrada
- f es la funcion introducida como una cadena de caracteres
%
- a y b son los extremos izquierdo y derecho
%
- ya es la condicion inicial y(a)
%
- M es el numero de pasos
% Salida
- H = [T’, Y’] donde T es el vector de abscisas y
%
Y es el vector de ordenadas
h = (b - a) / M;
T = zeros(1, M+1);
Y = zeros(1, M+1);
T = a:h:b;
Y(1) = ya;
for j = 1:M
k1 = feval(f, T(j), Y(j));
k2 = feval(f, T(j+1), Y(j)+h*k1);
Y(j+1) = Y(j) + (h / 2) * (k1 + k2);
end
H = [T’, Y’];
’f’
Ejemplos
Ejemplo 0 Consideremos de nuevo el PVI
y 0 = Ry,
y(0) = y0 .
El método de Euler modificado resulta en la ecuación de recurrencia
h
wk+1 = wk + (Rwk + R(wk + hRwk ))
2
1
2
=
1 + hR + (hR) wk
2
que tiene solución
wk =
1
1 + hR + (hR)2
2
k
w0 .
Note que en este caso 1 + hR + 21 (hR)2 es una aproximación de segundo orden de ehR . Ası́, es de
esperar que en general el error del método de Euler modificado sea menor que el error del método
de Euler.
Ejemplo 1 Consideremos de nuevo el PVI
dy
= y − t2 + 1;
dt
y(0) = 0.5
con t ∈ [0, 2] y M = 10. El método de Euler modificado resulta en las ecuaciones siguientes de
predicción y corrección
w̃k+1 = wk + h(wk − t2k + 1)
h
wk+1 = wk + ((wk − t2k + 1) + (w̃k+1 − t2k+1 + 1))
2
V.6. MÉTODO DE EULER MODIFICADO
V.15
Reemplazando h = 2/10 = 0.2 y tk = hk = 0.2h, se obtiene
w̃k+1 = wk + 0.2(wk − 0.04k 2 + 1)
h
wk+1 = wk + ((wk − 0.04k 2 + 1) + (w̃k+1 − 0.04(k + 1)2 + 1))
2
Entonces, comenzando con y0 = 0.5, obtenemos los valores numéricos
w̃1 = w0 + 0.2(w0 − 0.04 × 02 + 1) = 0.5 + 0.2(0.5 + 1) = 0.8
w1 = w0 + 0.1((w0 − 0.04 × 02 + 1) + (w̃1 − 0.04 × 12 + 1))
= 0.5 + 0.1((0.5 − 0.04 × 02 + 1) + (0.8 − 0.04 × 12 + 1)) = 0.826
w̃2 = w1 + 0.2(w1 − 0.04 × 12 + 1) = 0.826 + 0.2(0.826 − 0.04 + 1) = 1.1832
w2 = w1 + 0.1((w1 − 0.04 × 12 + 1) + (w̃2 − 0.04 × 22 + 1))
= 0.826 + 0.1((0.826 − 0.04 × 12 + 1) + (1.1832 − 0.04 × 22 + 1)) = 1.20692
..
.
Ahora completamos el ejercicio con Matlab; la tabla compara el error del método de Euler
modificado con el método de Euler. Y también para M = 20.
>> H10=eulerMod(f,0,2,0.5,10);
>> ERRH10=abs(E10-H10(:,2));
>> [H10 E10 ERRH10 ERR10]
ans =
0
0.5000
0.5000
0.2000
0.8260
0.8293
0.4000
1.2069
1.2141
0.6000
1.6372
1.6489
0.8000
2.1102
2.1272
1.0000
2.6177
2.6409
1.2000
3.1496
3.1799
1.4000
3.6937
3.7324
1.6000
4.2351
4.2835
1.8000
4.7556
4.8152
2.0000
5.2331
5.3055
0
0.0033
0.0072
0.0117
0.0170
0.0232
0.0304
0.0387
0.0484
0.0596
0.0724
0
0.0293
0.0621
0.0985
0.1387
0.1827
0.2301
0.2806
0.3334
0.3870
0.4397
>> H20=eulerMod(f,0,2,0.5,20);
>> ERRH20=abs(E20-H20(:,2));
>> [H20 E20 ERRH20 ERR20]
ans =
0
0.5000
0.5000
0.1000
0.6570
0.6574
0.2000
0.8284
0.8293
0.3000
1.0137
1.0151
0.4000
1.2122
1.2141
0.5000
1.4232
1.4256
0.6000
1.6459
1.6489
0.7000
1.8794
1.8831
0.8000
2.1228
2.1272
0.9000
2.3750
2.3802
1.0000
2.6348
2.6409
1.1000
2.9010
2.9079
1.2000
3.1720
3.1799
1.3000
3.4464
3.4554
1.4000
3.7223
3.7324
1.5000
3.9978
4.0092
1.6000
4.2708
4.2835
0
0.0004
0.0009
0.0013
0.0019
0.0024
0.0031
0.0037
0.0044
0.0052
0.0061
0.0070
0.0079
0.0090
0.0101
0.0113
0.0126
0
0.0074
0.0153
0.0237
0.0325
0.0419
0.0519
0.0624
0.0734
0.0850
0.0971
0.1098
0.1230
0.1367
0.1509
0.1655
0.1805
V.16
V. SOLUCIÓN DE ECUACIONES
1.7000
1.8000
1.9000
2.0000
4.5390
4.7996
5.0499
5.2866
4.5530
4.8152
5.0671
5.3055
0.0140
0.0156
0.0172
0.0189
DIFERENCIALES ORDINARIAS
0.1957
0.2111
0.2266
0.2420
Ejemplo: Solución de la forma implı́cita. Regresemos a la ecuación (∗), obtenida antes de
reemplazar la predicción ỹk+1 :
h
wk+1 = wk + (f (tk , wk ) + f (tk+1 , wk+1 )).
2
Esta es una relación implı́cita para wk+1 , la cual es posible en principio resolver para obtener wk+1 .
Dependiendo de la función f , es posible que esto se pueda hacer analı́ticamente en forma fácil o
no. En el caso negativo, se podrı́a usar un método numérico para determinar la solución wk+1 .
Consideremos por ejemplo el PVI del Ejemplo 0 arriba. En este caso f (t, y) = Ry y obtenemos
h
wk+1 = wk + (Rwk + Rwk+1 )
2
de donde
wk+1 =
1 + hR/2
1 − hR/2
wk
y por lo tanto
wk =
1 + hR/2
1 − hR/2
k
w0
Al igual que 1 + hR + (hR)2 /2, el factor que se obtiene cuando se aplica el método explı́cito de
Euler modificado, el término que aparece aquı́
1 + hR/2
1 − hR/2
también es una aproximación de segundo orden para ehR , cuando hR es suficientemente pequeño:
Se puede probar que para hR ≤ 1,
1
1
1 + hR/2
1
1
1 + hR + (hR)2 + (hR)3 ≤
≤ 1 + hR + (hR)2 + (hR)3 .
2
8
1 − hR/2
2
2
V.7
Método de Runge-Kutta
Ahora estudiamos un método que permite obtener aproximaciones de órdenes más altos, al igual
que el método de Taylor, pero evitando calcular derivadas. El método de Euler modificado ilustra
que esto es posible en el caso de orden 2: tiene el mismo orden de aproximación que el método de
Taylor de segundo orden pero sin usar y 00 (t) = df (t, y)/dt. Integrando la ecuación del PVI, como
en la derivación del método de Euler modificado, podemos utilizar otras fórmulas de cuadratura,
por ejemplo usando la regla del punto medio,
h
h
y(tk+1 ) ≈ y(tk ) + hf tk + , y tk +
.
2
2
V.7. MÉTODO DE RUNGE-KUTTA
V.17
Para obtener una fórmula explı́cita, empleamos una predicción p̃k+1 para y tk +
manera
h
wk+1 = wk + hf tk + , p̃k+1
2
h
con p̃k+1 = wk + f (tk , wk ),
2
h
2
de la siguiente
ó simplemente
wk+1
h
h
= wk + hf tk + , wk + f (tk , wk )
2
2
Este se denomina el método del punto medio. Al igual que el método de Euler modificado, el error
de aproximación local es O(h2 ).
V.7.1
Runge-Kutta de orden 2
La forma general de los métodos de Heun y del punto medio es
y(tk+1 ) ≈ y(tk ) + Ahf0 + Bhf1
donde
f0 = f (tk , y(tk )),
f1 = f (tk + P h, y(tk ) + Qhf0 )
Las constantes A, b y P, Q se determinan de tal forma que esta aproximación coincide con la
aproximación de Taylor de segundo orden. Usando la expansión de Taylor de primer orden en dos
variables para f1 alrededor de (tk , y(tk )), obtenemos
f1 = f (tk , y(tk )) + P hft (tk , y(tk )) + Qhf0 fy (tk , y(tk )) + C1 h2
para alguna constante C1 . Ası́ que
y(tk ) + Ahf0 + Bhf1
= y(tk ) + Ahf (tk , y(tk )) + Bh(f (tk , y(tk )) + P hft (tk , y(tk )) + Qhf0 fy (tk , y(tk ))) + O(h3 )
= y(tk ) + (A + B)hf (tk , y(tk )) + BP h2 ft (tk , y(tk )) + BQh2 f0 fy (tk , y(tk )) + O(h3 ).
En comparación, la aproximación de Taylor de primer orden de y(tk + h) es
h2 00
y (tk ) + O(h3 )
2
h2
= y(tk ) + hf (tk , y(tk )) + (ft (tk , y(tk )) + f (tk , y(tk ))fy (tk , y(tk ))) + O(h3 )
2
h2
h2
= y(tk ) + hf (tk , y(tk )) + ft (tk , y(tk ) + f0 fy (tk , y(tk ))) + O(h3 )
2
2
y(tk + h) = y(tk ) + hy 0 (tk ) +
Comparando con el resultado anterior, se observa que ambos son iguales hasta orden 2 si
A + B = 1,
BP = 1/2,
BQ = 1/2.
V.18
V. SOLUCIÓN DE ECUACIONES
DIFERENCIALES ORDINARIAS
Dos posibles soluciones son (i) A = B = 1/2, P = Q = 1, (ii) A = 0, B = 1, P = Q = 1/2,
que corresponde a los dos métodos ya discutidos. Otra posibilidad es (iii) A = 1/4, B = 3/4,
P = Q = 2/3 que corresponde a
h
2
2
y(tk + h) ≈ y(tk ) +
f (tk , y(tk )) + 3f tk + h, y(tk ) + hf (tk , y(tk )
.
4
3
3
La fórmula de diferencias correspondiente es
2
2
h
f (tk , wk ) + 3f tk + h, wk + hf (tk , wk
wk+1 = wk +
4
3
3
y su error local es también O(h2 ).
V.7.2
Runge-Kutta de orden 4
En forma similar se pueden derivar métodos de cuarto orden:
yk+1 ≈ yk + w1 k1 + w2 k2 + w3 k3 + w4 k4 (∗)
donde w1 , w2 , w3 , w4 son constantes y
k1
k2
k3
k4
=
=
=
=
hf (tk , yk )
hf (tk + A1 h, yk + P1 k1 )
hf (tk + A2 h, yk + Q1 k1 + Q2 k2 )
hf (tk + A3 h, yk + R1 k1 + R2 k2 + R3 k3 )
donde A1 , A2 , A3 , P1 , Q1 , Q2 , R1 , R2 , R3 son constantes. Comparando la aproximación de Taylor de
cuarto orden con la fórmula (∗) reemplazando los fi con aproximaciones de Taylor de orden tres en
dos variables se encuentran condiciones para las constantes. La solución que usualmente se conoce
como el método de Runge-Kutta de orden 4 es
1
yk+1 ≈ yk + (k1 + 2k2 + 2k3 + k4 )
6
donde
k1 = hf (tk , y(tk ))
h
1
k2 = hf tk + , yk + k1
2
2
h
1
k3 = hf tk + , yk + k2
2
2
k4 = hf (tk + h, yk + k3 )
Finalmente, reemplazando yk con la aproximación wk , la ecuación de diferencias del método de
Runge-Kutta, es
1
wk+1 = wk + (K1 + 2K2 + 2K3 + K4 )
6
V.7. MÉTODO DE RUNGE-KUTTA
V.19
donde
K1 = h · f (tk , wk )
1
h
K2 = h · f tk + , wk + K1
2
2
h
1
K3 = h · f tk + , wk + K2
2
2
K4 = h · f (tk + h, wk + K3 )
Una forma alternativa de interpretar esta fórmula es como una aplicación de la regla de Simpson
en la integración del PVI:
Z tk+1
f (t, y(t))dt
y(tk+1 ) − y(tk ) =
tk
h
h
h
=
f (tk , y(tk )) + 4f tk + , y tk +
+ f (tk+1 , y(tk+1 )) + O(h5 )
6
2
2
El término con coeficiente 4 se divide en dos mitades con coeficiente 2, y luego se usan predicciones
adecuadas para y(tk + h2 ) y y(tk+1 ).
Ejemplo. Consideremos de nuevo el PVI y 0 = y − t2 + 1 en [0, 2] con y0 = 0.5 y h = 0.2. La
fórmula de diferencias de Runge-Kutta para este PVI es
1
wk+1 = wk + (K1 + 2K2 + 2K3 + K4 )
6
donde
= 0.2 (wk − t2k + 1)
1
1
0.2 2
K2 = 0.2 · f tk + 0.2
,
w
+
K
=
0.2
w
+
K
−
t
+
+
1
k
k
k
2
2 1
2 1
2
1
0.2
0.2 2
1
K3 = 0.2 · f tk + 2 , wk + 2 K2 = 0.2 wk + 2 K2 − tk + 2 + 1
K4 = 0.2 · f (tk + 0.2, wk + K3 )
= 0.2 ((wk + K3 ) − (tk + 0.2)2 + 1)
K1 = 0.2 · f (tk , wk )
Calculemos el primer valor como ejemplo:
1
w1 = w0 + (K1 + 2K2 + 2K3 + K4 )
6
donde
K1 = 0.2 w0 − t20 + 1
K2 = 0.2 w0 + 21 K1 − t0 +
K3 = 0.2 w0 + 12 K2 − t0 +
= 0.2 (0.5 + 1)
2+1
+
1
=
0.2
(0.5
+
0.1
·
1.5)
−
(0.1)
2
0.2 2
+1
= 0.2 (0.5 + 0.1 · 1.64) − (0.1)2 + 1
2
K4 = 0.2 (w0 + K3 ) − (t0 + 0.2)2 + 1
= 0.2 (0.5 + 0.2 · 1.654) − (0.02)2 + 1
0.2 2
= 0.2 · 1.5
= 0.2 · 1.64
= 0.2 · 1.654
= 0.2 · 1.7908
y entonces
0.2
(1.5 + 2 · 1.64 + 2 · 1.654 + 1.7908) = 0.8292933
6
Usando Matlab se obtiene lo siguiente (en las columnas 3 y 4 aparecen los errores para los
métodos de Runge-Kutta y Taylor de orden 4)
w1 = 0.5 +
V.20
V. SOLUCIÓN DE ECUACIONES
>> f=@(t,y) y-t^2+1;
>> R=rk4(f,0,2,0.5,10);
>> erk=abs(R(:,2)-yy);
>> [R erk err4]
ans =
0
0.500000000000000
0.200000000000000
0.829293333333333
0.400000000000000
1.214076210666667
0.600000000000000
1.648922017041600
0.800000000000000
2.127202684947944
1.000000000000000
2.640822692728752
1.200000000000000
3.179894170232231
1.400000000000000
3.732340072854980
1.600000000000000
4.283409498318406
1.800000000000000
4.815085694579434
2.000000000000000
5.305363000692654
DIFERENCIALES ORDINARIAS
0
0.000005287586582
0.000011440512698
0.000018582763146
0.000026850805823
0.000036393041726
0.000047368399497
0.000059943722683
0.000074289484037
0.000090573214091
0.000108949842021
0
0.000001379080085
0.000003368820636
0.000006172023254
0.000010051356953
0.000015345926556
0.000022492243029
0.000032050732765
0.000044739210512
0.000061475100098
0.000083428635597
Implementación Matlab. La siguiente es la implementación Matlab del método de RungeKutta de orden 4.
function R = rk4 (f, a, b, ya, M)
% Entrada
- f es la funcion como cadena de caracteres ’f’
%
- a y b son los extremos izquierdo y derecho
%
- ya es la condicion inicial y(a)
%
- M es el numero de pasos
% Salida
- R = [T’, Y’] donde T es el vector de abscisas
%
y Y es el vector de ordenadas
h = (b - a) / M;
T = zeros(1, M+1);
Y = zeros(1, M+1);
T = a:h:b;
Y(1) = ya;
for j = 1:M
k1 = h * feval(f, T(j), Y(j));
k2 = h * feval(f, T(j) + h/2, Y(j) + k1/2);
k3 = h * feval(f, T(j) + h/2, Y(j) + k2/2);
k4 = h * feval(f, T(j) + h,
Y(j) + k3);
Y(j+1) = Y(j) + (k1 + 2 * k2 + 2 * k3 + k4) / 6;
end
R = [T’, Y’];
V.8
Sistemas de Ecuaciones
Los métodos desarrollados para el PVI de primer orden pueden ser extendidos a otras ecuaciones
diferenciales. Por ejemplo, sistemas de ecuaciones donde y y f se reemplazan por vectores




y1
f1
 y2 
 f2 




y =  ..  y f (t, y) =  ..  : R × Rn → Rn
 . 
 . 
yn
fn
y el PVI y 0 = f (t, y) por el PVI vectorial
y0 (t) = f (t, y), y(t0 ) = y0 ,
V.8. SISTEMAS DE ECUACIONES
V.21
el cual es equivalente al sistema de ecuaciones
y10 (t) = f1 (t; y1 (t), y2 (t), . . . , yn (t))
y20 (t) = f2 (t; y1 (t), y2 (t), . . . , yn (t))
..
.
0
yn (t) = fn (t; y1 (t), y2 (t), . . . , yn (t))
con
yk (t0 ) = y0,k i = 1, . . . , n.
Solución Numérica
Los métodos de solución para un PVI simple se pueden extender al caso de sistemas. Como antes
se discretiza el tiempo [t0 , t0 + T ] en una secuencia de tiempos tk = t0 + kh con h = T /M donde
M es el número de subintervalos y se determinan aproximaciones wi,k para yi,k = yi (tk ):





y1,k
y2,k
..
.






=
y
≈
w
=


k
k


yn,k
w1,k
w2,k
..
.





wn,k
En general, los wk se determinan por medio de una fórmula de diferencias para, k ≥ 0,
wk+1 = wk + hΦ(tk , wk ).
A continuación describimos algunas de las extensiones para sistemas.
Euler. El método de Euler es
wk+1 = wk + hf (tk , wk )
Euler modificado. El método del punto medio es
h
h
h
wk+1 = wk + f tk + , wk + f (tk , wk )
2
2
2
Taylor. El método de Taylor, de segundo orden como ejemplo, es
wk+1 = wk + hf (tk , wk ) +
h2 0
f (tk , wk )
2
Runge-Kutta. El método de Runge-Kutta de cuarto orden es (escribimos las ecuaciones con
Ki ’s en lugar de fi ’s para evitar confusión con las funciones componentes fi cuando se escriben las
ecuaciones escalares):
1
wk+1 = wk + (K1 + 2K2 + 2K3 + K4 )
6
V.22
V. SOLUCIÓN DE ECUACIONES
DIFERENCIALES ORDINARIAS
donde cada Kj es un vector (columna) con n componentes Kj = [Kj,1 Kj,2 · · · Kj,n ]T , definidos
por las ecuaciones vectoriales
K1 = hf (tk , wk )
1
h
K2 = hf tk + , wk + K1
2
2
h
1
K3 = hf tk + , wk + K2
2
2
K4 = hf (tk + h, wk + K3 )
Estas son ecuaciones vectoriales con n componentes. Para clarificación escribimos la forma
escalar de las ecuaciones: con i = 1, 2, . . . , n,
1
wi,k+1 = wi,k + (K1,i + 2K2,i + 2K3,i + K4,i )
6
donde
K1,i = hfi (tk ; w1,k , w2,k , . . . , wn,k )
1
1
1
h
K2,i = hfi tk + ; w1,k + k1,1 , w2,k + K1,2 , . . . , wn,k + K1,n
2
2
2
2
1
1
1
h
K3,i = hfi tk + ; w1,k + K2,1 , w2,k + K2,2 , . . . , wn,k + K2,n
2
2
2
2
K4,i = hfi (tk + h; w1,k + K3,1 , w2,k + K3,2 , . . . , wn,k + K3,n )
Ejemplo. En la próxima sección.
Implementación Matlab. La siguiente función Matlab implementa el método de Runge-Kutta
para sistemas.
function [T, Z] = rks4 (F, a, b, Za, M)
% Entrada
- F es el sistema introducido como cadena de caracteres ’F’
%
- a y b los extremos del intervalo
%
- Za = [x(a), y(a)] las condiciones iniciales
%
- M es el numero de pasos
% Salida
- T es el vector de pasos
%
- Z = [x1(t), . . ., xn(t)] donde xk(t) es la aproximacion a la
%
k-esima variable dependiente
h = (b - a) / M;
T = zeros(1, M+1);
Z = zeros(M+1, length(Za));
T = a:h:b;
Z(1, :) = Za;
for j = 1:M
k1 = h * feval(F, T(j), Z(j, :));
k2 = h * feval(F, T(j) + h/2, Z(j, :) + k1/2);
k3 = h * feval(F, T(j) + h/2, Z(j, :) + k2/2);
k4 = h * feval(F, T(j) + h, Z(j, :) + k3);
Z(j+1, :) = Z(j, :) + (k1 + 2 * k2 + 2 * k3 + k4) / 6;
end
V.9. ECUACIONES DE ORDEN SUPERIOR
V.9
V.23
Ecuaciones de Orden Superior
Una ecuación diferencial de orden superior de la forma
y (m) (t) = f (t, y, y 0 (t), y 00 (t), . . . , y (m−1) (t)),
con condiciones iniciales
y(t0 ) = C0 , y 0 (t0 ) = C1 , . . . , y (m−1) (t0 ) = Cm−1
se puede resolver introduciendo funciones yk (t), k = 1, . . . , m tal que
yk (t) = y (k−1) (t).
En particular
y1 (t) = y (0) (t) = y(t).
Con esto se obtiene un sistema de ecuaciones diferenciales de primer orden
y10 (t) = y2 (t)
y20 (t) = y3 (t)
..
.
0
ym−1 (t) = ym (t)
0
ym
(t) = f (t, y1 (t), y2 (t), . . . , ym (t))
con condiciones iniciales
y1 (t0 ) = C0 , y2 (t0 ) = C1 , . . . , ym (t0 ) = Cm−1 .
Ejemplo. Para la ecuación del péndulo
g
d2 θ
+ sin θ = 0 con θ(0) = θ0 , θ0 (0) = θ00
2
dt
L
definimos
y1 (t) = θ(t)
y2 (t) = θ0 (t)
y se obtienen las ecuaciones
y10 = y2 ,
g
y20 = − sin y1 ,
L
y1 (0) = θ0
y2 (0) = θ00
En forma vectorial, esto es
y0 = f (t; y), y(0) = y0
donde
y=
y1
y2
, f (t, y) =
y2
g
− L sin y1
, y0 =
θ0
θ00
V.24
V. SOLUCIÓN DE ECUACIONES
DIFERENCIALES ORDINARIAS
Ejemplo. Consideramos la ecuación diferencial de segundo orden
y 00 − 2y 0 + y = tet − t,
y(0) = 0, y 0 (0) = 1
0≤t≤1
Se desea una aproximación de y(0.1) con h = 0.1 usando diferentes métodos. Para comparación,
la solución exacta es
1
y(t) = t3 et − tet + 2et − 2
6
de donde y(0.1) = 0.10000894
Sistema de primer orden equivalente: Introducimos y1 , y2 con
y1 (t) = y(t), y2 (t) = y 0 (t).
Con esto tenemos el sistema, para t ∈ [0, 1],
y10 = y2 ,
y20 = 2y2 (t) − y1 (t) + tet − t,
Forma vectorial: Con
y1 (0) = 0
y2 (0) = 1
y : R → R2
7→ y(t) =
t
y1 (t)
y2 (t)
y
f : R × R2 → R2
(t, y)
7→ f (t, y) =
y2 (t)
2y2 (t) − y1 (t) + tet − t
se tiene la ecuación vectorial
0
y (t) = f (t, y(t)), y(0) = y0 ≡
0
1
Solución – Euler: La fórmula de diferencias es
wk+1 = wk + hf (tk , wk ), con w0 =
w1,0
w2,0
=
0
1
donde
f (tk , wk ) =
w2,k
2w2,k − w1,k + tk etk − tk
.
Para k = 0
w1 = w0 + 0.1 f (t0 , w0 )
0
w2,0
=
+ 0.1
1
2w2,0 − w1,0 + 0e0 − 0
0
1
=
+ 0.1
1
2
0
0.1
=
+
1
0.2
0.1
=
1.2
V.9. ECUACIONES DE ORDEN SUPERIOR
V.25
Entonces
y(0.1)
y 0 (0.1)
=
y1 (0.1)
y2 (0.1)
≈ y1 =
0.1
1.2
y
y(0.1) ≈ 0.1.
Solución – Punto medio: La fórmula de diferencias es
h
h
h
w1,0
0
wk+1 = wk + f tk + , wk + f (tk , wk ) , con w0 =
=
w
1
2
2
2
2,0
Para k = 0,
w1 =
=
=
=
=
=
≈
0.1
0.1
0.1
f t0 +
, w0 +
f (t0 , w0 )
w0 +
2
2
2
0
0
1
+ 0.05 f 0.05,
+ 0.05
1
1
2
0
0.05
+ 0.05 f 0.05,
1
1.1
0
1.1
+ 0.05
1
2(1.1) − 0.05 + 0.05e0.05 − 0.05
0
1.1
0
0.055
+ 0.05
=
+
1
2.1526
1
0.1076
0.055
1.1076
y(0.1)
y 0 (0.1)
Solución – Taylor 2do. orden: La fórmula de diferencias es
wk+1
h2
= wk + h f (tk , wk ) + f 0 (tk , wk ), con w0 =
2
w1,0
w2,0
=
0
1
Calculando la derivada
d
y2 (t)
f (t, y(t)) =
dt 2y2 (t) − y1 (t) + tet − t
y20 (t)
=
2y20 (t) − y10 (t) + et + tet − 1
2y2 (t) − y1 (t) + tet − t
=
2(2y2 (t) − y1 (t) + tet − t) − y2 (t) + et + tet − 1
2y2 (t) − y1 (t) + tet − t
=
3y2 (t) − 2y1 (t) + 3tet + et − 2t − 1
0
obtenemos la fórmula de diferencias
0
f (tk , wk ) =
2w2,k − wk,1 + tk etk − tk
3w2,k − 2w1,k + 3tk etk + etk − 2tk − 1
V.26
V. SOLUCIÓN DE ECUACIONES
DIFERENCIALES ORDINARIAS
Entonces w1 =
0.12 0
0
f (t0 , w0 )
=
+ 0.1 f (t0 , w0 ) +
1
2
0
w2,0
2w2,0 − w1,0 + t0 et0 − t0
=
+ 0.1
+ 0.005
3w2,0 − 2w1,0 + 3t0 et0 + et0 − 2t0 − 1
1
2w2,0 − w1,0 + 0e0 − 0
0.1
2
=
+ 0.005
1.2
3
0.11
y(0.1)
=
≈
1.215
y 0 (0.1)
Solución – Runge-Kutta. La fórmula para w1 es (usando la notación con fi ’s en lugar de Ki ’s)
1
w1,0
0
=
w1 = w0 + (K1 + 2K2 + 2K3 + K4 ), con w0 =
w
1
6
2,0
donde
K1 =
K2 =
=
=
K3 =
=
=
=
=
K4 =
=
=
=
=
1
0.1 · f (t0 , w0 ) = 0.1 ·
2
0.1
1
0.1 · f t0 +
, w0 + K1
2
2
0
1
0.1 · f 0.05,
+ 0.05
1
2
1.1
0.1 ·
2.1526
1
0.1
, w0 + K2
0.1 · f t0 +
2
2
0
1.1
0.1 · f 0.05,
+ 0.05
1
2.1526
0.055
0.1 · f 0.05,
1.1076
1.1076
0.1 ·
2(1.1076) − 0.055 + 0.05e0.05 − 0.05
1.1076
0.1 ·
2.1628
0.1 · f (t0 + 0.1, w0 + 1K3 )
0
1.1076
0.1 · f 0.1,
+ 0.1
1
2.1628
0.1108
0.1 · f 0.1,
1.2163
1.2163
0.1 ·
2(1.2163) − 0.1108 + 0.1e0.1 − 0.1
1.2163
0.1 ·
2.3323
V.10. PROBLEMAS DE CONTORNO
V.27
Entonces
0.1
=
+
6
0.1105
=
≈
1.2161
w1
V.10
0
1
1
2
+2
y(0.1)
y 0 (0.1)
1.1
2.1526
+2
1.1076
2.1628
+
1.2163
2.3323
Problemas de Contorno
Consideramos problemas de contorno o con valores en la frontera (PVF) de la forma
(∗)
y 00 = f (x, y, y 0 ), a ≤ x ≤ b
y(a) = α, y(b) = β condiciones de frontera
Una solución del PVF (∗) es una función y(x) que satisface la ecuación diferencial en [a, b] y las
condiciones de frontera. El siguiente teorema establece condiciones de existencia y unicidad para
la solución del PVF (∗).
Teorema V.4 Sea R = {(x, y, y 0 ) : a ≤ x ≤ b, −∞ < y, y 0 < ∞} y f (x, y, y 0 ) una función
continua en R y con derivadas fy y fy0 continuas en R. Si
fy (x, y, y 0 ) > 0 para todo (x, y, y 0 ) ∈ R
y existe M > 0 tal que
|fy0 (x, y, y 0 )| ≤ M para todo (x, y, y 0 ) ∈ R,
entonces el PVF (∗) tiene una solución única y(x) en [a, b].
Ejemplo.
Ejemplo.
PVF Lienal. Se dice que el PVF (∗) es lineal si existen funciones p(x), q(x), r(x) tal que
(∗∗) f (x, y, y 0 ) = p(x)y 0 + q(x)y + r(x).
En este caso, el enunciado del teorema se simplifica de la siguiente manera: si p(x), q(x), r(x) son
continuas en [a, b] y q(x) > 0 en [a, b], entonces el PVF tiene una solución única en [a, b] (note
que la continuidad de p(x) en [a, b] implica que existe M > 0 tal que |p(x)| ≤ M y por lo tanto
|fy0 (x, y, y 0 )| ≤ M en [a, b]).
V.10.1
Método del Disparo para un PVF Lineal
Dado el PVF lineal con f (x, y, y 0 ) como en (∗∗), consideramos los siguientes PVIs
(PVI I)
u00 (x) = p(x)u0 (x) + q(x)u(x) + r(x), a ≤ t ≤ b
u(a) = α, u0 (a) = 0 condiciones iniciales
V.28
V. SOLUCIÓN DE ECUACIONES
DIFERENCIALES ORDINARIAS
y
(PVI II)
v 00 (x) = p(x)v 0 (t) + q(x)v(x), a ≤ t ≤ b
v(a) = 0, v 0 (a) = 1 condiciones de frontera
Veamos que si u(x) y v(x) son soluciones de (PVI I) y (PVI II) respectivamente entonces para
cualquier constante c,
y(x) = u(x) + cv(x)
es una solución de y 00 (x) = p(x)y 0 (x) + q(x)y(x) + r(x):
y 00 (x) =
=
=
=
=
(u(x) + cv(x))00
u00 (x) + cv 00 (x)
(p(x)u0 (x) + q(x)u(x) + r(x)) + c(p(x)v 0 (x) + q(x)v(x))
p(x)(u0 (x) + cv 0 (x)) + q(x)(u(x) + cv(x)) + r(x)
p(x)y 0 (x) + q(x)y(x) + r(x)
Ahora veamos que es posible determinar c tal que las condiciones de frontera se satisfacen. Primero,
en x = a cualquier c funciona:
x(a) = u(a) + cv(a) = α + c · 0 = α.
En x = b, se tiene que para que y(b) = β se debe tener que
u(b) + cv(b) = β
y por lo tanto, asumiendo v(b) 6= 0, entonces se debe escoger
c=
β − u(b)
v(b)
Pero v(b) 6= 0 debe ser el caso si se satisfacen las condiciones del teorema, porque de lo contrario,
si v(b) = 0 entonces v serı́a una solución del PVF
v 00 (x) = p(x)v 0 (x) + q(x)v(x),
v(a) = 0, v(b) = 0
a≤t≤b
y por la unicidad de la solución se tendrı́a v ≡ 0, lo cual está en contradicción con la condición
v 0 (a) = 1.
0
00
Para la solución numérica, se obtienen aproximaciones discretas w00 , w10 , . . . , wM
y w000 , w100 , . . . , wM
para u(x) y v(x) en [a, b] usando alguno de los métodos ya discutidos para problemas con valor
inicial, y luego se determina c como
0
β − wM
.
c=
00
wM
Con este valor, entonces la aproximación discreta w0 , w1 , . . . , wM de y(x) está dada por
wk = wk0 + cwk00
k = 0, 1, . . . , M .
V.10. PROBLEMAS DE CONTORNO
V.29
Implementación Matlab. La función linsht requiere que se pasen los sistemas de primer orden
equivalentes a los dos PVIs I y II (por supuesto serı́a más fácil pasar p(t), q(t), r(t), pero ası́ no es
como la implementación funciona).
function L = linsht (F1, F2, a, b, alpha, beta, M)
% Entrada
- F1 y F2 son los sistemas de ecuaciones de primer orden
%
representando los Problemas de Valor Inicial (P.V.I.’s)
%
- a y b son los extremos del intervalo
%
- alpha = x(a) y beta = x(b); las condiciones frontera
%
- M es el numero de pasos
% Salida
- L = [T’, X]; donde T’ es el vector de abscisas (M+1)x1
%
y X es el vector de ordenadas (M+1) x 1
% Resolver el sistema F1
Za = [alpha, 0];
[T, Z] = rks4 (F1, a, b, Za, M);
U = Z(:, 1);
% Resolver el sistema F2
Za = [0, 1];
[T, Z] = rks4 (F2, a, b, Za, M);
V = Z(:, 1);
% Calcular la solucion al problema de valor frontera
X = U + (beta - U(M+1)) * V / V(M+1);
L = [T’, X];
Descargar