Capı́tulo 2 Ecuaciones Diferenciales Ordinarias 2.1. Introducción Una ecuación diferencial ordinaria lineal de la forma d y(x) = f (x, y) dx d y(x) = y (x) dx con (2.1) se puede utilizar como modelo matemático de una gran variedad de fenómenos, ya sean fı́sicos o no fı́sicos, y en disciplinas cientı́ficas y no cientı́ficas. Ejemplos de dichos fenómenos incluyen problemas de transferencia de calor (termodinámica), circuitos eléctricos simples (ingenierı́a eléctrica), problemas de fuerza (ingenierı́a mecánica), razón de crecimiento de bacterias (ciencias biológicas), razón de descomposición radioactiva (fı́sica atómica), razón de cristalización de un componente quı́mico (quı́mica), taza de crecimiento de una población (estadı́stica), etc. Existe una serie de métodos para resolver este tipo de ecuaciones, dentro de los que podemos mencionar: separación de variables, solución exacta y solución por series finitas. Dentro de estos últimos, veremos los métodos de Euler y Runge–Kutta segundo y cuarto orden. 2.2. Método de Euler La expansión en series de Taylor de primer orden se obtiene evaluando y(xn+1 ) = y(xn ) + hf (xn , y(xn )) + h2 f (xn , y(xn )) + · · · + 2 hp (p−1) f (xn , y(xn )) + Tn+1 p! donde Tn+1 = hp+1 y (p+1) (xn ) , (p + 1)! xn < xn < xn+1 (2.2) (2.3) Para p = 1, tenemos: y(xn+1 ) = y(xn ) + hf (xn , y(xn )) + Tn+1 (2.4) Los términos de orden superior se desprecian. El algoritmo de Euler utiliza esta expansión en series de Taylor lineal para calcular una nueva aproximación y(xn+1 ) (que denominaremos yn+1 ) mediante la fórmula: yn+1 = yn + hf (xn , yn ) siendo éste el algoritmo más sencillo para resolver numéricamente ecuaciones diferenciales ordinarias. 29 (2.5) c 1997–2006. Dr. Horacio Martı́nez Alfaro Métodos Numéricos Ejemplo 2.1 Utilizando el método de Euler, integre numéricamente la siguiente ecuación: dy(x) = y = f (x, y(x)) = 4e0.8x − 0.5y(x) dx de x = 0 a x = 4 con un tamaño de paso de 0.5 (h = 0.5). La condición inicial en x = 0 es y = 2 (es decir, y(0) = 2). Solución Si utilizamos la ecuación 2.4, podemos sustituir los datos y comenzar la solución numérica del problema: y(0.5) = y(0.0) + 0.5f (0.0, 2.0) = 2 + 0.5(4e0.8(0) − 0.5(2)) = 3.5 y(1.0) = y(0.5) + 0.5f (0.5, 3.5) = 3.5 + 0.5(4e0.8(0.5) − 0.5(3.5)) = 5.608649 y(1.5) = = y(1.0) + 0.5f (1.0, 5.608649) = 5.608649 + 0.5(4e0.8(1.0) − 0.5(5.608649)) 8.657569 y(2.0) = y(2.5) = y(1.5) + 0.5f (1.5, 8.657569) = 13.133411 y(2.0) + 0.5f (2.0, 13.133411) = 19.756123 y(3.0) = y(3.5) = y(2.5) + 0.5f (2.5, 19.756123) = 29.595204 y(3.0) + 0.5f (3.0, 29.595204) = 44.242756 y(4.0) = y(3.5) + 0.5f (3.5, 44.242756) = 66.071361 Utilizando Maple, lo anterior se pudo haber calculado de la siguiente forma: > > > > > > f := (x,y)->4*exp(0.8*x) - 0.5*y; ySol:=<<0 | 2>>: h := 0.5: for i to 8 do x:=ySol[i,1]: y:=ySol[i,2]: ySol := <ySol, <x+h | y+h*f(x,y)>>; end do: Transpose(ySol); 0 0.500000 1.000000 1.500000 2.000000 2.500000 3.000000 3.500000 4.000000 2 3.500000 5.608649 8.657569 13.133411 19.756123 29.595204 44.242756 66.071361 La solución exacta a este problema se puede obtener con Maple de la siguiente forma: > dsolve({diff(y(x),x)=f(x,y(x)), y(0)=2}, y(x)); y(x) = 1 (40e4x/5 − 14e−x/2) 13 (2.6) o también, se puede obtener un procedimiento para obtener una solución numérica: > snf1 := dsolve({diff(y(x),x)=f(x,y(x)),y(0)=2},y(x),numeric): > plots[odeplot](snf1,[x,y(x)],0..4); y la gráfica de los puntos generados con el método de Euler y la solución exacta (y/o númerica con un método más exacto) se muestan en la figura 2.1. 30 c 1997–2006. Dr. Horacio Martı́nez Alfaro Métodos Numéricos 70 60 50 40 30 20 10 0 1 2 3 4 Figura 2.1: Método de Euler y solución exacta de la ecuación diferencial. 2.3. Métodos de Runge–Kutta Los métodos de Runge–Kutta utilizan indirectamente el algoritmo de Taylor. En general, estos métodos evalúan f (x, y) en más de un punto en la proximidad de (xn , yn ) en lugar de evaluar derivadas de f (x, y), las cuales se necesitarı́an para el uso directo del algoritmo por series de Taylor. La derivación de estos métodos se acompaña de la suposición de un algoritmo particular con ciertos coeficientes indeterminados. Los valores de estos términos constantes se encuentran igualando la fórmula de Runge–Kutta de orden p al algoritmo de Taylor de orden p. 2.3.1. Runge–Kutta Segundo Orden Asumiendo: yn+1 = yn + h [k1 f (xn , yn ) + k2 f (xn + αh, yn + βhf (xn , yn ))] la cual es equivalente al algoritmo cuadrático de Taylor: h yn+1 = yn + h f (xn , yn ) + f (xn , yn ) 2 (2.7) (2.8) Igualando las ecuaciones 2.7 y 2.8 para resolver: k1 f (xn , yn ) + k2 f (xn + αh, yn + βhf (xn , yn )) = f (xn , yn ) + h f (xn , yn ) 2 (2.9) y expandiendo el segundo término del lado izquierdo en la ecuación anterior en una expansión lineal de Taylor, obtenemos: f (xn + αh, yn + βhf (xn , yn )) = f (xn , yn ) + αhfx (xn , yn ) + βhf (xn , yn )fy (xn , yn ) (2.10) Y ahora, sustituimos la ecuación 2.10 en la 2.9 para obtener: k1 f (xn , yn ) + k2 [f (xn , yn ) + αhfx (xn , yn ) + βhf (xn , yn )fy (xn , yn )] = f (xn , yn ) + h2 [f (xn , yn )fy (xn , yn )] (2.11) donde el nuevo lado derecho se obtiene de reemplazar f por fx + f fy y ası́ obtenemos tres ecuaciones: k1 + k2 = k2 α = k2 β 31 = 1 1 2 1 2 (2.12) (2.13) (2.14) c 1997–2006. Dr. Horacio Martı́nez Alfaro Métodos Numéricos Dado que se tienen 4 parámetros por determinar y solo 3 ecuaciones, se tiene una familia de soluciones en términos de uno de ellos (k1 , k2 , α y β). Si hacemos k2 = 0 como parámetro independiente, se obtiene la siguiente solución: k1 = α = β = 1 − k2 1 2k2 1 2k2 (2.15) (2.16) (2.17) y sustituyendo en la ecuación 2.7, obtenemos: yn+1 = yn + h [f (xn , yn ) + f (xn + h, yn + hf (xn , yn ))] 2 (2.18) Para simplificar un poco, podemos hacer xn + h = xn+1 y f (xn , yn ) = fn y ası́ simplificar la notación: yn+1 = yn + h [fn + f (xn+1 , yn + hfn )] 2 (2.19) que no es más que el método mejorado de Euler. Ejemplo 2.2 Ahora resolveremos la ecuación del ejemplo 2.2 utilizando el método de Runge–Kutta de segundo orden. Solución y(0.5) = = = y(1.0) = = y(1.5) = = y(0) + 0.5 [f (0, 2) + f (0 + 0.5, 2 + 0.5f (0, 2))] 2 0.5 [(4e0.8(0) − 0.5(2)) + f (0.5, 2 + 0.5f (0, 2))] 2 0.5 [3 + f (0.5, 3.5)] = 3.804325 2+ 2 0.5 y(0.5) + [f (0.5, 3.804325) + f (0.5 + 0.5, 3.804325 + 0.5f (0.5, 3.804325))] 2 6.316538 0.5 [f (1.0, 6.316538) + f (1.0 + 0.5, 6.316538 + 0.5f (1.0, 6.316538))] y(1.0) + 2 9.924068 2+ y(2.0) = y(2.5) = 15.196298 22.975938 y(3.0) = y(3.5) = 34.514920 51.676811 y(4.0) = 77.238524 Con Maple, lo anterior se puede realizar de la siguiente forma: > yS2:=<<0 | 2.0>>: h:=0.5: > for i to 8 do > x:=yS2[i,1]; y:=yS2[i,2]; > yS2 := <yS2, <x+h | y + h/2*(f(x,y) + f(x+h, y+h*f(x,y)))>>; > end do: Transpose(yS2); 32 c 1997–2006. Dr. Horacio Martı́nez Alfaro Métodos Numéricos 0 0.500000 1.000000 1.500000 2.000000 2.500000 3.000000 3.500000 4.000000 2.000000 3.804325 6.316538 9.924068 15.196298 22.975938 34.514920 51.676811 77.238524 La figura 2.2 muestra la solución exacta y la solución mediante este método. 70 60 50 40 30 20 10 0 1 2 3 4 Figura 2.2: Puntos de la solución de la ecuación diferencial mediante el método de Runge–Kutta de segundo orden y curva de la la solución exacta. 2.3.2. Runge–Kutta Cuarto Orden Este método trata de resolver ecuaciones diferenciales ordinarias de la forma mostrada en 2.1. La fórmula utilizada por este método1 se utiiliza para calcular la nueva aproximación yn+1 (no olvidar que aquı́ la variable independiente es x y la variable dependiente es y): 1 yn+1 = yn + (k1 + 2k2 + 2k3 + k4 ) 6 (2.20) donde k1 k2 = hf (xn , yn ) = hf (xn + h/2, yn + k1 /2) (2.21) (2.22) k3 k4 = hf (xn + h/2, yn + k2 /2) = hf (xn + h, yn + k3 ) (2.23) (2.24) Este método se basa en una expansión de Taylor truncada hasta términos de cuarto orden. En algunas ocasiones es llamado el método de Kutta–Simpson porque se reduce a la Regla de Simpson si y (x) es independiente de y. Esto es, si y (x) = f (x), tenemos: k1 k2 = = hf (xn ) hf (xn + h/2) (2.25) (2.26) k3 k4 = = hf (xn + h/2) hf (xn + h) (2.27) (2.28) y yn+1 = yn + 1 Ver h [f (xn ) + 4f (xn + h/2) + f (xn , yn )] 6 deducción en Fulks, W. (1978), Advanced calculus (Third Edition). John Wiley & Sons, N.Y., p. 331 33 (2.29) c 1997–2006. Dr. Horacio Martı́nez Alfaro Métodos Numéricos y si utilizamos un intervalo de h∗ = h/2, podemos escribir: yn+1 = yn + que es la Regla de Simpson 1 3 h∗ [f (xn ) + 4f (xn + h∗ ) + f (xn + 2h∗ )] 3 (2.30) para integración. Ejemplo 2.3 El problema es el mismo que el expuesto en el ejemplo 2.2. Solución Evaluamos las constantes del método para posteriormente obtener el valor del nuevo punto. k1 = 0.5f (0, 2) = 1.5 k2 k3 = 0.5f (0 + 0.5/2, 2 + 1.5/2) = 1.755306 = 0.5f (0 + 0.25, 2 + 1.755306/2) = 1.723392 k4 = 0.5f (0 + 0.5, 2 + 1.723392) = 2.052801 1 y(0.5) = y(0) + [1.5 + 2(1.755306 + 1.723392) + 2.052801] = 3.751700 6 el procedimiento se repite: (a) calcular las ki , (b) calcular el nuevo valor yk+1 , (c) calcular el nuevo valor xk+1 = xk + h, (d) parar cuando se haya llegado al lı́mite superior de integración. Lo anterior se puede realizar en Maple de la siguiente forma: > > > > > > > > > > > > yS3:=<<0 | 2>>: Ks:=<<0 | 0 | 0 | 0>>: h:=0.5: for k to 8 do x:=yS3[k,1]: y:=yS3[k,2]: k1 := h*f(x,y): k2 := h*f(x+h/2, y+k1/2): k3 := h*f(x+h/2, y+k2/2): k4 := h*f(x+h, y+k3): y1 := y + (k1 + 2*(k2 + k3) + k4)/6: yS3 := <yS3, <x+h | y1>>; Ks := <Ks, <k1 | k2 | k3 | k4>>; end do: <<’’k1’’|’’k2’’|’’k3’’|’’k4’’|’’x’’|’’y’’>, <Ks | yS3>>; k1 k2 k3 k4 0 0 0 0 1.500000 1.755306 1.723392 2.052801 2.045725 2.450597 2.399988 2.913160 2.902321 3.525013 3.447177 4.229679 4.213291 5.156796 5.038858 6.219407 6.194788 7.613670 7.436310 9.207758 9.170898 11.296451 11.030756 13.681449 13.626357 16.804186 16.406957 20.367558 20.285289 25.031408 24.438143 30.351520 x 0 0.500000 1.000000 1.500000 2.000000 2.500000 3.000000 3.500000 4.000000 La figura 2.3 muestra la solución exacta y la solución mediante este método. 34 y 2 3.751700 6.195042 9.707772 14.845106 22.428857 33.679984 50.416017 75.345336 c 1997–2006. Dr. Horacio Martı́nez Alfaro Métodos Numéricos 70 60 50 40 30 20 10 0 1 2 3 4 Figura 2.3: Solución de la ecuación diferencial mediante el método de Runge–Kutta de cuarto orden y la solución exacta. 2.4. Sistemas de Ecuaciones Diferenciales Las técnicas que se discutirán serán dos: 1. Técnicas que transforman la ecuación diferencial de orden mayor a un sistema de ecuaciones diferenciales de primer orden. La técnica es conocida como Espacio de Estado, y 2. Splines Cúbicos para ecuaciones diferenciales de segundo orden. 2.5. Espacio de Estado El método consiste en transformar una ecuación diferencial de orden p en p ecuaciones diferenciales de orden 1. Para comenzar, consideremos una ecuación diferencial de orden 2 (p = 2): ÿ(t) + α(t)ẏ(t) + β(t)y(t) = u(t) (2.31) Para obtener las 2 ecuaciones diferenciales de orden 1, se hará el siguiente cambio de variables: x1 (t) = x2 (t) = y(t) ẏ(t) (2.32) Una vez que tenemos la definición de estas nuevas variables, que denominaremos variables de estado, podemos derivarlas con respecto a t para obtener: ẋ1 (t) = ẋ2 (t) = ẏ(t) = x2 (t) ÿ(t) (2.33) y de la ecuación diferencial original (ecuación 2.31) podemos despejar ÿ(t) para obtener: ÿ(t) = −β(t)y(t) − α(t)ẏ + u(t) = −β(t)x1 (t) − α(t)x2 (t) + u(t) (2.34) para de esta forma sustituir en nuestra nueva representación con las nuevas variables x1 (t) y x2 (t): ẋ1 (t) = ẋ2 (t) = x2 (t) −β(t)x1 (t) − α(t)x2 (t) + u(t) 35 (2.35) c 1997–2006. Dr. Horacio Martı́nez Alfaro Métodos Numéricos y la respuesta que andamos buscando de este nuevo sistema de ecuaciones diferenciales es y(t) = x1 (t) (2.36) Las ecuaciones 2.35 y 2.36 se pueden expresar matricialmente de la siguiente forma: ẋ1 (t) 0 1 x1 (t) 0 = + u(t) −β −α 1 ẋ2 (t) x2 (t) y(t) = 1 0 x1 (t) x2 (t) (2.37) (2.38) y en forma matricial compacta ẋ(t) = Ax(t) + Bu(t) y(t) = Cx(t) con x(t) = x1 (t) x2 (t) 0 −β , A= 1 −α , B= (2.39) (2.40) 0 1 , C= 1 0 (2.41) Para el caso general, considere ahora la siguiente ecuación diferencial de orden p: (p) a0 y +a1 (p−1) y +a2 (p−2) y + · · · + ap−2 ÿ + ap−1 ẏ + ap y = b0 u (2.42) y haciendo el siguiente cambio de variables: x1 x2 x3 = y = ẏ = ÿ .. . xp−1 = xp = (2.43) (p−2) y (p−1) y El procedimiento a seguir es el mismo descrito para la ecuación diferencial de orden 2, tenemos (con a0 = 1): ⎡ ẋ1 ẋ2 .. . ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ ẋp−1 ẋp ⎤ ⎡ ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥=⎢ ⎥ ⎢ ⎦ ⎣ 0 0 .. . 1 0 .. . 0 −ap 0 −ap−1 y= 1 0 0 ··· ··· .. . 0 1 .. . 0 −ap−2 ⎡ x1 x ⎢ ⎢ 2 ··· 0 ⎢ . ⎣ .. 0 0 .. . ⎤⎡ x1 x2 .. . ⎥⎢ ⎥⎢ ⎥⎢ ⎥⎢ ⎥⎢ ··· 1 ⎦ ⎣ xp−1 · · · −a1 xp ⎤ ⎤ ⎡ 0 0 .. . ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥+⎢ ⎥ ⎢ ⎦ ⎣ 0 b0 ⎤ ⎥ ⎥ ⎥ ⎥u ⎥ ⎦ (2.44) ⎥ ⎥ ⎥ ⎦ xp La solución numérica a un sistema de ecuaciones diferenciales se realiza con el método de Euler o Runge– Kutta. 36 c 1997–2006. Dr. Horacio Martı́nez Alfaro Métodos Numéricos 2.5.1. Algoritmo de Runge–Kutta para Sistemas de Ecuaciones Diferenciales Dado que ahora tenemos p ecuaciones diferenciales de orden 1, existirán p variables que denotarán la solución al sistema. Para lograr lo anterior, manejaremos dos subı́ndices: el primero indicará la variable y el segundo indicará el número de la aproximación. Considere el sistema de ecuaciones diferenciales de la sección anterior (ecuación 2.44). Expresándolo como funciones, serı́a: x1 (t) = f1 (t, x1 , x2 , . . . , xp ) = f1 (t, x) .. . (2.45) xp (t) = fp (t, x) (2.46) Las condiciones iniciales las podemos expresar de la siguiente forma: (0) x1 = .. . α1 (2.47) x(0) p = αp (2.48) con la fórmula recursiva 1 x(j+1) = x(j) + [k1 + 2k2 + 2k3 + k4 ] 6 y las k’s ahora tomarán la siguiente forma: k1 = k2 = k3 = k4 = (i) hf (tj , x(j) ) → k1 = hfi (tj , x(j) ) h (j) 1 h (j) 1 (i) hf tj + , x + k1 → k2 = hfi tj + , x + k1 2 2 2 2 h (j) 1 h 1 (i) (j) hf tj + , x + k2 → k3 = hfi tj + , x + k2 2 2 2 2 (i) (j) (j) hf tj + h, x + k3 → k4 = hfi tj + h, x + k3 (2.49) (2.50) (2.51) (2.52) (2.53) donde i = 1, . . . , p. Ejemplo 2.4 Se tiene la siguiente ecuación diferencial con condiciones iniciales: ÿ + 2ẏ − 5ty = e−2t , y(0) = 1, ẏ(0) = 1 y se desea resolver para t ∈ (0, 1] con h = 0.1. Solución Dado que la ecuación diferencial es de orden 2, se tiene que x1 (t) = y(t) y x2 (t) = ẏ(t). Comparando con la ecuación 2.31, podemos definir: α(t) = 2, β(t) = −5t, u(t) = e−2t La representación en espacio de estado quedarı́a como 0 1 x1 (t) 0 ẋ1 (t) = + e−2t ẋ2 (t) x2 (t) 5t −2 1 37 c 1997–2006. Dr. Horacio Martı́nez Alfaro Métodos Numéricos con condiciones iniciales x1 (0) = x2 (0) = y(0) = 1 ẏ(0) = 1 Una vez expresada la ecuación diferencial en espacio de estado, podemos utilizar uno de los métodos descritos en las secciones anteriores (Euler, Runge–Kuta 2◦ y/o 4◦ orden). Solución por Euler Para este método, necesitamos definir nuestras funciones fi (t, x1 (t), x2 (t)) (que se obtienen de las ecuaciones de espacio de estado): f1 (t, x1 (t), x2 (t)) = f2 (t, x1 (t), x2 (t)) = x2 (t) (2.54) 5tx1 (t) − 2x2 (t) + e −2t (2.55) El método de Euler aplicado a las funciones anteriores resultarı́a en la siguiente forma: x1 (tk+1 ) = x2 (tk+1 ) = x1 (tk ) + hf1 (tk , x1 (tk ), x2 (tk )) x2 (tk ) + hf2 (tk , x1 (tk ), x2 (tk )) (2.56) (2.57) si la evaluación en tk la sustituimos como superı́ndice, podrı́amos representar las ecuaciones anteriores de la siguiente forma: (k+1) x1 (k+1) x2 (k) con fi (k) = x1 + hf1 (k) (k) (2.58) = (k) x2 (k) hf2 (2.59) + (k) = fi (tk , x1 , x2 ). Calculemos los primeros valores (k = 0): (1) x1 (0) = (1) x2 (0) (0) x1 + hf1 (t0 , x1 , x2 ) = 1 + 0.1f1 (0, 1, 1) = 1 + 0.1(1) = 1.1 (0) x2 = = + (0) (0) hf2 (t0 , x1 , x2 ) = 1 + 0.1f2 (0, 1, 1) = 1 + 0.1[5(0)(1) − 2(1) + e (2.60) −2(0) 0.9 ] (2.61) Para k = 1, tenemos: (2) x1 (1) (1) (1) = x1 + hf1 (t1 , x1 , x2 ) = 1.1 + 0.1f1 (0.1, 1.1, 0.9) = 1.1 + 0.1(0.9) = 1.19 (2) x2 = (1) x2 (2.62) + (1) (1) hf2 (t1 , x1 , x2 ) = 0.9 + 0.1f2 (0.1, 1.1, 0.9) = 0.9 + 0.1[5(0.1)(1.1) − 2(0.9) + e−2(0.1) ] = 0.8568730753 (2.63) y para k = 2, tenemos: (3) x1 (3) x2 (2) (2) (2) = = x1 + hf1 (t2 , x1 , x2 ) = 1.19 + 0.1f1 (0.2, 1.19, 0.8568730753) 1.19 + 0.1(0.8568730753) = 1.275687308 = (2) x2 = 0.8715304648 + (2) (2) hf2 (t2 , x1 , x2 ) (2.64) = 0.8568730753 + 0.1f2 (0.2, 1.19, 0.8568730753) (2.65) Si la evaluación de las funciones continúa de la forma anterior, obtenemos la tabla mostrada en la figura 2.4(a). La solución anterior se puede obtener con Maple de la siguiente forma: 38 c 1997–2006. Dr. Horacio Martı́nez Alfaro Métodos Numéricos > > > > > > f1:=(x1,x2,t)->x2; f2:=(x1,x2,t)->5*t*x1-2*x2+exp(-2*t); ee1:=<<0 | 1 | 1>>: h:=0.1: for k to 10 do t:=ee1[k,1]; x1:=ee1[k,2]; x2:=ee1[k,3]; ee1:=<ee1, <t+h | x1+h*f1(x1,x2,t) | x2+h*f2(x1,x2,t)>>; end do: ee1[2..11,1..3]; La figura 2.4(b) muestra la gráfica de la solución exacta y la obtenida por el método anterior. Las figuras 2.5(a) y 2.5(b) muestran soluciones para x1 y x2 para diferentes valores de h junto con la solución más exacta que se puede obtener mediante el método de Runge-Kutta cuarto-quinto orden de Fehlberg. 5 t 0 0.100000 0.200000 0.300000 0.400000 0.500000 0.600000 0.700000 0.800000 0.900000 1.000000 x1 (t) 1 1.100000 1.190000 1.275687 1.362840 1.457186 1.564413 1.690303 1.840959 2.023111 2.244489 x2 (t) 1 0.900000 0.856873 0.871530 0.943459 1.072268 1.258899 1.506562 1.821516 2.213786 2.697958 4 3 2 1 0 0.2 0.4 0.6 (b) x1 (t) = y(t) para h = 0.1 (a) Valores de las variables 0.8 1 Figura 2.4: Valores de la solución para las variables de estado y la solución de la ecuación diferencial original. 3 3 2.5 2.5 2 2 1.5 1.5 1 1 0 0.2 0.4 0.6 (a) x1 y x2 para h = 0.1 0.8 1 0 0.2 0.4 0.6 (b) x1 y x2 para h = 0.01 0.8 1 Figura 2.5: Solución a las variables de estado para diferentes valores de ancho de intervalo. Solución por Runge–Kutta Para este método, utilizaremos las fórmulas descritas en la sección 2.5.1. Las funciones que utilizará el método son las ecuaciones 2.54 y 2.55. 39 c 1997–2006. Dr. Horacio Martı́nez Alfaro Métodos Numéricos El orden del sistemas es 2; por lo tanto, las fórmula recursivas serán: (i) = k1 (i) k2 = (i) = k3 (i) = k4 (j+1) xi (0) = (j) (j) hfi (tj , x1 , x2 ), i = 1, 2 h (j) 1 (1) (j) 1 (2) hfi (tj + , x1 + k1 , x2 + k1 ), i = 1, 2 2 2 2 h (j) 1 (1) (j) 1 (2) hfi (tj + , x1 + k2 , x2 + k2 ), i = 1, 2 2 2 2 (j) (1) (j) (2) hfi (tj + h, x1 + k3 , x2 + k3 ), i = 1, 2 1 (i) (j) (i) (i) (i) k1 + 2k2 + 2k3 + k4 , i = 1, 2 xi + 6 (2.66) (2.67) (2.68) (2.69) (2.70) (0) Para j = 0, t0 = 0, x1 = 1 y x2 = 1: (1) k1 (2) k1 (1) k2 (2) k2 (1) k3 (2) k3 (0) (0) = hf1 (t0 , x1 , x2 ) = = 0.1f1 (0, 1, 1) 0.1 = = hf2 (t0 , x1 , x2 ) 0.1f2 (0, 1, 1) = −0.1 (0) (2.71) (0) (2.72) h (0) 1 (1) (0) 1 (2) , x + k1 , x2 + k1 ) 2 1 2 2 = 0.1f1 (0.05, 1.05, 0.95) = hf1 (t0 + = 0.095 (2.73) h (0) 1 (1) (0) 1 (2) , x + k1 , x2 + k1 ) 2 1 2 2 = 0.1f2 (0.05, 1.05, 0.95) = −0.073266 (2.74) h (0) 1 (1) (0) 1 (2) , x + k2 , x2 + k2 ) 2 1 2 2 = 0.1f1 (0.05, 1.0475, 0.963367) = 0.096337 (2.75) = hf2 (t0 + = hf1 (t0 + h (0) 1 (1) (0) 1 (2) , x + k2 , x2 + k2 ) 2 1 2 2 = 0.1f2 (0.05, 1.0475, 0.963367) = hf2 (t0 + = −0.076002 (1) k4 (2) k4 (2.76) (0) (1) (0) (2) = hf1 (t0 + h, x1 + k3 , x2 + k3 ) = 0.1f1 (0.1, 1.096337, 0.923998) = 0.0924 = = hf2 (t0 + h, x1 + k3 , x2 + k3 ) 0.1f2 (0.1, 1.096337, 0.923998) = −0.04811 (2.77) (0) (1) (0) (2) (2.78) 40 c 1997–2006. Dr. Horacio Martı́nez Alfaro Métodos Numéricos (1) x1 = = = (1) x2 = = = (0) x1 + 1 (1) (1) (1) (1) k1 + 2k2 + 2k3 + k4 6 1 [0.1 + 2(0.095) + 2(0.096337) + 0.0924] 6 1.095846 1 (2) (0) (2) (2) (2) k1 + 2k2 + 2k3 + k4 x2 + 6 1 1 + [−0.1 + 2(−0.073266) + 2(−0.076002) − 0.04811] 6 0.925559 1+ (2.79) (2.80) El procedimiento se repite para j = 1, 2, . . . , 10 y se obtienen los siguientes valores de las k s para xj1 (tabla 2.1) y xj2 (tabla 2.2). La figura 2.6 muestra la gráfica de la solución numérica más exacta posible para x1 y x2 y los puntos obtenidos mediante este método. 3 2.5 2 1.5 1 0 0.2 0.4 0.6 0.8 1 Figura 2.6: Solución para las variables de estado. Tabla 2.1: Solución para la primera variable de estado. t 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 x1 1 1.095845527 1.186861729 1.278384263 1.375866349 1.484920948 1.611466199 1.761961852 1.943733785 2.165394141 2.437376282 k1 0 0.1 0.09255589258 0.09037294423 0.09358681408 0.1023175496 0.1167817807 0.1373883797 0.1648263472 0.2001548400 0.2449063271 k2 0 0.09500000000 0.09013357090 0.09062155868 0.09656007283 0.1080911030 0.1255045117 0.1493275058 0.1804110297 0.2200235143 0.2699635570 41 k3 0 0.09633668709 0.09152958962 0.09204374292 0.09800903793 0.1095953202 0.1271162227 0.1511208944 0.1824829268 0.2224968943 0.2729941880 k4 0 0.09239978676 0.09021499921 0.09343165860 0.1021674848 0.1166371999 0.1372482601 0.1646887422 0.2000173397 0.2447664819 0.3010710319 c 1997–2006. Dr. Horacio Martı́nez Alfaro Métodos Numéricos Tabla 2.2: Solución para la segunda variable de estado. t 0 .1 .2 .3 .4 .5 .6 .7 .8 .9 1.0 2.5.2. x2 1 .9255589258 .9037294423 .9358681408 1.023175496 1.167817807 1.373883797 1.648263472 2.001548400 2.449063271 3.012153065 k1 0 -.1 -.04844643359 .00497228900 .05946517491 .1154710670 .1744546197 .2387825215 .3116936500 .3973734858 .5011445981 k2 0 -.07326625820 -.02052605923 .03341597377 .08844447698 .1455554129 .2066888405 .2746502942 .3531315916 .4468410858 .5617572179 k3 0 -.07600213240 -.02340893373 .03058714367 .08580670688 .1431965034 .2046647941 .2730036250 .3519099249 .4461164193 .5616470479 k4 0 -.04810966389 .00533951790 .05985366721 .1158765870 .1748789616 .2392340523 .3121876945 .3979328839 .5018007305 .6305856295 Splines Cúbicos Se tiene el siguiente problema: u(t) = y + α(t)y + β(t)y y(a) y (a) (2.81) = σ = η (2.82) (2.83) y se desea resolver para t ∈ [a, b] con un ancho de intervalo constante h = ti+1 − ti (distancia entre dos puntos consecutivos). El objetivo del método es suponer que la forma de la función resultante por intervalos es la de un Spline Cúbico: y(t) ≡ Pi (t) = ai (t − ti )3 + bi (t − ti )2 + ci (t − ti ) + di , ti ≤ t ≤ ti+1 (2.84) Dado que la ecuación diferencial involucra derivadas de la función que estamos buscando (y(t) = Pi (t)), necesitamos encontrar sus derivadas: Pi (t) = Pi (t) = Pi (t) = ai (t − ti )3 + bi (t − ti )2 + ci (t − ti ) + di 3ai (t − ti )2 + 2bi (t − ti ) + ci (2.85) (2.86) 6ai (t − ti ) + 2bi (2.87) Al evaluar para cada punto intermedio, ti+1 , tenemos: ai h3 + bi h2 + ci h + di = di+1 (2.88) 3ai h + 2bi h + ci = ci+1 (2.89) 6ai h + 2bi = 2bi+1 (2.90) 2 y posteriormente sustituyendo los resultados anteriores en la ecuación diferencial (ecuación 2.81), obtenemos: y + α(t)y + β(t)y = u(t) (2.91) u(ti+1 ) (2.92) 2 (6ai h + 2bi ) + α(ti+1 )(3ai h + 2bi h + ci ) + β(ti+1 )(ai h3 + bi h2 + ci h + di ) = Sabemos que tenemos n splines y tendremos 4n − 2 incógnitas y ecuaciones. Las últimas 2 ecuaciones se obtendrán de los extremos en donde sólo se requiere que se cumpla la ecuación diferencial, es decir, en t1 y en tn+1 . 42 c 1997–2006. Dr. Horacio Martı́nez Alfaro Métodos Numéricos Las cuatro ecuaciones que se tienen que cumplir en cada punto intermedio son: ai h3 + bi h2 + ci h + di 3ai h2 + 2bi h + ci = = 6ai h + 2bi = ai [6h + 3h α(ti+1 ) + h β(ti+1 )] + 2 di+1 ci+1 (2.93) (2.94) 2bi+1 (2.95) f (ti+1 ) (2.96) 3 bi [2 + 2hα(ti+1 ) + h2 β(ti+1 )] + ci [α(ti+1 ) + hβ(ti+1 )] + di β(ti+1 ) = y en los extremos (t1 y tn+1 ) es evaluar la ecuación 2.92 en t1 y tn+1 , respectivamente; obteniendo en t = t1 : 2b1 + c1 α(t1 ) + d1 β(t1 ) = f (t1 ) (2.97) La solución de ecuaciones diferenciales de este tipo mediante splines cúbicos se puede entender mejor con un ejemplo. Ejemplo 2.5 Se tiene la siguiente ecuación diferencial: ÿ + 2ẏ − 5ty = e−2t , y(0) = 1, ẏ(0) = 1 y se desea resolver para t ∈ (0, 1] con h = 0.5. Solución Dado que h = 0.5, n = 2 y el número de incógnitas que tendremos son 4n = 8. De acuerdo a la ecuación, tenemos: σ=1 η=1 (2.98) α(t) = 2 β(t) = −5t f (t) = e−2t Las ecuaciones que se generan con los datos son: d1 c1 = σ = η (2.99) (2.100) Sabemos que se van a generar 3 puntos (t1 , t2 y t3 ) y sólo requerimos que en los puntos intermedios se cumplan las condiciones de splines cúbicos para la ecuación diferencial, es decir, sólo en t2 . Ası́ pues, comenzamos con la ecuación diferencial: a1 [6h + 3h2 α(t2 ) + h3 β(t2 )] + b1 [2 + 2hα(t2 ) + h2 β(t2 )] + c1 [α(t2 ) + hβ(t2 )] + d1 β(t2 ) = 2 f (t2 ) (2.101) e−2(0.5) 0.36788 (2.102) (2.103) 3 a1 [6(0.5) + 3(0.5) (2) + (0.5) (−5)(0.5)] + b1 [2 + 2(0.5)2 + (0.5)3 (−5)0.5] + c1 [2 + 0.5(−5)0.5] + d1 (−5)0.5 = 4.1875a1 + 3.375b1 + 0.75c1 − 2.5d1 = En seguida, las 3 restricciones de splines cúbicos: a1 h3 + b1 h2 + c1 h + d1 0.125a1 + 0.25b1 + 0.5c1 + d1 − d2 43 = d2 = 0 (2.104) c 1997–2006. Dr. Horacio Martı́nez Alfaro Métodos Numéricos 3a1 h2 + 2b1 h + c1 = c2 0.75a1 + b1 + c1 − c2 = 0 6a1 h + 2b1 3a1 + 2b1 − 2b2 (2.105) = 2b2 = 0 (2.106) Por último, generar las ecuaciones de los nodos externos en donde sólo se requiere que la ecuación diferencial se cumpla: Para t = t1 : 2b1 + c1 α(t1 ) + d1 β(t1 ) 2b1 + 2c1 = f (t1 ) = 1 (2.107) Para t = t3 es la ecuación 2.96: 3.875a2 + 2.75b2 − 0.5c2 − 5d2 = 0.1353353 (2.108) Una vez teniendo todas las ecuaciones, podemos representarlo en forma matricial: ⎡ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ ⎤ ⎡ ⎤⎡ ⎤ 0 0 0 1 0 0 0 0 1 a1 ⎥ ⎢ ⎥ ⎢ 0 0 1 0 0 0 0 0 ⎥ 1 ⎥ ⎢ b1 ⎥ ⎢ ⎥ ⎥ ⎢ ⎥ ⎢ 4.1875 3.375 0.75 −2.5 0 0 0 0 ⎥ ⎢ c1 ⎥ ⎢ 0.36788 ⎥ ⎥ ⎥ ⎢ ⎥ ⎢ 0.125 0.25 0.5 1 0 0 0 −1 ⎥ 0 ⎥ ⎢ d1 ⎥ = ⎢ ⎥ ⎥ ⎢ ⎥ ⎥ ⎢ 0.75 1 1 0 0 0 −1 0 ⎥ ⎢ a2 ⎥ ⎢ 0 ⎥ ⎥ ⎢ ⎥ ⎥ ⎢ 3 2 0 0 0 −2 0 0 ⎥ ⎢ b2 ⎥ ⎢ 0 ⎥ ⎦ ⎣ ⎦ ⎦ ⎣ c2 0 2 2 0 0 0 0 0 1 d2 0 0 0 0 3.875 2.75 −0.5 −5 0.1353353 (2.109) cuya solución es: c1 = 1 d1 = 1 a1 = 0.90874733 b1 = −0.5 a2 = 1.49561287 b2 = 0.863120994 c2 = 1.1815605 d2 = 1.488593416 (2.110) La solución anterior dá los coeficientes de los siguientes polinomios: P1 (t) = P2 (t) = a1 (t − t1 )3 + b1 (t − t1 )2 + c1 (t − t1 ) + d1 , a2 (t − t2 )3 + b2 (t − t2 )2 + c2 (t − t2 ) + d2 , t1 ≤ t ≤ t 2 t2 ≤ t ≤ t 3 (2.111) (2.112) y ambos polinomios forman la solución para y(t). La gráfica de la solución (indicando el valor de la función en los nodos) se muestra en la figura 2.7. La solución obtenida mediante este método está prácticamente sobre la solución exacta que se onbtendrı́a mediante Runge-Kutta 4◦ orden, con la ventaja de que el método de Splines Cúbicos no requiere un paso (h) muy pequeño para dar una solución muy exacta. 44 c 1997–2006. Dr. Horacio Martı́nez Alfaro Métodos Numéricos 2.4 2.2 2 1.8 1.6 1.4 1.2 1 0 0.2 0.4 t 0.6 0.8 1 Figura 2.7: Solución mediante splines cúbicos y solución mediante Maple. 45