Вы находитесь на странице: 1из 23

MATEMTICA SUPERIOR

APLICADA



Solucin Numrica de Sistemas de
Ecuaciones Diferenciales Ordinarias
en Ingeniera Qumica



Alumno: Vivas Carlos Andrs.
Profesor: Ricardo Adra.
Comisin: 3K3.

Solucin de un Sistema de EDOs de 1er Orden
(I)
Planteamos la solucin del siguiente sistema de n
ecuaciones diferenciales de 1er orden:

Condiciones
Iniciales

()

()

()

()

.
.
.

()

()













Solucin de un Sistema de EDOs de 1er Orden
(II)

Dado que para obtener la solucin utilizamos un algoritmo
numrico, cada una de las ecuaciones del sistema puede
tratarse en forma independiente.
Ms an, para cada ecuacin se podra utilizar una estrategia de
resolucin diferente ya que se aplican en paralelo y
simultneamente en cada etapa de integracin.
Esta afirmacin vale tanto para los modelos explcitos como los
implcitos.

Solucin de un Sistema de EDOs de 1er Orden
(III)
Criterio prctico: Utilizar el mismo algoritmo para todo el
sistema.
Estimacin de una cota para el error: Trabajo muy
tedioso cuando no imposible.
Mtodos multipaso: Se debe recurrir a esquemas iterativos
con sistemas de ecuaciones no lineales (ya sean algebraicas
como no algebraicas) con los problemas que ello implica en la
convergencia.
Solucin de un Sistema de EDOs de 1er Orden
(IV)
Mtodos multipaso:
Filosofa: Es la misma que antes pero con la
diferencia de que cada etapa de clculo implica un
algebra matricial para resolver SENL.
Otros aspectos que complican el clculo:
Influencia de los diferentes pasos en la
determinacin del error.
Estabilidad del mtodo.

Ejemplo 02
Resolvemos el siguiente sistema:

Condiciones Iniciales

] [



Idnticamente se puede escribir como:

] [

] [

]





Ejemplo 02
Mtodo Explcito de Euler para Resolver
Sistemas de EDOs
Archivos de comandos de MATLAB:
Ejemplo_02.m: Archivos de comandos que llama a la funcin
EulerCoupled.m.
Mtodo:
EulerCoupled.m: Funcin que implementa el algoritmo explcito de
Euler para resolver sistemas de EDOs.
Funciones:
TestFunction2.m: Funcin que implementa las derivadas del
sistema de EDOs (llamada por EulerCoupled.m).

Archivos de comandos de MATLAB
clear all
clc
echo on
%Ejemplo_02
Start = 0;
Finish = 10;
Nsteps = 100;
InitialValue = [1;1];
%numerical solution
[x,t] = EulerCoupled(@TestFunction2,InitialValue,Start,Finish,Nsteps);
plot(t,x)
title('System of ODEs: Explicit Euler Method')
xlabel('t')
ylabel('x')
legend('x1','x2')
pause
disp('Numerical solution: '),[t x]

function [x,t] = EulerCoupled(MyFunc,InitialValues,Start,Finish,Nsteps)
% solves the initial value problema dx/dt = f(x)
% Uses the Euler method
% Myfunc = Handle to the function which calculates F(x)
% InitialValues = starting values (a column vector)
% Start = start time
% Finish = end time
% Nsteps = number of steps to march forward
x(:,1) = InitialValues;
t(1) = Start;
% calculate the time step
dt = (Finish-Start)/Nsteps;
for i = 1:Nsteps
%calculate the gradient using the current solution (time = t)
%the function should now return a vector of gradients
F = feval(MyFunc, x(:,i),t(i));
% calculate the new value of x and t
t(i+1) = dt + t(i);
x(:,i+1) = F*dt + x(:,i);
end
t=t';
x=x';
return

function [dx_dt] = TestFunction2(x,t)
%a function which returns a rate of change vector
dx_dt(1) = -1*x(1)-1*x(2);
dx_dt(2) = 1*x(1)-2*x(2);
%note: I could have just mutiplied x by a matrix
%change it to a column vector
dx_dt= dx_dt';
return









Ejecucin del programa en MATLAB


