Está en la página 1de 18

Matemticas Especiales Daniel H.

Cortes C

Mtodos Numricos para Ecuaciones Diferenciales Ordinarias

Introduccin

Muchos fenmenos fsicos se pueden describir mediante ecuaciones diferenciales


ordinarias. Por ejemplo la cada libre de un cuerpo en un medio viscoso, el movimiento de
un sistema masa resorte, la oscilacin de un pndulo, entre muchos otros. En algunos casos
la ecuacin o el sistema de ecuaciones diferenciales es lineal y su solucin analtica puede
encontrarse fcilmente mediante varios mtodos matemticos. Sin embargo, existen
fenmenos que son descritos por ecuaciones diferenciales no son lineales, por ejemplo, la
oscilacin del pndulo.

Una alternativa para solucionar ecuaciones diferenciales lineales o no lineales son los
mtodos numricos. Los mtodos Runge-Kutta estn entre los ms utilizados para la
solucin de estos problemas. Aunque existen otros mtodos numricos para la solucin de
ecuaciones diferenciales ordinarias como el mtodo de los residuos ponderados y las
diferencias finitas, estos mtodos utilizan algoritmos complicados y algunos estn
restringidos a ecuaciones diferenciales lineales. Debido a que los mtodos Runge-Kutta
son ms sencillos y se pueden aplicar a una gran variedad de problemas, en este curso no se
incluirn otros mtodos.

Los mtodos Runge-Kutta tienen muchas variaciones. Por ejemplo, estn los mtodos de
paso fijo, de paso variable, de orden superior, etc. Debido a las limitaciones de tiempo, en
este curso se dictarn los mtodos ms comunes y bsicos y queda por parte de los
estudiantes estudiar las alternativas restantes.

Ecuaciones Diferenciales Ordinarias

La ecuacin que describe las vibraciones libres de un sistema masa resorte con
amortiguamiento es:

d 2x dx
m 2
+ c + kx = 0 , (5.1)
dt dt

1
Matemticas Especiales Daniel H. Cortes C

donde m es masa y c es el coeficiente de amortiguamiento y k es la constantes del resorte.


Esta ecuacin, la cual se compone de una funcin no conocida y sus derivadas, se
denomina ecuacin diferencial. La cantidad a la cual x es derivada, t, se llama Variable
Independiente. Cuando la funcin slo involucra una variable dependiente, la ecuacin es
llamada Ecuacin Diferencial Ordinaria. Esto contrasta con las Ecuaciones Diferenciales
Parciales en las que la funcin desconocida es funcin de varias variables.

Las ecuaciones diferenciales tambin se clasifican segn su orden, el cual est determinado
por la derivada de ms alto orden presente en la ecuacin. Por ejemplo, la ecuacin (5.1) es
d 2x
una ecuacin diferencial ordinaria de segundo orden, debido al trmino 2 .
dt

Las ecuaciones diferenciales ordinarias de orden superior se pueden descomponer en un


sistema de ecuaciones diferenciales de primer orden. Para mostrar este procedimiento se
utilizar el siguiente ejemplo.

Ejemplo 1

Descomponga la siguiente ecuacin diferencial ordinaria en un sistema de


ecuaciones de primer orden.

y ' ' '+5 y ' '+6 y '+10 y = 0

Solucin

La ecuacin anterior es una ecuacin diferencial ordinaria de orden 3. Si se define:

y ' = g y y ' ' = g ' = q , la ecuacin diferencial se puede escribir mediante el siguiente
sistema de ecuaciones:

q '+5q + 6 g + 10 y = 0
g'= q
y' = g

El sistema anterior se compone de tres ecuaciones cada una de primer orden.

Ecuaciones diferenciales ordinarias lineales y no lineales

Se dice que una ecuacin diferencial ordinaria es lineal cuando la funcin o sus derivadas
estn multiplicadas solamente por funciones de la variable independiente. Cuando en la
ecuacin diferencial se encuentran potencias de la funcin o sus derivadas y/o
multiplicaciones entre las derivadas la ecuacin es no lineal.

2
Matemticas Especiales Daniel H. Cortes C

Un ejemplo de una ecuacin diferencial ordinaria no lineal se observa en la ecuacin de


