Está en la página 1de 13

Mecánica Computacional Prof. Enrique Franco G.

SOLUCIÓN NUMÉRICA DE ECUACIONES DIFERENCIALES ORDINARIAS

1. Introducción
La ecuaciones diferenciales ordinarias (ODEs) son ecuaciones que relacionan la tasa de cambio
de una función desconocida con respecto a variables y parámetros. La importancia de este tema
consiste en que muchos fenómenos fı́sicos son modelados más eficientemente usando ecuaciones
diferenciales.
Por ejemplo, la ecuación
dv c
=g− v (1)
dx m
es una ecuación diferencial ordinaria de primera orden, con variable independiente t, variable de-
pendiente v y parámetros c, m y g. Otro ejemplo seria la ecuación

d2 x dx
m 2
+c + kx = 0 (2)
dt dt
que es una ecuación diferencial ordinaria de segunda orden, con variable independiente t, variable
dependiente x y parámetros m, c y k.
Las ODEs solamente presentan derivadas con respecto a una única variable independiente. Por
otro lado, las ecuaciones diferenciales parciales (PDEs) poseen derivadas con respecto a más de una
variable independiente, por ejemplo, la conocida ecuación de Laplace

∂2T ∂2T
+ = 0, (3)
dx2 dy 2
es una ecuación diferencial parcial con variables independientes x y y y variable dependiente T . En
este caso, la solución es una función de las variables independientes f (x,y).
Una caracterı́stica, e importante ventaja, consiste en que una ODE de orden superior puede
reducirse a un sistema de ecuaciones diferenciales de primera orden. Por ejemplo, la ecuación (2)
puede reducirse haciendo la sustitución y = dx/dt, como dy/dt = d2 x/dt2 , se tiene:

y = dx

dt (4)
0 = m dydt + cy + kx

La solución simultanea del sistema de dos ecuaciones diferenciales de primer grado (4) es equivalente
a la solución de la ecuación (3).
Los métodos estudiados aquı́ se aplican a la solución de ecuaciones diferenciales ordinarias de
la forma
dy
= f (x,y). (5)
dx

1
Mecánica Computacional Prof. Enrique Franco G.
1.1. Condiciones iniciales
Suponga que se tiene la función

y = −0,5x4 + 4x3 − 10x2 + 8,5x + 1 (6)

que al ser derivada se obtiene la siguiente ecuación diferencial de primera orden:


dy
= −2x3 + 12x2 − 20x + 8,5. (7)
dx
Para solucionar esta ecuación se hace el camino inverso, es decir, se integra:
Z
y = (−2x3 + 12x2 − 20x + 8,5)dx, (8)

cuyo resultado es
y = −0,5x4 + 4x3 − 10x2 + 8,5x + C. (9)
Al derivar la ecuación (6), la constante 1 fue eliminada y al integrar nuevamente en su lugar
apareció la constante C. Esta nueva constante de valor desconocido implica que la ecuación dife-
rencial (7) tiene infinitas soluciones, una para cada posible valor de C, y para obtener una solución
especı́fica se necesita información adicional. Esta información adicional que particulariza la solu-
ción, proviene del conocimiento del valor de la función y sus derivadas en uno o varios valores de
x y se llaman condiciones iniciales. Por ejemplo, para obtener nuevamente la ecuación (6) a partir
de la ecuación diferencial (7), la siguiente condición inicial debe ser evaluada:

y=1 para x = 0, (10)

que se evalúa de la siguiente manera:

y(0) = −0,5(0)4 + 4(0)3 − 10(0)2 + 8,5(0) + C = 1,

lo que implica que C = 1 y la ecuación (9) se convierte en la ecuación (6).

2. Método de Euler
El método de Euler consiste en usar la misma ecuación diferencial como pendiente para extra-
polar un nuevo punto de la solución. La ecuación del método de Euler es

yn+1 = yn + φn h, (11)

donde

φn = f ′ (xn ) y h = (xn+1 − xn ). (12)