Mtodo Implcito de Euler para Resolver
Sistemas de EDOs (I)
Cuando tenemos un mtodo implcito tenemos que resolver un
SENL para obtener el valor actualizado de la funcin vectorial
(t)
Para un sistema gobernado por:

()

con el Mtodo Implcito de Euler, el valor de
i+1
, viene dado por
la ecuacin implcita:

(
i+1
) =
i
+ hf(
i+1
) -
i+1
= 0

Podramos resolver esta ecuacin utilizando el mtodo de
Newton para cada paso del tiempo para la incgnita
i+1
:

) (

)

Mtodo Implcito de Euler para Resolver
Sistemas de EDOs (II)

es el Jacobiano de la funcin vectorial () de donde resulta


que:



Donde I es la matriz identidad,

es el Jacobiano de la funcin f.
Por consiguiente, si arrancamos con una estimacin de

)
(

) (

) *

+
que representa un sistema de ecuaciones lineales.

Mtodo Implcito de Euler para Resolver
Sistemas ed EDOs (III)
Una estimacin inicial para

) seria utilizar

lo cual
significa que para la primera iteracin obtendramos:

(

) (

) (

)

Si el paso temporal es pequeo podramos esperar una sola
iteracin del mtodo de Newton.
Utilizando slo una iteracin del mtodo de Newton para resolver
la relacin implcita resulta en un esquema dependiente del
tiempo denominado Mtodo de Euler Implcito Linealizado
(ntese que para nuestro anlisis de estabilidad, siempre
supondremos que el mtodo de Newton converge).


Mtodo Implcito de Euler para Resolver
Sistemas de EDOs (IV)
Un mtodo implcito requerir resolver un conjunto no lineal (o
lineal) de ecuaciones en cada paso temporal.
Esto tiene un alto costo computacional. Usualmente, el esquema
de clculo requerir que se le suministre la funcin, devolviendo
el Jacobiano de ( ) o bien calcular el Jacobiano en forma
numrica.


Ejemplo 02
Mtodo Implcito de Euler para Resolver
Sistemas de EDOs
Archivo de Comando de MATLAB:
Ejemplo_02.: Archivo de comandos que llama a la funcin
EulerImplicit.m.

Mtodo:
EulerImplicit.m: Funcin que implementa el algoritmo explcito
de Euler para resolver sistemas de EDOs.

Funciones:
TestFunction2.m: Funcin que implementa las derivadas del
sistema de EDOs (llamada por EulerImplicit.m).
funToSolve.m: Funcin que calcula el residuo en el esquema
implcito (llamada por EulerImplicit.m).
fsolve.m: Funcin que resuelve el sistema implcito de
ecuaciones para obtener el valor actualizado de .

clear all
clc
echo on
%Ejemplo_02
Start = 0;
Finish = 10;
Nsteps = 100;
InitialValue = [1;1];
%numerical solution
[x,t] = EulerImplicit(@TestFunction2,InitialValue,Start,Finish,Nsteps);
plot(t,x)
title('System of ODEs: Implicit Euler Method')
xlabel('t')
ylabel('x')
legend('x1','x2')
pause
disp('Numerical solution: '),[t x]
function [x,t] = EulerImplicit(MyFunc,InitialValues,Start,Finish,Nsteps)
% solves the initial value problem dx/dt = f(x)
% Uses the Euler (implicit) method
% Myfunc = Handle to the function which calculates F(x)
% InitialValues = starting values (a column vector)
% Start = start time
% Finish = end time
% Nsteps = number of steps to march forward
x(:,1) = InitialValues;
t(1) = Start;
% calculate the time step
dt = (Finish-Start)/Nsteps;
for i = 1:Nsteps
%solve the implicit equation to get the updated value of x
%calculate the new value of x and t
t(i+1) = dt + t(i);
x(:,i+1) = fsolve(@funToSolve,x(:,i),[],x(:,i),t(i+1),MyFunc,dt);
end
t=t';
x=x';
return


function [dx_dt] = TestFunction2(x,t)
%a function which returns a rate of change vector
dx_dt(1) = -1*x(1)-1*x(2);
dx_dt(2) = 1*x(1)-2*x(2);
%note: I could have just mutiplied x by a matrix
%change it to a column vector
dx_dt= dx_dt';
return