movimiento del pndulo (figura 5.1).

Figura 5.1. Pndulo Simple

La ecuacin de movimiento del pndulo est dada por la ecuacin (5.2). En la cual el
trmino sen( ) hace que la ecuacin sea no lineal.

d 2 g
+ sen( ) = 0 (5.2)
dt 2 L

Si se considera que el ngulo slo toma valores pequeos, el trmino sen( ) puede
aproximarse a . Por lo tanto la ecuacin diferencial no lineal (5.2) se convierte en una
lineal, as:

d 2 g
+ = 0. (5.3)
dt 2 L

Aunque la linearizacin es una herramienta muy valiosa para resolver problemas en


ingeniera, no es adecuada en algunas situaciones. Por ejemplo, cuando se quiere analizar
el movimiento del pndulo para grandes desplazamientos. En estos casos los mtodos
numricos ofrecen una alternativa fcil para obtener la solucin aproximada de este
problema.

3
Matemticas Especiales Daniel H. Cortes C

Mtodos Runge-Kutta

Todos los mtodos que se vern en esta seccin se aplicarn a la solucin se ecuaciones
diferenciales ordinarias de primer orden, ya que todas la ecuaciones diferenciales ordinarias
se pueden descomponer en sistema de ecuaciones diferenciales de primer orden. En
general las ecuaciones diferenciales de primer orden se puede expresar de la forma:

dy
= f ( x, y ) , (5.4)
dx

con condiciones de borde y ( x0 ) = y 0 .

La base de los mtodos Runge Kutta son las series de Taylor, la cual nos permite
encontrar el valor de una funcin en punto x si se conocen los valores de la funcin y sus
derivadas en un punto a. La serie de Taylor se expresa de la siguiente manera:

1 1
y ( x) = y (a ) + y ' ( x)( x a ) + y ' ' (a )( x a ) 2 + K + y n (a )( x a ) n . (5.5)
2! n!

El mtodo Runge-Kutta ms simple es el mtodo de Euler, el cual toma solamente los dos
primeros trminos de la serie de Taylor.

Mtodo de Euler

En el mtodo de Euler se divide el rango en el cual se quiere conocer la solucin en


intervalos de longitud h y se halla el valor de la funcin al final de cada uno de los
intervalos (Figura 5.2). Si se consideran los dos primeros trminos de la serie de Taylor, el
valor de la funcin en los puntos x1 y x2 se puede obtener de forma aproximada de la
siguiente manera:

y1 = y ( x1 ) = y 0 + f ( x 0 , y 0 )h ,
y 2 = y1 + f ( x1 , y1 )h ,

y para el trmino i simo se tiene:

y i = y i 1 + f ( xi 1 , y i 1 )h . (5.6)

El mtodo de Euler se puede ilustrar grficamente mediante la figura 5.3. El error que se
induce en la solucin mediante el mtodo de Euler se debe a que slo se toman los dos
primeros trminos de la serie de Taylor, por lo tanto el error de truncamiento es
proporcional a h 2 (figura 5.4), es decir:
y i = y i 1 + f i 1 h + Oh 2 . (5.7)

4
Matemticas Especiales Daniel H. Cortes C

Figura 5.2 Divisin del rango en que se desea conocer la solucin

Figura 5.2 Mtodo de Euler

Figura 5.3 Error en el mtodo de Euler

5
Matemticas Especiales Daniel H. Cortes C

Este mtodo puede ser fcilmente programado para obtener la solucin a cualquier
problema. A continuacin se observa un programa hecho en Matlab que soluciona
ecuaciones diferenciales ordinarias de primer orden utilizando el mtodo de Euler:

function y = euler(x0,y0,xf,h)
x = x0:h:xf; % arreglo con los valores de x
y = zeros(1,length(x)); % arreglo que va a contener los valores de y
y(1) = y0; % se asigna la condicin inicial en la posicin 1
for i = 2:length(x)
y(i)=y(i-1) + pendiente(x(i-1),y(i-1))*h;
end
plot(x,y,'r-*')

donde en la lnea 6 la funcin pendiente es un programa con el cual se obtiene el valor de


la funcin f i 1 de la ecuacin (5.6).