Ejemplo 1 — Solución numérica de la ecuación diferencial


dy
= −2x3 + 12x2 − 20x + 8,5. (13)
dx
para 0 ≤ x ≤ 4 con condición inicial y(0) = 1 e incrementos de x de 0,5 (h = ∆x = 0,5).

2
Mecánica Computacional Prof. Enrique Franco G.
(n = 0) →

φ0 = −2(0)3 + 12(0)2 − 20(0) + 8,5 = 8,5


y0 = 1

(n = 1) →

φ1 = −2(0,5)3 + 12(0,5)2 − 20(0,5) + 8,5 = 1,25


y1 = y0 + φ0 ∆x = 1 + 8,5(0,5) = 5,25

(n = 2) →

φ2 = −2(1,0)3 + 12(1,0)2 − 20(1,0) + 8,5 = −1,5


y2 = y1 + φ1 ∆x = 5,25 + 1,25(0,5) = 5,875
..
.

Como los cálculos son dispendiosos, se implementó el siguiente script de Scilab para solucionar
el problema:

// S o l u c i ó n e x a c t a
x = [0:0.05:4];
y = −0.5 * x . ˆ 4 + 4 * x . ˆ 3 − 10 * x . ˆ 2 + 8 . 5 * x + 1 ;

// S o l u c i ó n aproximada ( E u l e r )
Dx = 0.25; // In c r e m e n to
xe = [ 0 : Dx : 4 ] ; // V a l o r e s de x de l a s o l . aprox .
Ne = l e n g t h ( xe ) ; // Número de p u n to s de xe
y0 = 1; // C o n d i c i ó n i n i c i a l ( en x=0)
ya = y0 ;

f o r i =2: Ne
phi = −2* xe ( i −1) . ˆ 3 + 12 * xe ( i −1) . ˆ 2 − 20 * xe ( i −1) + 8 . 5
yb = ya + phi * Dx ;
ye ( i ) = yb ;
ya = yb ;
end

// I n c o r p o r a c i ó n de l a c o n d i c i ó n inicial
// a l a s o l u c i ó n aproximada
ye ( 1 ) = y0 ;

// G r á f i c o de l a s o l u c i ó n e x a c t a
p l o t ( x , y , ' k− ' )
s e t ( gca ( ) , ” g r i d ” , [ 1 1 ] )
xlabel ( ' x ' )
ylabel ( ' y ' )

// G r á f i c o de l a s o l u c i ó n aproximada
p l o t ( xe , ye , ' ko−− ' )

La figura 1a muestra el resultado obtenido comparado a la solución analı́tica. La figura 1b


muestra nuevamente los resultados de la solución numérica para tres valores de ∆x comparados a
la solución analı́tica. Puede verse como la solución numérica se acerca a la analı́tica a medida que
el ∆x se hace menor.

3
Mecánica Computacional Prof. Enrique Franco G.
a) b)
∆x=0.5 ∆x=0.5, 0.25, 0.1
8 8
Sol. exacta Sol, exacta
Sol. aprox. ∆x=0.5
7 7
∆x=0.25
∆x=0.1
6 6

5 5
y

y
4 4

3 3

2 2

1 1
0 1 2 3 4 0 1 2 3 4
x x

Figura 1: Comparación entre la solución numérica obtenida usando el método de Euler y la solución
analı́tica.

Ejemplo 2 — Solución numérica de la ecuación diferencial


dy
= yx2 − 1,2y para 0≤x≤2 (14)
dx
con condición inicial y(0) = 1 e incrementos de x de 0,5 (∆x = 0,5). Esta ecuación diferencial es
un poco diferente porque el valor de la derivada depende de x y de y.
Las primeras iteraciones de la solución numérica son:
(n = 0) →
x0 = 0
y0 = 1
φ0 = y0 x20 − 1,2y0 = (1)(0)2 − 1,2(1) = −1,2

