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);