Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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
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:
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
2
Mecánica Computacional Prof. Enrique Franco G.
(n = 0) →
(n = 1) →
(n = 2) →
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−− ' )
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.
(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
..
.
// 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)
φ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.
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.
donde
k1 = f (xn ,yn )
k2 = f (xn + p1 h,yn + q11 k1 h) (18)
6
Mecánica Computacional Prof. Enrique Franco G.
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.
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)
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)
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 ;
// 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.
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:
dθ
= ω (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 ) $ ' )
11
Mecánica Computacional Prof. Enrique Franco G.
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
13