(n = 1) →
x1 = x0 + ∆x = 0,5
y1 = y0 + φ0 ∆x = 1 + (−1,2)(0,5) = 0,4
φ1 = y1 x21 − 1,2y1 = (0,4)(0,5)2 − 1,2(0,4) = −0,38

(n = 2) →
x2 = x1 + ∆x = 1,0
y2 = y1 + φ1 ∆x = 0,4 + (−0,38)(0,5) = 0,21
φ2 = y2 x22 − 1,2y2 = (0,21)(1,0)2 − 1,2(0,21) = −0,042

4
Mecánica Computacional Prof. Enrique Franco G.
(n = 3) →

x3 = x2 + ∆x = 1,5
y3 = y2 + φ2 ∆x = 0,21 + (−0,042)(0,5) = 0,1890
φ3 = y3 x23 − 1,2y3 = (0,1890)(1,5)2 − 1,2(0,1890) = 0,1985
..
.

El siguiente script de Scilab soluciona el problema:

// S o l u c i ó n aproximada ( E u l e r )
Dx = 0.5; // In c r e m e n to
xe = [ 0 : Dx : 2 ] ; // V a l o r e s de x de l a s o l . aprox .
Ne = l e n g t h ( xe ) ; // Número de p u n to s de xe
y0 = 1; // C o n d i c i ó n i n i c i a l ( en x=0)
ya = y0 ;

f o r i =2: Ne
phi = ya * xe ( i −1) ˆ2 − 1 . 2 * ya
yb = ya + phi * Dx
xe ( i )
ye ( i ) = yb ;
ya = yb ;
end

// I n c o r p o r a c i ó n de l a c o n d i c i ó n inicial
// a l a s o l u c i ó n aproximada
ye ( 1 ) = y0 ;

// G r á f i c o de l a s o l u c i ó n
p l o t ( xe , ye , ' ko−− ' )
s e t ( gca ( ) , ” g r i d ” , [ 1 1 ] )
xlabel ( ' x ' )
ylabel ( ' y ' )

La figura 2 muestra el resultado obtenido para tres incrementos diferentes de x (∆x = 0,5, 0,1 y 0,02).

3. Método de Runge-Kutta
En la sección anterior fue presentado el método de Euler y cómo la solución numérica se acerca
a la solución analı́tica a medida que el h se hace menor. El método de Euler necesitan valores de
h muy pequeños para obtener buenos resultados e incrementos menores significa mayor número
de subdivisiones del rango de la variable independiente y, por consiguiente, un mayor número
de iteraciones son necesarias. Para usos prácticos se necesitan un método que proporcione buena
precisión en un número relativamente pequeño de iteraciones.
El método de Runge-kutta es en realidad un grupo de métodos desarrollados para mejorar la
precisión del método de Euler. Funcionan de la misma manera:

yn+1 = yn + φn h (15)

donde φn tiene la forma generalizada

φn = a1 k1 + a2 k2 + · · · + am km . (16)

5
Mecánica Computacional Prof. Enrique Franco G.

1.4
∆x=0.5
∆x=0.1
1.2
∆x=0.02

0.8

y
0.6

0.4

0.2

0
0 0.5 1 1.5 2
x

Figura 2: Solución numérica de la ecuación diferencial del ejemplo 2 usando el método de Euler.

Los valores a1 , a2 , . . . , an son constantes y

k1 = f (xn ,yn )
k2 = f (xn + p1 h,yn + q11 k1 h)
k3 = f (xn + p3 h,yn + q21 k1 h + q22 k2 h)
..
.

Los valores p y q son constantes que se evalúan usando la serie de Taylor. La obtención de estas
constantes no va ser abordado en este texto (ver referencia [1], sección 25.3), solamente se van a
presentar las expresiones del método para valores de m igual a 2, 3 y 4. El valor de m define el
orden del método de Runge-Kutta, por lo menos, para los primeros valores. Por ejemplo, si m = 2
se tiene el método de Runge-Kutta de segunda orden, m = 3 de tercera orden y ası́ sucesivamente.
Puede verse que el método de Runge-Kutta de orden 1 (m = 1) equivale al método de Euler.