function residual = funToSolve(x,xo,t,MyFunc,dt)
residual=xo+feval(MyFunc,x,t)*dt-x;
return





Ejecucin del Programa en MATLAB:



Consideraciones Acerca del Uso del Mtodo
Implcito de Euler para Resolver Sistemas de
EDOs (I)
Para resolver grandes sistemas de EDOs, la EulerImplicit
no es una rutina muy eficiente. Esto se debe a que a
fsolve no le hemos suministrado el J acobiano de la
transformacin, razn por la cual debe evaluarlo
analticamente.
Para un sistema de 100 EDOs el Jacobiano ser una
matriz de 100*100 elementos, que deber evaluarse en
cada iteracin de la solucin del sistema no lineal de
ecuaciones para cada paso del tiempo.
Podramos incrementar la velocidad:
Suministrando a fsolve una funcin para que
evale el Jacobiano.
Suministrando a fsolve una matriz rala
(sparse) que nos diga cuando el Jacobiano es
no nulo (no se desperdicia tiempo en calcular
elementos nulos). Esto se denomina sparsity
pattern, y es una matriz de ceros y unos.

fsolve es lo suficientemente sagaz; optimizar el clculo
cuando sea necesario recalcular el Jacobiano.
El MATLAB suministra resolvedores (por ej., ODE15s) que
nos permiten hacer todo lo que hicimos previamente. Son
programas que hacen cosas inteligentes como optimizar
cuando recalculan el jacobiano y varan el tamao del paso
de integracin para optimizar la exactitud de la solucin.
Los solvers del MATLAB son de orden superior (los solvers
de Euler son de primer orden de exactitud (O(h); ODE15s
es de hasta 5to. Orden de exactitud).
NO ESCRIBA SU SOLVER. USE MATLAB!!!

Estabilidad de las Soluciones Numricas (I)
Estabilidad Inherente de un Sistema de EDOs

Supongamos que tenemos el sistema de ODEs lineales, como el
que ya vimos:

] [

] [

]
en forma ms general:

] [

]
Existe un estado estacionario en (0,0). Frecuentemente, es
importante saber si el sistema decaer o diverger desde dicho
estado, si es perturbado. Para sistemas lineales, podemos
obtener una solucin analtica. Podemos factorizar M de la
siguiente forma:



Donde A es la matriz de los autovalores de M, y U la matriz de
los autovectores.





Estabilidad de las Soluciones Numricas (II)
Estabilidad Inherente de un Sistema de EDOs
Si reemplazamos M por su expresin factorizada, obtenemos:

]
Premultiplicando por U se obtiene:

[ [

]] ( [

])
Podemos resolver el sistema en trminos de un nuevo conjunto
de variables:

[

] [

] [

]
Dado que A es diagonal, entonces:

] [

] [

]

Tenemos ahora un sistema de EDOs desacoplado:

)

O, en notacin vectorial:

[

] [
(

)
(

)
]

Estabilidad de las Soluciones Numricas (IV)
Estabilidad Inherente de un Sistema de EDOs
Para encontrar la solucin hacemos:

] [

]

Finalmente obtenemos:

