You are on page 1of 18

Matemáticas Especiales Daniel H.

Cortes C

Métodos Numéricos para Ecuaciones Diferenciales Ordinarias

Introducción

Muchos fenómenos físicos se pueden describir mediante ecuaciones diferenciales


ordinarias. Por ejemplo la caída libre de un cuerpo en un medio viscoso, el movimiento de
un sistema masa resorte, la oscilación de un péndulo, entre muchos otros. En algunos casos
la ecuación o el sistema de ecuaciones diferenciales es lineal y su solución analítica puede
encontrarse fácilmente mediante varios métodos matemáticos. Sin embargo, existen
fenómenos que son descritos por ecuaciones diferenciales no son lineales, por ejemplo, la
oscilación del péndulo.

Una alternativa para solucionar ecuaciones diferenciales lineales o no lineales son los
métodos numéricos. Los métodos Runge-Kutta están entre los más utilizados para la
solución de estos problemas. Aunque existen otros métodos numéricos para la solución de
ecuaciones diferenciales ordinarias como el método de los residuos ponderados y las
diferencias finitas, estos métodos utilizan algoritmos complicados y algunos están
restringidos a ecuaciones diferenciales lineales. Debido a que los métodos Runge-Kutta
son más sencillos y se pueden aplicar a una gran variedad de problemas, en este curso no se
incluirán otros métodos.

Los métodos Runge-Kutta tienen muchas variaciones. Por ejemplo, están los métodos de
paso fijo, de paso variable, de orden superior, etc. Debido a las limitaciones de tiempo, en
este curso se dictarán los métodos más comunes y básicos y queda por parte de los
estudiantes estudiar las alternativas restantes.

Ecuaciones Diferenciales Ordinarias

La ecuación 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
Matemáticas Especiales Daniel H. Cortes C

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


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

Las ecuaciones diferenciales también se clasifican según su orden, el cual está determinado
por la derivada de más alto orden presente en la ecuación. Por ejemplo, la ecuación (5.1) es
d 2x
una ecuación diferencial ordinaria de segundo orden, debido al término 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 ecuación diferencial ordinaria en un sistema de


ecuaciones de primer orden.

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

Solución

La ecuación anterior es una ecuación diferencial ordinaria de orden 3. Si se define:

y ' = g y y ' ' = g ' = q , la ecuación 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 ecuación diferencial ordinaria es lineal cuando la función o sus derivadas
están multiplicadas solamente por funciones de la variable independiente. Cuando en la
ecuación diferencial se encuentran potencias de la función o sus derivadas y/o
multiplicaciones entre las derivadas la ecuación es no lineal.

2
Matemáticas Especiales Daniel H. Cortes C

Un ejemplo de una ecuación diferencial ordinaria no lineal se observa en la ecuación de


movimiento del péndulo (figura 5.1).

Figura 5.1. Péndulo Simple

La ecuación de movimiento del péndulo está dada por la ecuación (5.2). En la cual el
término sen(θ ) hace que la ecuación sea no lineal.

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

Si se considera que el ángulo θ sólo toma valores pequeños, el término sen(θ ) puede
aproximarse a θ. Por lo tanto la ecuación diferencial no lineal (5.2) se convierte en una
lineal, así:

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

Aunque la linearización es una herramienta muy valiosa para resolver problemas en


ingeniería, no es adecuada en algunas situaciones. Por ejemplo, cuando se quiere analizar
el movimiento del péndulo para grandes desplazamientos. En estos casos los métodos
numéricos ofrecen una alternativa fácil para obtener la solución aproximada de este
problema.

3
Matemáticas Especiales Daniel H. Cortes C

Métodos Runge-Kutta

Todos los métodos que se verán en esta sección se aplicarán a la solución 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 métodos Runge – Kutta son las series de Taylor, la cual nos permite
encontrar el valor de una función en punto x si se conocen los valores de la función 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 método Runge-Kutta más simple es el método de Euler, el cual toma solamente los dos
primeros términos de la serie de Taylor.

Método de Euler

En el método de Euler se divide el rango en el cual se quiere conocer la solución en


intervalos de longitud h y se halla el valor de la función al final de cada uno de los
intervalos (Figura 5.2). Si se consideran los dos primeros términos de la serie de Taylor, el
valor de la función 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 término i – ésimo se tiene:

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