3.1. Método de Runge-Kutta de segunda orden (RK2)


Para este caso (m = 2), la solución de la ODE es aproximada por

yn+1 = yn + (a1 k1 + a2 k2 )h (17)

donde

k1 = f (xn ,yn )
k2 = f (xn + p1 h,yn + q11 k1 h) (18)

6
Mecánica Computacional Prof. Enrique Franco G.

Figura 3: Interpretación geométrica del método de Runge-Kutta de segunda orden.

Este método se subdivide en varios dependiendo de los valores de a1 y a2 obtenidos. Estos


valores varı́an porque para hallarlos es necesario suponer algunos valores arbitrarios. Los valores
más usados son a1 = a2 = 1/2, entonces:
 
k1 k2
yn+1 = yn + + h (19)
2 2

donde

k1 = f (xn ,yn )
k2 = f (xn + h,yn + k1 h) (20)

Este es llamado método de Heun y tiene una interpretación geométrica interesante que muestra
claramente la manera como se optimiza la solución numérica.
La figura 3 muestra que este método no usa simplemente la pendiente del primer punto (xn )
para extrapolar el segundo punto (xn+1 ), en su lugar, calcula las pendientes en el primero y segundo
punto y las promedia para obtener un valor más exacto. Esta pendiente promediada más exacta se
muestra en el gráfica con color rojo. Puede verse que los valores de y son extrapolados usando la
pendiente calculada en el primer punto.

3.2. Método de Runge-Kutta de tercera orden (RK3)


Para m = 3, una de las versiones más usadas es
1
yn+1 = yn + (k1 + 4k2 + k3 )h (21)
6

7
Mecánica Computacional Prof. Enrique Franco G.
donde

k1 = f (xn ,yn )
 
h k1 h
k2 = f xn + ,yn + (22)
2 2
k3 = f (xn + h,yn − k1 h + 2k2 h) (23)

3.3. Método de Runge-Kutta de segunda orden (RK4)


El método de Runge-kutta más ampliamente usado es el de cuarta orden. Igual que los demás
casos, hay muchas versiones diferentes dependiendo del valor de las contantes. La versión más usada
es la siguiente:
1
yn+1 = yn + (k1 + 2k2 + 2k3 + k4 )h (24)
6
donde

k1 = f (xn ,yn )
 
h k1 h
k2 = f xn + ,yn + (25)
2 2
 
h k2 h
k3 = f xn + ,yn + (26)
2 2
k4 = f (xn + h,yn + 2k3 h) (27)

Ejemplo 3 — Considere la ecuación diferencial


 
du 4
= 1− t u (28)
dt 3

con condición inicial u(0) = 1, en el intervalo 0 ≤ t ≤ 3 y h = ∆t = 0,2. Por separación de variables


y aplicación de la condición inicial puede verse que la solución exacta es
2
u(t) = et−(2/3)t (29)

El script de Scilab implementado en el caso del método de Euler se puede editar fácilmente
para implementar los métodos de Runge-Kutta. Como ejemplo se muestra a continuación el script
implementado en el caso RK4:

// S o l u c i ó n numérica (RK4)
Dt = 0.2;
te = [ 0 : Dt : 3 ] ' ;
Ne = l e n g t h ( te ) ;
u0 = 1;
ua = u0 ;

f o r n =2: Ne
k1 = (1 −(4/3) * te ( n −1) ) * ua ;
k2 = (1 −(4/3) * ( te ( n −1)+Dt / 2 ) ) * ( ua+k1 * Dt / 2 ) ;
k3 = (1 −(4/3) * ( te ( n −1)+Dt / 2 ) ) * ( ua+k2 * Dt / 2 ) ;
k4 = (1 −(4/3) * ( te ( n −1)+Dt ) ) * ( ua+k3 * Dt ) ;
ub = ua + ( 1 / 6 ) * ( k1 + 2 * k2 + 2 * k3 + k4 ) * Dt ;