[

[
(

)
(

)
]

Donde U es la matriz de los autovectores de M y

son los
correspondientes autovalores.

Estabilidad de las Soluciones Numricas (V)
Estabilidad Inherente de un Sistema de EDOs
Los autovalores de M nos dicen cmo el sistema se aproxima al
estado estacionario (0,0), y si el sistema volver a ste si es
perturbado en una pequea cantidad.
Esta clase de estabilidad no tiene nada que ver con la solucin
numrica, sino que refleja la naturaleza del sistema.
En el caso general de los autovalores pueden ser complejos (por
ejemplo: = Re + Im j), pudiendo expandir los trminos
exponenciales en la solucin:

(

) (

) (

) (

)[(

) (

)]

Si los autovalores tienen una parte imaginaria la solucin
oscilar! Siendo la parte real la que determinar si la
solucin se aproximar al estado estacionario o diverger.


Estabilidad de las Soluciones Numricas (VI)
Estabilidad Inherente de un Sistema de EDOs

Para nuestro sistema:

[

]

Y los autovalores son:



Ambas partes reales son negativas, por consiguiente la solucin
oscilar, pero decaer al estado estacionario.

Estabilidad de las Soluciones Numricas
para Sistemas Lineales (I)

Cuando resolvimos una EDO simple vimos que era el gradiente
local, , quien determinaba la estabilidad inherente de la solucin
numrica.
Ahora tenemos que encontrar un criterio similar para EDOs
acopladas.
El objetivo es reducir las ecuaciones acopladas a un conjunto de
ecuaciones desacopladas de manera de reutilizar el anlisis de
estabilidad que efectuamos para las ecuaciones diferenciales
simples.
El anlisis previo nos haba permitido desacoplar las ecuaciones
mediante una transformacin de variables del sistema.
Son los autovlores de la matriz M, los que determinan la
estabilidad numrica de la solucin.
Cada autovalores es el recproco de un tiempo caracterstico y
(por ej., para el Mtodo Explcito de Euler) pone un lmite al paso
de tiempo ms grande que se puede utilizar para las ecuaciones.

Estabilidad de las Soluciones Numricas
para Sistemas Lineales (II)
Habamos visto cuando utilizbamos el Mtodo Explcito de
Euler que la solucin numrica era estable si |1+| < 1. Esta
situacin se puede representar por una regin en el plano
complejo determinada por la condicin: |(h)-(-1)| <1


Estabilidad de las Soluciones Numricas
para Sistemas Lineales (III)

Los autovalores de nuestro ejemplo eran:



Podemos elegir un paso temporal que nos dar una solucin
numrica estable para el Mtodo Explcito de Euler:

|( ) ()|
( )


( )


( )


Solucin numrica del sistema acoplado de EDOs utilizando el
mtodo Explicito de Euler para tres pasos diferentes de tiempo.
Tambin se muestra la solucin cuando se utiliza el mtodo
Implcito de Euler.

Extensin del Anlisis de Estabilidad a Sistemas
No Lineales (I)
Extendemos nuestro anlisis a sistemas de ecuaciones
diferenciales no lineales:

()

()

)
.
.
.

()

)

Podemos linealizar el lado derecho de estas ecuaciones (al
menos localmente):

[

] [

]
[







Extensin del Anlisis de Estabilidad a Sistemas
No Lineales (II)
La forma linealizadad adopta la siguiente forma:

(

) (

)
Si comparamos esta expresin con la expresin para el sistema
de ecuaciones diferenciales lineales, observamos que J es el
equivalente de M.
Son los autovalores del Jacobiano los que determinan la
estabilidad del estado estacionario y los que tambin determinan
la estabilidad de cualquier esquema numrico utilizado para
resolver sistemas de ecuaciones diferenciales no lineales.


Sistemas Stiff y Eleccin del Paso Temporal
(I)
Los autovalores de la matriz Jacobiana nos hablan de las
velocidades de cambio caractersticas del sistema (son la
inversa de las constantes de tiempo). Se pueden plantear dos
situaciones:
1) Todos los autovalores tienen magnitudes
similares. En este caso necesitamos elegir un paso
de tiempo suficientemente pequeo para lograr
suficiente exactitud. Generalmente, tendr que ser
ms pequeo que el mnimo paso de tiempo que
necesitamos para obtener una solucin estable. En
este caso, los esquemas explcitos de Euler resultan
atractivos.
2) Los autovalores son muy diferentes. En este caso
debemos hacer la simulacin suficientemente
prolongada en el tiempo para apreciar la dinmica del
sistema. El perodo de tiempo sobre el cual
necesitamos integrar est determinado por el proceso
ms lento (autovalor ms pequeo). Sin embargo, el
mximo paso temporar que podemos usar est
determinado por el autovalor de mayor magnitud. Si
usamos un solver explcito, entonces debemos
utilizar pasos muy pequeos sobre largos tiempos de
simulacin. Esto es muy ineficiente.
Sistemas Stiff y Eleccin del Paso Temporal (II)
Un sistema es stiff si el numro de condicin del Jacobiano
definido como la relacin del autovalor ms grande al ms
pequeo es mayor que 1.
La solucin a este problema es utilizar un solver implcito como
el esquema implcito de Euler que vimos anteriormente.