Este documento describe nueve métodos numéricos para resolver ecuaciones diferenciales ordinarias. Explica que los métodos numéricos son importantes para obtener soluciones aproximadas cuando las soluciones analíticas son complicadas o imposibles de obtener. Luego presenta el método de la serie de Taylor como ejemplo, resolviendo numéricamente una ecuación diferencial de primer orden usando los primeros tres términos de la serie de Taylor y comparando los resultados con la solución analítica. Finalmente, muestra cómo implementar este método en MATLAB para obtener una serie de
La empresa sostenible: Principales Características, Barreras para su Avance y...
9 métodos EDO
1. 184
9 MÉTODOS NUMÉRICOS PARA RESOLVER ECUACIONES
DIFERENCIALES ORDINARIAS
El análisis matemático de muchos problemas en ciencias e ingeniería conduce a la obtención
de ecuaciones diferenciales ordinarias (EDO). El estudio clásico de las EDO ha enfatizado el
estudio de técnicas de resolución pero que solamente son aplicables a un número reducido de
EDO. Programas como MATLAB ya incorporan instrumentos para obtener y graficar estas
soluciones analíticas. Los métodos numéricos son una opción importante para resolver estas
ecuaciones especialmente cuando la solución analítica es muy complicada o imposible obtener.
Estos métodos instrumentados computacionalmente proporcionan soluciones aproximadas
para analizar el comportamiento de la solución con respecto al problema propuesto.
Adicionalmente se puede experimentar numéricamente con la convergencia y la estabilidad.
Un problema importante es determinar las condiciones para que la solución exista y sea única,
y conocer el dominio en el que la solución tiene validez. Otros temas relacionados son la
sensibilidad de la solución a los cambios en la ecuación o en la condición inicial y la estabilidad
de la solución calculada, es decir el estudio de la propagación de los errores en el cálculo
numérico. Sin embargo, el objetivo principal es resolver la ecuación.
Una ecuación diferencial ordinaria de orden n es una ecuación del tipo:
F(x, y, y’, y’’, ..., y
(n-1)
, y
(n)
) = 0
En donde y es una función de la variable independiente x. El orden de la ecuación diferencial
es el de su derivada más alta.
Si es que es posible expresar la ecuación diferencial en la forma:
y
(n)
+ a1y
(n-1)
+ … + an-1y' + any = b
en donde los coeficientes a1, a2,…an, b son constantes o solamente dependen de x, entonces
es una ecuación diferencial lineal explícita de orden n
Una EDO es una ecuación funcional en la que la incógnita es una función y(x) que satisface a
la ecuación en cierto dominio, y a las condiciones que normalmente se suministran para
particularizar la ecuación. Los métodos numéricos proporcionan puntos de la función como una
aproximación a la solución analítica, con precisión estimada.
Ejemplo. Un cuerpo de masa m sujeto a un extremo de un resorte con constante de
amortiguación k, con el otro extremo fijo, se desliza sobre una mesa con un coeficiente de
fricción c. A partir de un estado inicial, las oscilaciones decrecen hasta que se detiene. La
ecuación del movimiento es
xma F cv kx= =− −∑
En donde a es la aceleración, v es la velocidad, x es desplazamiento horizontal, t tiempo:
d x c dx k
x
dt m dt m
+ + =
2
2
0
Es una ecuación diferencial ordinaria lineal de segundo orden. Su solución describe el
desplazamiento x en función del tiempo t partiendo de alguna condición inicial.
Obtener y graficar la solución con la función dsolve de MATLAB con los siguientes datos:
m=5, c=0.25, k=0.8, x(0)=1, x'(0)=0
>> y=dsolve('D2x+0.25/5*Dx+0.8/5*x=0','x(0)=1,Dx(0)=0','t')
y =
cos((255^(1/2)*t)/40)/exp(t/40) + (255^(1/2)*sin((255^(1/2)*t)/40))/(255*exp(t/40))
>> digits(6)
>> y=vpa(y) Solución en formato decimal con 6 dígitos
y =
cos(0.399218*t)/exp(0.025*t) + (0.0626224*sin(0.399218*t))/exp(0.025*t)
>> ezplot(y,[0,50]),grid on
2. 185
En el gráfico se observan las oscilaciones del desplazamiento amortiguado.
9.1 Ecuaciones diferenciales ordinarias lineales de primer orden
con la condición en el inicio
Estas ecuaciones tienen la forma general siguiente:
F(x, y, y’) = 0, con la condición inicial y(x0) = y0
Se puede escribir en la siguiente forma, si es una ecuación diferencial explícita:
y’(x) = f(x, y), y(x0) = y0
En la notación común:
dy
f(x,y)
dx
= , y(x0) = y0
Su solución es una función y(x) definida en algún intervalo, que satisface a la ecuación e
incluye a la condición inicial. La solución de esta ecuación se puede obtener integrando:
x x x
x x x
dy f(x,y)dx y(x) y(x ) f(x,y)dx= ⇒ = +∫ ∫ ∫0 0 0
0
Los métodos numéricos permiten obtener una solución aproximada cuando no es posible o es
muy complicado obtenerla en forma explícita. Es conveniente comparar la solución numérica
con la solución analítica de ecuaciones simples, para adquirir confianza al resolver ecuaciones
más complicadas para las cuales ya no se pueda obtener la solución analítica.
9.1.1 Método de la serie de Taylor
Se puede usar este desarrollo para obtener puntos de la solución a partir de la condición inicial
conocida y para estimar el error de truncamiento. Debe elegirse la distancia h entre los puntos:
yi+1 = yi + hy ’i +
2
h
2!
y’’i + ... +
n
h
n!
y(n)
i +
n 1
h
(n 1)!
+
+
y (n+1)
(z), xi ≤ z ≤ xi+1
La ventaja de este enfoque es que se puede mejorar la precisión incluyendo más términos del
desarrollo. Sin embargo, al usar las derivadas de y(x) se obtienen fórmulas aplicables
únicamente para la ecuación especificada. Esto contrasta con el objetivo de los métodos
numéricos que es proporcionar fórmulas generales.
Ejemplo. Obtenga dos puntos de la solución de la siguiente ecuación diferencial utilizando los
tres primeros términos de la serie de Taylor. Use h = 0.1
y’ - y - x + x
2
- 1 = 0, y(0) = 1
Solución
y’ = f(x, y) = y - x
2
+ x + 1, x0 = 0, y0 = 1, h = 0.1
yi+1 = yi + hy ’i +
2
h
2!
y’’i, E =
3
h
3!
y’’’(z) = O(h
3
) = O(0.001) (Error de truncamiento)
3. 186
xi+1 = xi + h, i = 0, 1, 2, ...
yi+1 = yi + h(yi - x
2
i + xi + 1) +
2
h
2!
(y’i - 2xi + 1) (Derivar y sustituir y’(x))
yi+1 = yi + h(yi - x
2
i + xi + 1) +
2
h
2
( yi - x
2
i + xi + 1 - 2xi + 1)
Algoritmo para obtener puntos de la solución para el ejemplo anterior
yi+1 = yi + h(yi - x
2
i + xi + 1) +
2
h
2
( yi - x
2
i - xi + 2)
xi+1 = xi + h, i = 0, 1, 2, ...
Puntos de la solución:
i=0: y1 = y0 + h(y0 - x
2
0 + x0 + 1) +
2
h
2
( y0 - x
2
0 - x0 + 2)
= 1 + 0.1(1 – 0
2
+ 0 + 1) +
2
0.1
2
( 1 - 0
2
– 0 + 2) = 1.2150
x1 = x0 + h = 0 + 0.1 = 0.1
i=1: y2 = y1 + h(y1 - x
2
1 + x1 + 1) +
2
h
2
( y1 - x
2
1 - x1 + 2)
= 1.2150 + 0.1(1.2150 – 0.1
2
+ 0.1 + 1) +
2
0.1
2
( 1.2150 – 0.1
2
– 0.1 + 2) = 1.4610
x2 = x1 + h = 0.1 + 0.1 = 0.2
Para comprobar la exactitud comparamos con la solución exacta: y(x) = e
x
+ x + x
2
y(0.1) = 1.2152
y(0.2) = 1.4614
El error está en el orden de los diezmilésimos y concuerda con el orden del error de
truncamiento para esta fórmula
En el siguiente gráfico se muestran los dos puntos obtenidos junto con lel gráfico de la solución
analítica exacta. La concordancia es muy buena.
4. 187
Instrumentación computacional
Una función en MATLAB para usar la fórmula deducida para el ejemplo anterior
yi+1 = yi + h(yi - x
2
i + xi + 1) +
2
h
2
( yi - x
2
i - xi + 2)
xi+1 = xi + h, i = 0, 1, 2, ...
function [x,y] = taylor2(x,y,h)
y=y+h*(y-x^2+x+1) + h^2/2*(y-x^2-x+2);
x=x+h;
Obtención de puntos de la solución desde la ventana de comandos
>> x=0;y=1;h=0.1;
>> [x, y]= taylor2(x,y,h) Este comando se reutiliza para obtener cada punto
x =
0.1000
y =
1.2150
>> [x, y]=taylor2(x,y,h)
x =
0.2000
y =
1.4610
El uso del método desde la ventana de comandos no es práctico para recibir los resultados.
Conviene guardar los puntos obtenidos. Para esto se puede escribir un programa.
Un programa en MATLAB para calcular m=20 puntos espaciados en una distancia h=0.1 para
el ejercicio anterior con la fórmula de Taylor:
x=0;
y=1;
m=20;
h=0.1;
for i=1:m
[x,y]=taylor2(x,y,h);
u(i)=x;
v(i)=y;
end
Se ha almacenado el programa con el nombre ed1. Los siguientes comandos permiten usar los
vectores u, v que contienen puntos de la solución para visualizarla y compararla con la solución
analítica exacta obtenida con la función dsolve de MATLAB.
>> ed1
>> plot(u, v, 'o'); u, v contienen los puntos calculados
>> g=dsolve('Dy-y-x+x^2-1=0','y(0)=1','x') Obtención de la solución analítica.
g =
x+x^2+exp(x) Solución analítica
>> hold on;
>> grid on;
>> ezplot(g,0,2);
En esta instrumentación se usa directamente la serie de Taylor y la fórmula es parte del
algoritmo. En las siguientes secciones se desarrollarán métodos numéricos generales que se
pueden aplicar a diferentes ecuaciones diferenciales usando el mismo algoritmo sin
modificación.