El método de Euler se puede ilustrar gráficamente mediante la figura 5.3. El error que se
induce en la solución mediante el método de Euler se debe a que sólo se toman los dos
primeros términos 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
Matemáticas Especiales Daniel H. Cortes C

Figura 5.2 División del rango en que se desea conocer la solución

Figura 5.2 Método de Euler

Figura 5.3 Error en el método de Euler

5
Matemáticas Especiales Daniel H. Cortes C

Este método puede ser fácilmente programado para obtener la solución a cualquier
problema. A continuación se observa un programa hecho en Matlab que soluciona
ecuaciones diferenciales ordinarias de primer orden utilizando el método 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 condición inicial en la posición 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 línea 6 la función ‘pendiente’ es un programa con el cual se obtiene el valor de


la función f i −1 de la ecuación (5.6).

Ejemplo 2

Solucionar de forma numérica y analítica la ecuación diferencial ordinaria:

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

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

Solución

La solución analítica en este caso puede ser fácilmente hallada mediante integración
directa, así:

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

La función ‘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 comparación:

6
Matemáticas Especiales Daniel H. Cortes C

En donde se puede observar el efecto que tiene el paso sobre la aproximación de la


solución.

Método de Heún

El método de Euler se conoce como un método predictor solamente, ya que no realiza una
corrección de los valores encontrados. El método de Heún es una mejora al método de
Euler, el cual incluye correcciones del valor yi encontrado en cada paso.

El método de Heún se puede resumir en los siguientes pasos:

1. realizar una predicción inicial del valor yi usando el método 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 función en el punto x1 se puede obtener de forma aproximada de la mediante


el método de Heún así:

y10 = y 0 + f ( x 0 , y 0 ) h , (Predicción inicial) (5.8)


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

7
Matemáticas Especiales Daniel H. Cortes C

donde el superíndice indica el número de correcciones realizadas. En forma general, el


método de Heún se puede formular de la siguiente manera:

y i0 = y i −1 + f ( xi −1 , y i −1 ) h , (Predicción) (5.11)
n −1
f ( xi −1 , y i −1 ) + f ( xi , y )
y in = y i −1 + i
h . (n-ésima corrección) (5.12)
2

Aunque el valor exacto de la función en punto xi se alcanza cuando las correcciones son
infinitas1, en la práctica no es posible realizar ese número de correcciones, por lo tanto se
debe definir un criterio el cual nos indique cuando se ha obtenido una valor suficientemente
exacto. Un criterio comúnmente usado es el siguiente:

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

Este criterio nos indica que las correcciones se realizarán 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 método de Heún 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 comparación del método de Heún con el método de Euler usando la ecuación
diferencial del ejemplo 2 se muestra en la Figura 5.4.

1
Esto ocurriría siempre que y’ dependa de y. En caso contrario, las correcciones no tendrían ningún efecto
sobre la precisión de la solución.

8
Matemáticas Especiales Daniel H. Cortes C

Figura 5.4. Comparación entre los métodos de Euler y Heún

Mediante esta comparación se puede observar que el método de Heún es más preciso aún
cuando se utiliza el mismo paso (h = 0.5).

Método General

Los métodos 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 función de incremento, la cual puede interpretarse


como una pendiente equivalente sobre el intervalo. La función de incremento se puede
escribir así:

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

donde n representa el orden método, 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
Matemáticas Especiales Daniel H. Cortes C

