Main Content

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.

Elegir un solver de ODE

Ecuaciones diferenciales ordinarias

Una ecuación diferencial ordinaria (ODE) contiene una o más derivadas de una variable dependiente, y, con respecto a una única variable dependiente, t, a la que se suele hacer referencia como tiempo. La notación que aquí se utiliza para representar las derivadas de y con respecto a t es y' para una primera derivada, y'' para una segunda derivada, y así sucesivamente. El orden de las ODE es igual a la derivada del orden más alto de y que aparece en la ecuación.

Por ejemplo, esta es una ODE de segundo orden:

y''=9y

En un problema de valor inicial del problema, la ODE se resuelve comenzando a partir de un estado inicial. Con la condición inicial, y0, así como con un periodo de tiempo del que se obtenga la respuesta, (t0,tf), la solución se obtiene de forma iterativa. En cada paso el solver aplica un algoritmo particular al resultado de los pasos previos. En el primero de dichos pasos, la condición inicial proporciona la información necesaria que permite que se realice la integración. El resultado final es que el solver de la ODE devuelve un vector de pasos temporales t=[t0,t1,t2,...,tf] así como la solución correspondiente en cada paso y=[y0,y1,y2,...,yf].

Tipos de ODE

Los solvers de las ODE en MATLAB® resuelven este tipo de ODE de primer orden:

  • ODE explícitas con la forma y'=f(t,y).

  • ODE linealmente implícitas con la forma M(t,y)y'=f(t,y), donde M(t,y) es una matriz de masa no singular. La matriz de masa puede depender del tiempo o del estado, o puede ser una matriz constante. Las ODE linealmente implícitas implican combinaciones lineales de la primera derivada de y, que están codificadas en la matriz de masa.

    Las ODE linealmente implícitas siempre pueden transformarse a una forma explícita, y'=M1(t,y)f(t,y). Sin embargo, especificar la matriz de masa directamente en el solver de la ODE evita esta transformación, que resulta inconveniente y puede resultar computacionalmente costosa.

  • Si faltan algunos componentes de y', entonces las ecuaciones se denominan ecuaciones diferenciales algebraicas, o DAE, y el sistema de DAE contiene algunas variables algebraicas. Las variables algebraicas son variables dependientes cuyas derivadas no aparecen en las ecuaciones. Un sistema de DAE se puede reescribir como un sistema equivalente de ODE de primer orden tomando las derivadas de las ecuaciones para eliminar las variables algebraicas. El número de derivadas necesarias para reescribir una DAE como una ODE se denomina el índice diferencial. Los solvers ode15s y ode23t pueden resolver DAE de índice 1.

  • ODE completamente implícitas con la forma f(t,y,y')=0. Las ODE completamente implícitas no pueden reescribirse de forma explícita, y también podrían contener algunas variables algebraicas. El solver ode15i está diseñado para problemas completamente implícitos, incluidas las DAE de índice 1.

Puede proporcionar información adicional al solver para ciertos tipos de problemas con la función odeset para crear una estructura de opciones.

Sistemas de ODE

Puede especificar cualquier número de ecuaciones ODE acopladas que resolver, y en principio el número de ecuaciones solo está limitado por la memoria disponible del ordenador. Si el sistema de ecuaciones tiene n ecuaciones,

(y'1y'2y'n)=(f1(t,y1,y2,...,yn)f2(t,y1,y2,...,yn)fn(t,y1,y2,...,yn)),

entonces la función que codifica las ecuaciones devuelve un vector con n elementos, que corresponden a los valores para y'1,y'2,,y'n. Por ejemplo, considere el sistema de dos ecuaciones

{y'1=y2y'2=y1y22.

Una función que codifica estas ecuaciones es

function dy = myODE(t,y)
dy(1) = y(2);
dy(2) = y(1)*y(2)-2;

ODE de orden superior

Los solvers de ODE de MATLAB solo resuelven ecuaciones de primer orden. Tendrá que reescribir las ODE de orden superior como un sistema equivalente de ecuaciones de primer orden con las sustituciones genéricas

y1=yy2=y'y3=y''yn=y(n1).

El resultado de estas sustituciones es un sistema de n ecuaciones de primer orden

{y'1=y2y'2=y3y'n=f(t,y1,y2,...,yn).

Por ejemplo, considere las ODE de tercer orden

y'''y''y+1=0.

Con las sustituciones

y1=yy2=y'y3=y''

resulta en el sistema equivalente de primer orden

{y'1=y2y'2=y3y'3=y1y31.

El código de este sistema de ecuaciones es entonces

function dydt = f(t,y)
dydt(1) = y(2);
dydt(2) = y(3);
dydt(3) = y(1)*y(3)-1;

ODE complejas

Considere las ecuaciones ODE complejas

y'=f(t,y),

donde y=y1+iy2. Para resolverlo, separe las partes reales e imaginarias en diferentes componentes de la solución y luego recombine los resultados al final. Conceptualmente, tiene esta apariencia

yv=[Real(y)Imag(y)]fv=[Real(f(t,y))Imag(f(t,y))].

Por ejemplo, si la ODE es y'=yt+2i, entonces podrá representar la ecuación con un archivo de función.

function f = complexf(t,y)
% Define function that takes and returns complex values
f = y.*t + 2*i;

Entonces, el código para separar las partes reales e imaginarias es

function fv = imaginaryODE(t,yv)
% Construct y from the real and imaginary components
y = yv(1) + i*yv(2);            

% Evaluate the function
yp = complexf(t,y);             

% Return real and imaginary in separate components
fv = [real(yp); imag(yp)];      

Cuando ejecute un solver para obtener la solución, la condición inicial y0 también se separa en partes reales e imaginarias para proporcionar una condición inicial para cada componente de la solución.

y0 = 1+i;
yv0 = [real(y0); imag(y0)];
tspan = [0 2];
[t,yv] = ode45(@imaginaryODE, tspan, yv0);

Una vez obtenida la solución, combine los componentes reales e imaginarios entre sí para obtener el resultado final.

y = yv(:,1) + i*yv(:,2);

Selección de solver básicos

ode45 funciona bien con la mayoría de problemas de ODE y en general debería ser el solver que eligiera en primer lugar. Sin embargo, ode23 y ode113 pueden resultar más eficientes que ode45 para problemas con mayores o menores requisitos de precisión.

Algunos problemas de ODE muestran una rigidez o dificultad en la evaluación. La rigidez es un término que resulta difícil definir con precisión, pero en general, la rigidez se da cuando existe una diferencia de escala en algún lugar del problema. Por ejemplo, si una ODE tiene dos componentes de solución que varían drásticamente en escalas de tiempo diferentes, entonces puede que la ecuación sea rígida. Puede identificar un problema como rígido si los solvers no rígidos (como por ejemplo ode45) no son capaces de resolver el problema o resultan extremadamente lentos. Si observa que un solver no rígido es muy lento, en su lugar intente probar un solver rígido como por ejemplo ode15s. Cuando utilice un solver rígido, puede mejorar la fiabilidad y la eficiencia proporcionando la matriz jacobina o su patrón de dispersión.

Esta tabla proporciona las pautas generales sobre cuándo utilizar cada uno de los diferentes solvers.

SolverTipo de problemaPrecisiónCuándo usarlo
ode45No rígidoMedia

La mayoría de las veces. ode45 debería ser el primer solver que pruebe.

ode23Baja

ode23 puede resultar más eficiente que ode45 en problemas con tolerancias crudas, o en presencia de una rigidez moderada.

ode113Baja a alta

ode113 puede resultar más eficiente que ode45 en problemas con tolerancias estrictas, o cuando resulta costoso evaluar la función de ODE.

ode15sRígidoBajo a medio

Pruebe ode15s cuando ode45 falle o resulte poco eficiente y sospeche que el problema es rígido. Utilice también ode15s al resolver ecuaciones diferenciales algebraicas (DAE).

ode23sBajo

ode23s puede resultar más eficiente que ode15s en problemas con una tolerancia a errores cruda. Puede resolver algunos problemas rígidos para los que ode15s no resulta efectivo.

ode23s computa la jacobina en cada paso, por lo que resulta beneficioso proporcionar la jacobina a través de odeset para maximizar la eficiencia y la precisión.

Si existe una matriz de masa, debe ser constante.

ode23tBajo

Utilice ode23t si el problema solo es moderadamente rígido y necesita una solución sin atenuación numérica. 

ode23t puede resolver ecuaciones diferenciales algebraicas (DAE).

ode23tbBajo

Como ode23s, el solver ode23tb puede resultar más eficiente que ode15s en problemas con una tolerancia a errores cruda.

ode15iPlenamente implícitoBajo

Utilice ode15i para problemas plenamente implícitos f(t,y,y’) = 0 y para ecuaciones diferenciales algebraicas (DAE) de índice 1.

Para obtener más detalles y recomendaciones sobre cuándo utilizar cada solver, consulte [5].

Resumen de ejemplos y archivos de ODE

Hay varios ejemplos de archivos disponibles que sirven como puntos de inicio excelentes para la mayoría de problemas de ODE. Para ejecutar la app de Ejemplos de ecuaciones diferenciales, que le permite explorar fácilmente y ejecutar ejemplos, escriba

odeexamples

Para abrir un archivo de ejemplo individual para editarlo, escriba

edit exampleFileName.m

Para ejecutar un ejemplo, teclee

exampleFileName

Esta tabla recoge una lista de los archivos de ejemplo de ODE y de DAE disponibles, así como los solvers y las opciones que utilizan. Para el subconjunto de ejemplos que también se publican directamente en la documentación, se incluyen enlaces.

Archivo de ejemploSolver utilizadoOpciones especificadasDescripciónEnlace a documentación
amp1daeode23t
  • 'Mass'

DAE rígida, circuito eléctrico con matriz de masa constante y singular

ballodeode23
  • 'Events'

  • 'OutputFcn'

  • 'OutputSel'

  • 'Refine'

  • 'InitialStep'

  • 'MaxStep'

Ubicación de eventos simple. Pelota botando

Ubicación de eventos de ODE
batonodeode45
  • 'Mass'

ODE con matriz de masa dependiente del tiempo y del estado. Movimiento de un testigo

brussodeode15s
  • 'JPattern'

  • 'Vectorized'

Problema rígido grande. Difusión en una reacción química (el Brusselator)

Resolver ODE rígidas
burgersodeode15s
  • 'Mass'

  • 'MStateDependence'

  • 'JPattern'

  • 'MvPattern'

  • 'RelTol'

  • 'AbsTol'

ODE con una matriz de masa con gran dependencia del estado. Ecuación de Burgers resuelta con una técnica de red en movimiento

fem1odeode15s
  • 'Mass'

  • 'MStateDependence'

  • 'Jacobian'

Problema rígido con una matriz de masa con dependencia del tiempo. Método del elemento finito

fem2odeode23s
  • 'Mass'

Problema rígido con una matriz de masa constante. Método del elemento finito

hb1odeode15s

Problema de ODE rígida resuelto en un intervalo muy largo. Reacción química de Robertson

hb1daeode15s
  • 'Mass'

  • 'RelTol'

  • 'AbsTol'

  • 'Vectorized'

DAE rígida linealmente implícita a partir de una ley de conservación. Reacción química de Robertson

Solve Robertson Problem as Semi-Explicit Differential Algebraic Equations (DAEs)
ihb1daeode15i
  • 'RelTol'

  • 'AbsTol'

  • 'Jacobian'

DAE rígida, completamente implícita. Reacción química de Robertson

Solve Robertson Problem as Implicit Differential Algebraic Equations (DAEs)
iburgersodeode15i
  • 'RelTol'

  • 'AbsTol'

  • 'Jacobian'

  • 'JPattern'

Sistema de ODE implícito. Ecuación de Burgers

kneeodeode15s
  • 'NonNegative'

El "problema de rodilla" con restricciones no negativas

Solución de ODE no negativas
orbitodeode45
  • 'RelTol'

  • 'AbsTol'

  • 'Events'

  • 'OutputFcn'

Ubicación de eventos avanzada. Problema de tres cuerpos restringido

Ubicación de eventos de ODE
rigidodeode45

Problema no rígido. Ecuaciones de Euler de un cuerpo rígido sin fuerzas externas

Resolver ODE no rígidas
vdpodeode15s
  • 'Jacobian'

Ecuación de van der Pol parametrizable (rígido para grandes μ)

Resolver ODE rígidas

Referencias

[1] Shampine, L. F. and M. K. Gordon, Computer Solution of Ordinary Differential Equations: the Initial Value Problem, W. H. Freeman, San Francisco, 1975.

[2] Forsythe, G., M. Malcolm, and C. Moler, Computer Methods for Mathematical Computations, Prentice-Hall, New Jersey, 1977.

[3] Kahaner, D., C. Moler, and S. Nash, Numerical Methods and Software, Prentice-Hall, New Jersey, 1989.

[4] Shampine, L. F., Numerical Solution of Ordinary Differential Equations, Chapman & Hall, New York, 1994.

[5] Shampine, L. F. and M. W. Reichelt, “The MATLAB ODE Suite,” SIAM Journal on Scientific Computing, Vol. 18, 1997, pp. 1–22.

[6] Shampine, L. F., Gladwell, I. and S. Thompson, Solving ODEs with MATLAB, Cambridge University Press, Cambridge UK, 2003.

Consulte también

|

Temas relacionados

Sitios web externos