Ejemplo 2

Solucionar de forma numrica y analtica la ecuacin diferencial ordinaria:

dy
= 2 x 3 + 12 x 2 20 x + 8.5
dx

con condiciones de iniciales y(0) = 1 y donde x vara de 0 a 4.

Solucin

La solucin analtica en este caso puede ser fcilmente hallada mediante integracin
directa, as:

y = 0.5 x 4 + 4 x 3 10 x 2 + 8.5 x + 1 .

La funcin pendiente se puede programar de la siguiente manera:

function f = pendiente(x,y)
f = -2*x^3 + 12*x^2 - 20*x + 8.5;

Para h = 0.5 y h = 0.1 se realiz la siguiente comparacin:

6
Matemticas Especiales Daniel H. Cortes C

En donde se puede observar el efecto que tiene el paso sobre la aproximacin de la


solucin.

Mtodo de Hen

El mtodo de Euler se conoce como un mtodo predictor solamente, ya que no realiza una
correccin de los valores encontrados. El mtodo de Hen es una mejora al mtodo de
Euler, el cual incluye correcciones del valor yi encontrado en cada paso.

El mtodo de Hen se puede resumir en los siguientes pasos:

1. realizar una prediccin inicial del valor yi usando el mtodo de Euler


2. calcular la pendiente (fi) en el punto xi
3. calcular el promedio de las pendientes fi-1 y fi
4. Predecir nuevamente el valor de yi usando esta nueva pendiente
5. Repetir los pasos 2, 3 y 4 las veces que se desee

El valor de la funcin en el punto x1 se puede obtener de forma aproximada de la mediante


el mtodo de Hen as:

y10 = y 0 + f ( x 0 , y 0 ) h , (Prediccin inicial) (5.8)


f ( x0 , y 0 ) + f ( x1 , y10 )
y11 = y 0 + h , (Primera correccin) (5.9)
2
f ( x0 , y 0 ) + f ( x1 , y11 )
y12 = y 0 + h , (Segunda correccin) (5.10)
2

7
Matemticas Especiales Daniel H. Cortes C

donde el superndice indica el nmero de correcciones realizadas. En forma general, el


mtodo de Hen se puede formular de la siguiente manera:

y i0 = y i 1 + f ( xi 1 , y i 1 ) h , (Prediccin) (5.11)
n 1
f ( xi 1 , y i 1 ) + f ( xi , y )
y in = y i 1 + i
h . (n-sima correccin) (5.12)
2

Aunque el valor exacto de la funcin en punto xi se alcanza cuando las correcciones son
infinitas1, en la prctica no es posible realizar ese nmero de correcciones, por lo tanto se
debe definir un criterio el cual nos indique cuando se ha obtenido una valor suficientemente
exacto. Un criterio comnmente usado es el siguiente:

yin y in 1
> 100% . (5.13)
y in

Este criterio nos indica que las correcciones se realizarn hasta que la diferencia porcentual
entre las dos ltimas correcciones sean menores que un valor definido por el usuario. Un
programa hecho en Matlab que soluciona ecuaciones diferenciales ordinarias de primer
orden utilizando el mtodo de Hen puede ser:

function y = heun(x0,y0,xf,h,e)
x = x0:h:xf;
y = zeros(1,length(x));
y(1) = y0;
for i = 2:length(x)
er = 100;
y0 = y(i-1) + pendiente(x(i-1),y(i-1))*h;
while er > e
y(i) = y(i-1) + (pendiente(x(i-1),y(i-1)) + pendiente(x(i),y0))*h/2;
er = abs((y(i) - y0)/y(i))*100
y0 = y(i);
end
end
plot(x,y,'+-')

Una comparacin del mtodo de Hen con el mtodo de Euler usando la ecuacin
diferencial del ejemplo 2 se muestra en la Figura 5.4.

1
Esto ocurrira siempre que y dependa de y. En caso contrario, las correcciones no tendran ningn efecto
sobre la precisin de la solucin.

8
Matemticas Especiales Daniel H. Cortes C

Figura 5.4. Comparacin entre los mtodos de Euler y Hen

Mediante esta comparacin se puede observar que el mtodo de Hen es ms preciso an


