Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Resolver ecuaciones diferenciales algebraicas (DAE)

¿Qué es una ecuación diferencial algebraica?

Las ecuaciones diferenciales algebraicas son un tipo de ecuación diferencial en la que una o más derivadas de variables dependientes no están presentes en las ecuaciones. Las variables que aparecen en las ecuaciones sin su derivada se llaman algebraicas, y la presencia de variables algebraicas implica que no puede escribir las ecuaciones de forma explícita y'=f(t,y). En su lugar, puede resolver las DAE con estas formas:

  • Los solvers ode15s y ode23t pueden resolver problemas de índice 1 linealmente implícitos con una matriz de masa singular M(t,y)y'=f(t,y), incluidas las DAE semiexplícitas de la forma

    y'=f(t,y,z)0=g(t,y,z).

    En esta forma, la presencia de variables algebraicas lleva a una matriz de masa singular, ya que hay uno o más ceros en la diagonal principal.

    My'=(y'1000y'2000000).

    De forma predeterminada, los solvers prueban automáticamente la singularidad de la matriz de masa para detectar los sistemas de DAE. Si conoce la singularidad de antemano, entonces puede establecer la opción MassSingular de odeset en 'yes'. Con las DAE, también puede proporcionar el solver con una estimación de las condiciones iniciales para y'0 con la propiedad InitialSlope de odeset. Esto se hace además de especificar las condiciones iniciales habituales para y0 en la llamada al solver.

  • El solver ode15i puede resolver DAE más generales de forma plenamente implícita

    f(t,y,y')=0.

    En la forma plenamente implícita, la presencia de variables algebraicas conduce a una matriz jacobina singular. Eso se debe a que está garantizado que al menos una de las columnas de la matriz contiene todos los ceros, ya que la derivada de esa variable no aparece en las ecuaciones.

    J=f/y'=(f1y'1f1y'nfmy'1fmy'n)

    El solver ode15i requiere que especifique las condiciones iniciales tanto para y'0 como para y0. Además, a diferencia de los otros solvers de ODE, ode15i requiere que la función que codifica las ecuaciones acepte una entrada extra: odefun(t,y,yp).

Las DAE surgen en una amplia gama de sistemas porque las leyes de conservación física suelen tener formas como x+y+z=0. Si x, x', y e y' se definen de forma explícita en las ecuaciones, entonces esta ecuación de conservación es suficiente para resolver z sin tener una expresión para z'.

Condiciones iniciales coherentes

Cuando resuelva una DAE, puede especificar las condiciones iniciales tanto para y'0 como para y0. El solver ode15i requiere que se especifiquen ambas condiciones iniciales como argumentos de entrada. Para los solvers ode15s y ode23t, la condición inicial para y'0 es opcional (pero se puede especificar con la opción InitialSlope de odeset). En ambos casos, puede que las condiciones iniciales que especifique no coincidan con las ecuaciones que intenta resolver. Las condiciones iniciales que están en conflicto entre sí se llaman incoherentes. El tratamiento de las condiciones iniciales varía según el solver:

  • ode15s y ode23t: si no especifica una condición inicial para y'0, entonces el solver automáticamente computa condiciones iniciales coherentes basadas en la condición inicial que proporcionó para y0. Si especifica una condición inicial incoherente para y'0, entonces el solver trata los valores como suposiciones, intenta computar valores coherentes cercanos a las suposiciones y continúa resolviendo el problema.

  • ode15i: las condiciones iniciales que proporcione al solver han de ser coherentes, y ode15i no comprueba la coherencia de los valores proporcionados. La función de ayuda decic computa condiciones iniciales coherentes con este propósito.

Índice diferencial

Las DAE se caracterizan por su índice diferencial, que es una medida de su singularidad. Diferenciando ecuaciones puede eliminar las variables algebraicas, y si lo hace las veces suficientes entonces las ecuaciones toman la forma de un sistema de ODE explícitas. El índice diferencial de un sistema de DAE es el número de derivadas que debe tomar para expresar el sistema como un sistema equivalente de ODE explícitas. De esta manera, las ODE tienen un índice diferencial de 0.

Un ejemplo de una DAE de índice 1 es

y(t)=k(t).

A partir de esta ecuación, puede tomar una única derivada para obtener la forma de la ODE explícita

y'=k'(t).

Un ejemplo de una DAE de índice 2 es

y'1=y20=k(t)y1.

Estas ecuaciones requieren que dos derivadas se reescriban en la forma explícita de una ODE

y'1=k'(t)y'2=k''(t).

Los solvers ode15s y ode23t solo resuelven DAE de índice 1. Si el índice de sus ecuaciones es 2 o más, entonces necesita reescribir las ecuaciones como un sistema equivalente de DAE de índice 1. Siempre es posible tomar derivadas y reescribir un sistema de DAR como un sistema equivalente de DAE de índice 1. Tenga en cuenta que si sustituye ecuaciones algebraicas por sus derivadas, entonces podrá haber resuelto algunas limitaciones. Si las ecuaciones ya no incluyen las limitaciones originales, entonces la solución numérica puede desviarse.

Si dispone de Symbolic Math Toolbox™, consulte Solve Differential Algebraic Equations (DAEs) (Symbolic Math Toolbox) para obtener más información.

Imponer la no negatividad

La mayoría de opciones de odeset funcionan como cabe esperar con los solvers de DAE ode15s, ode23t y ode15i. Sin embargo, una excepción notable es el uso de la opción NonNegative. La opción NonNegative no admite solvers implícitos (ode15s, ode23t, ode23tb) aplicados a problemas con una matriz de masa. Por lo tanto, no puede utilizar esta opción para imponer limitaciones de no negatividad en un problema de DAE, que necesariamente tiene una matriz de masa singular. Para obtener más detalles, consulte [1].

Resolver el problema de Robertson como ecuaciones diferenciales algebraicas (DAE) semiexplícitas

Este ejemplo reformula un sistema de ODE como un sistema de ecuaciones diferenciales algebraicas (DAE). El problema de Robertson encontrado en hb1ode.m es un típico problema de prueba para programas que resuelven ODE rígidas. El sistema de ecuaciones es

$$\begin{array}{cl} y'_1 &= -0.04y_1 + 10^4 y_2y_3\\ y'_2 &= 0.04y_1 -
10^4 y_2y_3- (3 \times 10^7)y_2^2\\ y'_3 &= (3 \times
10^7)y_2^2.\end{array}$$