8
Mecánica Computacional Prof. Enrique Franco G.
a) b)
0
1.6 10
Sol. exacta Euler RK2 RK3 RK4
Euler
1.4 RK2 −1
10

1.2
−2
10
1

−3

|e|
0.8 10

0.6 −4
10

0.4
−5
10
0.2

−6
0 10
0 0.5 1 1.5 2 2.5 3 0 0.5 1 1.5 2 2.5 3
t t

Figura 4: Solución numérica de la ODE del ejemplo 3 con ∆t = 0,2: a) comparación entre los
resultados obtenidos con los métodos de Euler y RK2 y la solución exacta y b) comparación de los
errores absolutos obtenidos con los métodos de Euler, RK2, RK3 y RK4.

ue ( n ) = ub ;
ua = ub ;
end

ue ( 1 ) = u0 ;

e = abs ( ue−exp ( te −(2/3) * te . ˆ 2 ) ) ;

// G r á f i c o
p l o t ( t , u , ' k− ' )
p l o t ( te , ue , ' ko ' )
s e t ( gca ( ) , ” g r i d ” , [ 1 1 ] )
xlabel ( ' x ' )
ylabel ( ' y ' )

figure
p l o t ( te , e , ' ko− ' )
s e t ( gca ( ) , ” g r i d ” , [ 1 1 ] )
xlabel ( ' x ' )
ylabel ( ' e r r o r a b s o l u t o ' )

La figura 4a muestra los resultados de las soluciones numéricas usando los métodos de Euler y
RK2, comparadas a la solución exacta. Se nota una clara reducción del error con el método RK2.
Los resultados de los métodos RK3 y RK4 no son graficados porque, a la escala usada, los puntos
quedarı́an sobrepuestos a los del método RK2. Sin embargo, la figura 4b muestra el valor absoluto
del error (diferencia entre la solución numérica y la analı́tica) para los cuatro métodos. Debido a
la diferencia de orden de magnitud el gráfico se hizo con escala logarı́tmica en el eje y. Es muy
interesante que el error se reduce en casi 5 ordenes de magnitud entre los métodos de Euler y RK4
para la misma discretización. Esto muestra claramente la razón de la popularidad del método RK4.

9
Mecánica Computacional Prof. Enrique Franco G.
4. Sistemas de ecuaciones
Como se dijo al comienzo del texto, una ODE de orden superior pueden reducirse a un sistema
de ODEs de primer grado y usar los métodos estudiados para solucionar el sistema. La solución
del sistema equivale a solucionar la ODE de orden superior y se realiza simplemente aplicando
simultáneamente al sistema de ecuaciones alguno de los métodos numéricos estudiados.

Ejemplo 4 — Un problema comúnmente abordado en mecánica es la solución de la ecuación


diferencial que modela el movimiento de un péndulo simple:

d2 θ  g 
+ sen(θ) = 0 (30)
dt2 l
donde g es la aceleración de la gravedad y l la longitud de la cuerda del péndulo. Esta ODE es no
lineal y su solución analı́tica es difı́cil y de poca utilidad. La mayorı́a de los casos se realiza una
linealización haciendo sen(θ) ≈ θ bajo la suposición de un θ pequeño. De esta manera se obtiene
una ODE con solución analı́tica bien conocida:
d2 θ  g 
+ θ=0 (31)
dt2 l
La ecuación diferencial (30) puede reducirse a un sistema de ODEs de primera orden de la
siguiente manera:

= ω (32)
dt
dω g
= − sen(θ) (33)
dt l
Usando g = 9,82, l = 1, ∆t = 0,01 y 0 ≤ t ≤ 10, el siguiente script de Scilab soluciona el problema
usando el método RK4.

// Parámetros
g = 9.82;
L = 1;