cuando se utiliza el mismo paso (h = 0.5).

Mtodo General

Los mtodos Runge-Kutta se pueden escribir de forma general de la siguiente manera:

y i = y i 1 + ( xi 1 , y i 1 , h)h , (5.14)

donde ( xi 1 , yi 1 , h) se conoce como funcin de incremento, la cual puede interpretarse


como una pendiente equivalente sobre el intervalo. La funcin de incremento se puede
escribir as:

= a1 k1 + a 2 k 2 + L + a n k n , (5.15)

donde n representa el orden mtodo, los ai son constantes y los ki se definen de la siguiente
manera:

k1 = f ( xi 1 , y i 1 )
k 2 = f ( xi 1 + p1 h , y i 1 + q11 k1 h)
(5.16)
k 3 = f ( xi 1 + p 2 h , y i 1 + q 21 k1 h + q 22 k 2 h)
k n = f ( xi 1 + p n 1 h , y i 1 + q n 1,1 k1 h + L + q n 1,n 1 k n 1 h),

9
Matemticas Especiales Daniel H. Cortes C

donde, p y q son constantes. El mtodo de Euler (5.6) es un mtodo Runge-Kutta de primer


orden donde, es decir = a1 k1 , donde a1 = 1 . Por lo tanto:

y i = y i 1 + ( xi 1 , y i 1 , h)h = y i 1 + a1 k1 h = y i 1 + f ( xi 1 , y i 1 )h . (5.17)

El mtodo de Hen (5.11)-(5.12), cuando usa una sola correccin (n = 1), se puede
considerar como un mtodo Runge-Kutta de segundo orden. En este caso a1 = a2 = 1/2 y
p1 = q11 = 1. Por lo tanto la ecuacin (5.14) se puede escribir de la siguiente manera:

y i = y i 1 + (a1 k1 + a 2 k 2 )h
= y i 1 + ( 1 2 f ( xi 1 , y i 1 ) + 1 2 f ( xi 1 + h , y i 1 + f ( xi 1 , y i 1 )h) )h (5.18)
f ( xi 1 , y i 1 ) + f ( xi , y i0 )
= y i 1 + h
2

El orden de los mtodos Runge-Kutta est relacionado con el error de truncamiento. Por
ejemplo, para los mtodos de segundo orden el error de truncamiento es Oh 3 , en general se
puede decir que un mtodo Runge-Kutta es orden n tiene un error de truncamiento igual a
Oh n +1 .

Mtodos Runge-Kutta de Cuarto Orden

El mtodo Runge-Kutta ms popular de cuarto orden se conoce como mtodo RK clsico de


cuarto orden. Este mtodo se define de la siguiente manera:

1
y i = y i 1 + (k1 + 2k 2 + 2k 3 + k 4 )h , (5.19)
6

donde,

k1 = f ( xi 1 , y i 1 )
k 2 = f ( xi 1 + h 2 , y i 1 + k1 h 2)
. (5.20)
k 3 = f ( xi 1 + h 2 , y i 1 + k 2 h 2)
k 4 = f ( xi , y i 1 + k 3 h)

Un programa en Matlab que implementa el mtodo de Runge-Kutta clsico de cuarto orden


se muestra a contiuacin:

function y = RK4(x0,y0,xf,h)
x=x0:h:xf;
y = zeros(1,length(x));
y(1)=y0;

10
Matemticas Especiales Daniel H. Cortes C

for j = 2:length(x)
k1 = pendiente(x(j-1),y(j-1));
k2 = pendiente(x(j-1)+h/2,y(j-1)+h*k1/2);
k3 = pendiente(x(j-1)+h/2,y(j-1)+h*k2/2);
k4 = pendiente(x(j),y(j-1)+k3*h);
y(j) = y(j-1) + (k1 + 2*k2 + 2*k3 + k4)*h/6;
end
plot(x,y,'o-')

Una comparacin entre este mtodo y el de Euler y Hen utilizando el problema del
ejemplo 2 se puede observar en la Figura 5.4.

Figura 5.5. Comparacin entre los mtodos Euler, Hen y Runge- Kutta 4 orden clsico

En la grfica anterior puede observarse la gran precisin del mtodo RK4, lo que justifica
su popularidad.