hb1ode resuelve este sistema de ODE a un estado estable con las condiciones iniciales $y_1 = 1$, $y_2 = 0$, y $y_3 = 0$. Pero las ecuaciones también satisfacen una ley de conservación lineal,

$$y'_1 + y'_2 + y'_3 = 0.$$

En términos de la solución y de las condiciones iniciales, la ley de conservación es

$$y_1 + y_2 + y_3 = 1.$$

El sistema de ecuaciones se puede reescribir como un sistema de DAE utilizando la ley de conservación para determinar el estado de $y_3$. Esto reformula el problema como el sistema DAE

$$\begin{array}{cl} y'_1 &= -0.04y_1 + 10^4 y_2y_3\\ y'_2 &= 0.04y_1 -
10^4 y_2y_3-(3 \times 10^7)y_2^2\\ 0 &= y_1 + y_2 + y_3 - 1.\end{array}$$

El índice diferencial de este sistema es 1, dado que solo hace falta una derivada de $y_3$ para hacer que este sea un sistema de ODE. Por lo tanto, no es necesario realizar más transformaciones antes de resolver el sistema.

La función robertsdae codifica este sistema de DAE. Guarde robertsdae.m en la carpeta actual para ejecutar el ejemplo.

function out = robertsdae(t,y)
out = [-0.04*y(1) + 1e4*y(2).*y(3)
   0.04*y(1) - 1e4*y(2).*y(3) - 3e7*y(2).^2
   y(1) + y(2) + y(3) - 1 ];

El código del ejemplo completo para esta formulación del problema de Robertson está disponible en hb1dae.m.

Resuelva el sistema de DAE con ode15s. Según la ley de conservación, las condiciones iniciales coherentes para y0 son obvias. Utilice odeset para establecer las opciones:

  • Utilice una matriz de masa constante para representar el lado izquierdo del sistema de ecuaciones.

$$\left( \begin{array}{c} y'_1\\ y'_2\\ 0 \end{array} \right) = M y'
\rightarrow M = \left( \begin{array}{ccc} 1 & 0 & 0\\ 0 & 1 & 0\\ 0 & 0 &
0 \end{array} \right)$$

  • Establezca la tolerancia relativa a errores en 1e-4.

  • Utilice una tolerancia absoluta de 1e-10 para el componente de la segunda solución, dado que la escala varía drásticamente respecto al resto de componentes.

  • Deje la opción 'MassSingular' en su valor predeterminado 'maybe' para probar la detección automática de una DAE.

y0 = [1; 0; 0];
tspan = [0 4*logspace(-6,6)];
M = [1 0 0; 0 1 0; 0 0 0];
options = odeset('Mass',M,'RelTol',1e-4,'AbsTol',[1e-6 1e-10 1e-6]);
[t,y] = ode15s(@robertsdae,tspan,y0,options);

Represente la solución.

y(:,2) = 1e4*y(:,2);
semilogx(t,y);
ylabel('1e4 * y(:,2)');
title('Robertson DAE problem with a Conservation Law, solved by ODE15S');

Referencias

[1] Shampine, L.F., S. Thompson, J.A. Kierzenka, and G.D. Byrne. "Non-negative solutions of ODEs." Applied Mathematics and Computation. Vol. 170, 2005, pp. 556-569.

Consulte también

| | |

Temas relacionados

Sitios web externos