donde, p y q son constantes. El método de Euler (5.6) es un método 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 método de Heún (5.11)-(5.12), cuando usa una sola corrección (n = 1), se puede
considerar como un método Runge-Kutta de segundo orden. En este caso a1 = a2 = 1/2 y
p1 = q11 = 1. Por lo tanto la ecuación (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 métodos Runge-Kutta está relacionado con el error de truncamiento. Por
ejemplo, para los métodos de segundo orden el error de truncamiento es Oh 3 , en general se
puede decir que un método Runge-Kutta es orden n tiene un error de truncamiento igual a
Oh n +1 .

Métodos Runge-Kutta de Cuarto Orden

El método Runge-Kutta más popular de cuarto orden se conoce como método RK clásico de
cuarto orden. Este método 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 método de Runge-Kutta clásico de cuarto orden


se muestra a contiuación:

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

10
Matemáticas 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 comparación entre este método y el de Euler y Heún utilizando el problema del
ejemplo 2 se puede observar en la Figura 5.4.

Figura 5.5. Comparación entre los métodos Euler, Heún y Runge- Kutta 4° orden clásico

En la gráfica anterior puede observarse la gran precisión del método RK4, lo que justifica
su popularidad.

Métodos Adaptativos de Runge-Kutta

Todos los métodos observados hasta el momento utilizan paso constante. Esta
característica puede ser una desventaja en algunas ocasiones. Por ejemplo cuando la
solución de la ecuación sufre un cambio brusco (Figura 5.6), donde los métodos de paso
constantes pueden generar errores importantes. Otra desventaja de los métodos de paso
constante se presenta cuando la solución se caracteriza por tener tramos con pendiente casi
constante (Figura 5.6); en estos tramos podría usarse un paso más grande reduciendo el
tiempo de cálculo sin pérdida de precisión.

11
Matemáticas Especiales Daniel H. Cortes C

Figura 5.6. Función con cambios súbitos de pendiente

Un método que implementa el cambio adaptativo del tamaño del paso es el método Runge-
Kutta Fehlberg, el cual realiza dos predicciones con métodos quinto y cuarto orden y de
acuerdo a la diferencia entre las predicciones actualiza el paso. Aunque alguien podría
pensar que se esta duplicando el trabajo cuando se realizan dos predicciones para el mismo
punto, el método RK Fehlberg utiliza las constantes ki halladas en la predicción de quinto
orden para realizar la predicción de cuarto orden, reduciendo considerablemente los
cálculos necesarios. El método 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
Matemáticas Especiales Daniel H. Cortes C

El método de cuarto orden está dado por la siguiente expresión:

⎛ 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 método de quinto orden.

Una estrategia para disminuir el paso si es muy grande o aumentarlo si es muy pequeño 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 ecuación (5.24) se toma igual a 0.2 cuando se quiere aumentar el


tamaño del paso y se toma como 0.25 para disminuirlo. Un programa en Matlab que
implementa este método se presenta a continuación:

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
Matemáticas Especiales Daniel H. Cortes C

Una comparación donde se ve el efecto de la variación del paso se puede observar mediante
la solución de la siguiente ecuación 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 comparación entre este
método y el método clásico de RK de cuarto orden se puede observar en la figura 5.7.

Figura 5.7. Comparación entre RK4 clásico y adaptativo.

Simulink

El programa Matlab tiene una poderosa herramienta para la solución de ecuaciones


diferenciales ordinarias llamada ‘Simulink’. Para acceder a esta herramienta sólo es
necesario escribir la palabra simulink en la línea de comando y el menú principal aparecerá
en una nueva ventana (Figura 5.8). La solución de problemas en Simulink consta de dos
pasos. Primero se crea un modelo usando bloques mediante el editor y luego se ajustan los
parámetros de la solución.

14
Matemáticas Especiales Daniel H. Cortes C

Figura 5.8. Menú principal de Simulink

La solución de problemas usando Simulink se ilustrará mediante un ejemplo, el cual


consiste en solucionar una ecuación diferencial de segundo orden no homogénea.

La ecuación diferencial a solucionar es:

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

El primer paso en la solución es despejar la derivada de más alto orden, así:

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


m

En el menú principal se abre un nuevo modelo y en la librería simulink -> coninuous se


encuentra un bloque con el cual se puede integrar dos veces la función &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 integración (primer bloque) se tiene la función y& y luego de la


segunda integración se tiene la función y . El siguiente paso es armar la función &y&
(ecuación 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 librería ‘Math Operations’. Luego se adiciona un bloque, el cual tenga
como salida la función sen (t ) , este bloque se puede encontrar en la librería sources -> sine
wave (figura 5.11).

15
Matemáticas Especiales Daniel H. Cortes C

Figura 5.9. Bloques que realizan la integración de la función.

Figura 5.10. Bloques de Ganancias

16
Matemáticas Especiales Daniel H. Cortes C

Figura 5.11. Bloque que genera la función seno.

El último paso en la creación del modelo es realizar las operaciones necesarias para
completar la ecuación 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 solución del problema.

17
Matemáticas Especiales Daniel H. Cortes C

Para visualizar la solución es necesario adicionar un bloque llamado ‘scope’ (Figura 5.13)
el cual grafica la señal que tome como entrada. Este bloque se encuentra ubicado en la
librería 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 línea
de comando. La solución (doble clic en scope) se muestra en la figura 5.14.

Figura 5.14. Solución del problema

18

You might also like