Mtodos Adaptativos de Runge-Kutta

Todos los mtodos observados hasta el momento utilizan paso constante. Esta
caracterstica puede ser una desventaja en algunas ocasiones. Por ejemplo cuando la
solucin de la ecuacin sufre un cambio brusco (Figura 5.6), donde los mtodos de paso
constantes pueden generar errores importantes. Otra desventaja de los mtodos de paso
constante se presenta cuando la solucin se caracteriza por tener tramos con pendiente casi
constante (Figura 5.6); en estos tramos podra usarse un paso ms grande reduciendo el
tiempo de clculo sin prdida de precisin.

11
Matemticas Especiales Daniel H. Cortes C

Figura 5.6. Funcin con cambios sbitos de pendiente

Un mtodo que implementa el cambio adaptativo del tamao del paso es el mtodo Runge-
Kutta Fehlberg, el cual realiza dos predicciones con mtodos quinto y cuarto orden y de
acuerdo a la diferencia entre las predicciones actualiza el paso. Aunque alguien podra
pensar que se esta duplicando el trabajo cuando se realizan dos predicciones para el mismo
punto, el mtodo RK Fehlberg utiliza las constantes ki halladas en la prediccin de quinto
orden para realizar la prediccin de cuarto orden, reduciendo considerablemente los
clculos necesarios. El mtodo RK de quinto orden utilizado es el siguiente:

2825 18575 13525 277 1


y i = y i 1 + k1 + k3 + k4 + k 5 + k 6 h , (5.21)
27648 48384 55296 14336 4

donde,

k1 = f ( xi 1 , yi 1 )
k 2 = f ( xi 1 + h 5 , yi 1 + k1h 5)
k 3 = f ( xi 1 + 3h 10 , y i 1 + 3k1 h 40 + 9k 2 h 40)
k 4 = f ( xi 1 + 3h 5 , yi 1 + 3k1h 10 9k 2 h 10 + 6k 3 h 5)
k 5 = f ( xi 1 + h , yi 1 11k1 h 54 + 5k 2 h 2 70k 3 h 27 + 35k 4 h 27)
k 6 = f ( xi 1 + 7h 8 , yi 1 + 1631k1 h 55296 + 175k 2 h 512 + 575k 3 h 13824
+ 44275k 4 h 110592 + 253k 5 h 4096)

12
Matemticas Especiales Daniel H. Cortes C

El mtodo de cuarto orden est dado por la siguiente expresin:

37 250 125 512


y i = y i 1 + k1 + k3 + k4 + k 6 h , (5.22)
378 621 594 1771

donde las constantes ki son las mismas que las del mtodo de quinto orden.

Una estrategia para disminuir el paso si es muy grande o aumentarlo si es muy pequeo es
la siguiente:

nuevo
h nuevo = hactual , (5.23)
actual
donde

= y i( qu int o ) y i( cuarto ) . (5.24)

La constante de la ecuacin (5.24) se toma igual a 0.2 cuando se quiere aumentar el


tamao del paso y se toma como 0.25 para disminuirlo. Un programa en Matlab que
implementa este mtodo se presenta a continuacin:

function y = RKadapt(x0,y0,xf,hi,dd)
x(1) = x0;
y(1) = y0;
i = 1;
while x(i) < xf
k(1) = pend(x(i),y(i));
k(2) = pend(x(i)+hi/5,y(i)+k(1)*hi/5);
k(3) = pend(x(i)+3*hi/10,y(i) + 3*k(1)*hi/40 + 9/40*k(2)*hi);
k(4) = pend(x(i)+3*hi/5,y(i) + 3*k(1)*hi/10 - 9/10*k(2)*hi + 6/5*k(3)*hi);
k(5) = pend(x(i)+hi,y(i) - 11*k(1)*hi/54 + 5/2*k(2)*hi - 70/27*k(3)*hi + 35/27*k(4)*hi);
k(6) = pend(x(i)+7/8*hi,y(i) + 1631*k(1)*hi/55296 + 175/512*k(2)*hi + 575/13824*k(3)*hi +
44275/110592*k(4)*hi + 253/4096*k(5)*hi);
y4 = y(i) + hi*k*[37/378;0;250/621;125/594;0;512/1771];
y5 = y(i) + hi*k*[2825/27648;0;18575/48348;13525/55296;277/14336;1/4];
err = abs(y4-y5);
if err > dd
hi = hi*(dd/err)^0.25;
else
y(i+1)=y5;
hi = hi*(dd/err)^0.2;
x(i+1)=x(i)+hi;
i = i + 1;
end
end
plot(x,y)
grid on
xlabel('x')
ylabel('y')