// S o l u c i ó n numérica (RK4)
Dt = 0.01;
te = [ 0 : Dt : 1 0 ] ;
Ne = l e n g t h ( te ) ;
q0 = 170 * %pi / 1 8 0 ;
qa = q0 ;
w0 = 0;
wa = w0 ;

f o r n =2: Ne
// C á l c u l o de l a s c o n t a n t e s k i
k1 = wa ;
l1 = −(g / L ) * s i n ( qa ) ;

k2 = wa+l1 * Dt / 2 ;
l2 = −(g / L ) * s i n ( qa+k1 * Dt / 2 ) ;

k3 = wa+l2 * Dt / 2 ;
l3 = −(g / L ) * s i n ( qa+k2 * Dt / 2 ) ;

10
Mecánica Computacional Prof. Enrique Franco G.

k4 = wa+2* l3 * Dt ;
l4 = −(g / L ) * s i n ( qa+2* k3 * Dt ) ;

// In c r e m e n to te m p o r a l de l a s o l u c i ó n
qb = qa + ( 1 / 6 ) * ( k1 + 2 * k2 + 2 * k3 + k4 ) * Dt ;
qe ( n ) = qb ;
qa = qb ;

wb = wa + ( 1 / 6 ) * ( l1 + 2 * l2 + 2 * l3 + l4 ) * Dt ;
we ( n ) = wb ;
wa = wb ;
end

// A p l i c a c i ó n de l a s c o n d i c i o n e s i n i c i a l e s
qe ( 1 ) = q0 ;
we ( 1 ) = w0 ;

// G r á f i c o
p l o t ( te , qe , ' k− ' )
p l o t ( te , we , ' k−− ' )
s e t ( gca ( ) , ” g r i d ” , [ 1 1 ] )
xlabel ( ' t ' )
legend ( ' $ \ t h e t a ( t ) $ ' , ' $ \omega ( t ) $ ' )

La figura 5 muestra el resultado numérico para un desplazamiento angular inicial de 10◦ y


170◦ .Se puede ver que el desplazamiento angularp (θ) y la velocidad angular (ω = dθ/dt) están
fuera de fase y que el periodo de oscilación es g/l ≈ 2,01, tal como se esperarı́a. Inicialmente se
hizo el cálculo con el modelo linealizado (ecuación 31), y se puede ver que los resultados son muy
parecidos, pues para ángulos pequeños la aproximación sen(θ) = θ es aceptable. Sin embargo, para
θ0 = 170◦ , los resultados son completamente diferentes. En este caso, el modelo lineal proporciona
una solución igual a la anterior, pero de amplitud de 170◦ . Este comportamiento está totalmente
fuera de la realidad, debido a que la aproximación sen(θ) = θ es completamente inaceptable. El
modelo no lineal proporciona una solución más realista, donde la forma de las oscilaciones ya no es
seniodal y el periodo de oscilación es mayor.

11
Mecánica Computacional Prof. Enrique Franco G.

Péndulo lineal (Ecuación 31)


θ0 = 10◦ θ0 = 170◦

Péndulo no lineal (Ecuación 30)


θ0 = 10◦ θ0 = 170◦

Figura 5: Solución numérica del sistema de ODEs del ejemplo 4 con ∆t = 0,01: solución de las
funciones θ(t) y ω(t) para desplazamientos angulares iniciales de 10° y 170°, y comparación de los
casos lineal y no lineal.

12
Mecánica Computacional Prof. Enrique Franco G.
Bibliografı́a

1. S. C. Chapra, R. P. Canale, “Numerical Methods for Engineers”, third edition, McGraw-


Hill,1998.

2. MS. Yakowitz, F. Szidarowsky, “An Introduction to Numerical Computations”, secod edition,


Macmillan Publishing Company, 1989.

3. Peter J. Olver, “Numerical Analysis Lecture Notes”, School of Mathematics, University of


Minnesota, URL: http://www.math.umn.edu/~olver.

4. Mathworld, Wolfram Reaserch Inc., URL: http://mathworld.wolfram.com.

13

También podría gustarte