Integración numérica de ecuaciones diferenciales

Anuncio
 ASIGNATURA: “INFORMÁTICA APLICADA A PROBLEMAS QUÍMICOS” LORENA GARCÍA DOMÍNGUEZ SONIA ÁLVAREZ MILLÁN INTEGRACIÓN NUMÉRICA DE ECUACIONES DIFERENCIALES Introducción:
Los métodos numéricos para el estudio del comportamiento de sistemas dinámicos
han cobrado fuerza en los últimos años por varias razones. Probablemente la más
importante, es que puede accederse a computadoras altamente eficientes a un
costo cada vez más bajo, lo que permite su uso para la resolución de problemas
altamente complejos.
Una segunda razón es que los métodos numéricos son en muchos casos la única
alternativa posible para la resolución de los frecuentes problemas no-lineales
muchas veces intratables analíticamente. Por otra parte los problemas lineales
continúan creciendo en magnitud, requiriendo un mayor esfuerzo para su solución.
Discutiremos aquí la solución de ecuaciones diferenciales ordinarias (EDO's) o
ecuaciones de estado (EE) a través de la aplicación de métodos numéricos.
INTEGRACION NUMÉRICA CON MATLAB:
A continuación se describen los argumentos de los comandos MATLAB ODE.
[x,y] = ode23('función',a,b,inicial)
Esta instrucción regresa un conjunto de coordenadas "x" y "y" que representan a la
función y=f(x), los valores se calculan a través de métodos Runge-Kuta de segundo
y tercer orden.
El nombre "función", define una función que representa a una ecuación diferencial
ordinaria, ODE23 proporciona los valores de la ecuación diferencial y'=g(x,y).
Los valores "a" y "b" especifican los extremos del intervalo en el cual se desea
evaluar a la función y=f(x).
El valor inicial y = f(a) especifica el valor de la función en el extremo izquierdo del
intervalo [a,b].
[x,y] = ode45('función',a,b,inicial)
Esta instrucción regresa un conjunto de coordenadas "x" y "y" que representan a la
función y=f(x), los valores se calculan a través de métodos Runge-Kuta de cuarto y
quinto orden.
El nombre "función", define una función que representa a una ecuación diferencial
ordinaria, ODE45 proporciona los valores de la ecuación diferencial y'=g(x,y).
Los valores "a" y "b" especifican los extremos del intervalo en el cual se desea
evaluar a la función y=f(x).
El valor inicial y = f(a) especifica el valor de la función en el extremo izquierdo del
intervalo [a,b].
Las instrucciones "ODE23" y "ODE45" contienen dos parámetros adicionales.
Se usa un quinto parámetro para especificar una tolerancia relacionada con el
tamaño del paso; las tolerancias por omisión son 0.001 para ODE23 y 0.000001
para ODE45.
Existe un sexto parámetro que sirve para solicitar que la función exhiba resultados
intermedios, es decir, que realice rastreo; el valor por omisión "0" indica que no se
desean rastrear los resultados.
EJEMPLO:
Como ilustración de la función ODE de MATLAB, se presentan los pasos para
calcular soluciones numéricas de ecuaciones diferenciales, las siguientes
instrucciones MATLAB definen las funciones requeridas para evaluar la ecuación
diferencial deseada.
Función dy = g1(x,y)
% g1: Esta función evalúa una ODE ecuación diferencial de primer grado
dy = 3*x.^2;
El siguiente paso consiste en grabar este archivo como "g1.m", sobre algún
subdirectorio de trabajo valido para el MATLAB, las siguientes instrucciones
resuelven g(x,y) dentro del intervalo [2,4] con condición inicial 0.5 para y=f(2).
% Determinar la Solución de la EDO
% dy = 3*x.^2;
[t,y] = ode23('g1',[2,4],0.5);
plot(t,y,'o'),...
title('Solución de la Ecuación dy = 3*x.^2'),...
xlabel('Tiempo'),ylabel('y = f(t)'),grid
Plot: dibuja la función con ciculos en los puntos (véase figura adjunta)
Title: pone titulo en la parte superior del dibujo
Xlabel e ylabel: incorpora texto al eje de abcisas y ordenadas
Grind: añade una red sobre los ejes
Sobre el subdirectorio de trabajo valido se graba este archivo como "mat1.m" y se
escribe mat1, generándose la siguiente solución gráfica.
DEMO:
Esta demo muestra su uso en una ecuación diferencial simple. Tenga en cuenta la
par de las primeras ecuaciones diferenciales ordinarias de orden conocido como el
depredador de Lotka-Volterra modelo de presa.
y1 '= (1 - alfa * y2) * y1
y2 '= (-1 + beta * y1) * y2
Las funciones y1 e y2 medir el tamaño de la presa y las poblaciones de
depredadores, respectivamente. Las cuentas término cuadrático cruz por las
interacciones entre las especies. Tenga en cuenta que la población de presas se
incrementa cuando no hay depredadores, pero la población de depredadores
disminuye cuando no hay presas.
Para simular un sistema, crear una función de M-archivo que devuelve un vector
columna de los derivados de Estado, dado el estado y el tiempo de los valores. Para
este ejemplo, hemos creado un archivo llamado LOTKA.M.
tipo Lotka
yp = función de Lotka (t, y)
Lotka% Lotka-Volterra modelo depredador presa.
yp = diag ([1-.01 * y (2), -1 + .02 * y (1)]) * y;
Para simular la ecuación diferencial se define en Lotka sobre el intervalo 0 <t <15,
invocar ode23. Utilice el valor predeterminado de precisión relativa de 1e-3 (0,1 por
ciento).
% Definir las condiciones iniciales.
t0 = 0;
tfinal = 15;
y0 = [20 20] ';
% Simular la ecuación diferencial.
= tfinal * (1 + tfinal eps);
[t, y] = ode23 ('Lotka', [t0 tfinal], y0);
Terreno el resultado de la simulación de dos maneras diferentes.
subplot (1,2,1)
plot (t, y)
título ('Tiempo de historia')
subplot (1,2,2)
parcela (y (:, 1), y (:, 2))
título ("Diagrama de fase plano")
subplot(m, n, p): divide la ventana en mxn subventanas gráficas.p puede tomar
cualquier valor desde 1 hasta mxn, e indica cual de los dos trozos va a activar para
dibujar sobre él. No es necesario separar los valores m n y p por comas, pueden ir
pegados.
Ahora simular LOTKA utilizando ODE45, en lugar de ode23. ODE45 tarda más
tiempo en cada paso, pero también tiene grandes pasos. Sin embargo, la
producción de ODE45 es suave, porque por defecto el programa de solución utiliza
una fórmula de extensión continua para producir una salida a los 4 puntos de
tiempo equidistantes en el espacio de cada paso dado. La trama se compara este
resultado en contra de la anterior.
[T, Y] = ode45 ('Lotka', [t0 tfinal], y0);
subplot (1,1,1)
título ("Diagrama de fase plano")
parcela (y (:, 1), y (:, 2),'-', Y (:, 1), Y (:, 2),'-');
leyenda ('ode23','ode45')
Para reducir la Orden de una EDO
El código de una ODE de primer orden es muy sencillo. Sin embargo, un segundo
o tercer ODE orden no puede ser utilizado directamente. En primer lugar, debe
escribir la ODE de orden superior como un sistema de EDO de primer orden que
puede ser resuelto con la solucionadores ODE MATLAB.
Este es un ejemplo de cómo reducir una ecuación diferencial de segundo orden en
dos ecuaciones de primer orden para el uso con solucionadores de MATLAB ODE
como ODE45. El siguiente sistema de ecuaciones se compone de un primer y un
segundo ecuaciones diferenciales de orden:
x '=-y * exp (-t / 5) + * y' exp (-t / 5) + 1 ecuación (1)
y''= -2 * sin (t) la ecuación (2)
El primer paso es introducir una nueva variable que es igual a la primera derivada
de la variable libre en la ecuación de segundo orden:
La ecuación y = z '(3)
Tomando la derivada de cada lado se obtiene lo siguiente:
z '= y''la ecuación (4)
Sustituyendo (4) en (2) produce los siguientes:
z '= -2 * sin (t) la ecuación (5)
La combinación de (1), (3), y (5) produce tres ecuaciones diferenciales de primer
orden.
x '=-y * exp (-t / 5) + * y' exp (-t / 5) + 1, la ecuación (1)
La ecuación y = z '(3)
z '= -2 * sin (t) la ecuación (5)
z = y'zy' Puesto que z = y, z para sustituir y 'en la ecuación (1). Además, desde
MATLAB requiere que todos los derivados de estar en el lado izquierdo, vuelva a
escribir la ecuación (3). Esto produce el siguiente conjunto de ecuaciones:
x '=-y * exp (-t / 5) + z * exp (-t / 5) + 1 ecuación (1 bis)
= y 'z la ecuación (6 bis)
z '= -2 * sin (t) La ecuación (5 bis)
Para evaluar este sistema de ecuaciones usando ODE45 u otro programa de
solución de MATLAB ODE, crear una función que contiene las ecuaciones
diferenciales. La función requiere de dos entradas, los estados y el tiempo, y
devuelve los derivados del estado.
odetest.m Lo que sigue es la función denominada odetest.m:
XPRIME odetest función y = (t, x)
% Dado que los estados se pasan como un solo vector, vamos
% X (1) = x
% X (2) = y
X% (3) = z
XPRIME (1) =-x (2) * exp (-t / 5) + x (3) * exp (-t / 5) + 1;
% X '=-y * exp (-t / 5 + z * exp (-t / 5) + 1
XPRIME (2) = x (3);
% Y '= z
XPRIME (3) = -2 * sin (t);
% Z '= -2 * sin (t)
XPRIME XPRIME = (:);
% Esto asegura que el vector devuelto es un vector de columna
Para evaluar el sistema de ecuaciones usando ode23 u otro programa de solución
de MATLAB ODE, definir el inicio y finalización y las condiciones iniciales del vector
de estado. Por ejemplo,
T0 = 5;% Hora de inicio
tf = 20;% del tiempo de parada
x0 = [1 -1 3]% condiciones iniciales
[t, s] = ode23 (@ odetest, [t0, tf], x0);
x = s (:, 1);
y = s (:, 2);
z = s (:, 3);
Descargar