13
Matemticas Especiales Daniel H. Cortes C

Una comparacin donde se ve el efecto de la variacin del paso se puede observar mediante
la solucin de la siguiente ecuacin diferencial:

dy
+ 0.6 y = 10e ( x 2 ) /[ 2 ( 0.075 ) ] ,
2 2

dx

con y (0) = 0.5 . Para h = 0.5 y dd = 0.00005 (ver programa) la comparacin entre este
mtodo y el mtodo clsico de RK de cuarto orden se puede observar en la figura 5.7.

Figura 5.7. Comparacin entre RK4 clsico y adaptativo.

Simulink

El programa Matlab tiene una poderosa herramienta para la solucin de ecuaciones


diferenciales ordinarias llamada Simulink. Para acceder a esta herramienta slo es
necesario escribir la palabra simulink en la lnea de comando y el men principal aparecer
en una nueva ventana (Figura 5.8). La solucin de problemas en Simulink consta de dos
pasos. Primero se crea un modelo usando bloques mediante el editor y luego se ajustan los
parmetros de la solucin.

14
Matemticas Especiales Daniel H. Cortes C

Figura 5.8. Men principal de Simulink

La solucin de problemas usando Simulink se ilustrar mediante un ejemplo, el cual


consiste en solucionar una ecuacin diferencial de segundo orden no homognea.

La ecuacin diferencial a solucionar es:

m&y& + cy& + ky = sen (t ) . y (0) = y& (0) = 1 (5.25)

El primer paso en la solucin es despejar la derivada de ms alto orden, as:

&y& = ( sen(t ) cy& ky ) * 1 . (5.26)


m

En el men principal se abre un nuevo modelo y en la librera simulink -> coninuous se


encuentra un bloque con el cual se puede integrar dos veces la funcin &y& . Este bloque se
arrastra dos veces hasta el editor y se conectan como se ve en la Figura 5.9.

Luego de la primera integracin (primer bloque) se tiene la funcin y& y luego de la


segunda integracin se tiene la funcin y . El siguiente paso es armar la funcin &y&
(ecuacin 5.26) mediante las funciones y& y y . Primero se multiplican la funciones y& y
y por las constantes (ganancias) c y k, respectivamente (Figura 5.10). Las ganancias se
encuentran en la librera Math Operations. Luego se adiciona un bloque, el cual tenga
como salida la funcin sen (t ) , este bloque se puede encontrar en la librera sources -> sine
wave (figura 5.11).

15
Matemticas Especiales Daniel H. Cortes C

Figura 5.9. Bloques que realizan la integracin de la funcin.

Figura 5.10. Bloques de Ganancias

16
Matemticas Especiales Daniel H. Cortes C

Figura 5.11. Bloque que genera la funcin seno.

El ltimo paso en la creacin del modelo es realizar las operaciones necesarias para
completar la ecuacin 5.26 (Figura 5.12). El bloque de suma se encuentra nuevamente en
el men Math Operations. La ganancia -K- del modelo es igual a 1/m.

Figura 5.12. Modelo para la solucin del problema.

17
Matemticas Especiales Daniel H. Cortes C

Para visualizar la solucin es necesario adicionar un bloque llamado scope (Figura 5.13)
el cual grafica la seal que tome como entrada. Este bloque se encuentra ubicado en la
librera sinks -> scope.

Figura 5.13. Modelo completo del problema.

Las condiciones iniciales se definen para cada integrador mediante un men que resulta de
dar doble clic en el icono. Las constantes k, m y c se definen como variables desde la lnea
de comando. La solucin (doble clic en scope) se muestra en la figura 5.14.

Figura 5.14. Solucin del problema

18

También podría gustarte