Contenido principal

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

Resolver ecuaciones diferenciales ordinarias (ODE) no rígidas

Esta página contiene dos ejemplos de resolución de ecuaciones diferenciales ordinarias no rígidas con ode45. MATLAB® tiene varios solvers de ODE no rígidas.

  • ode45

  • ode23

  • ode78

  • ode89

  • ode113

Para la mayoría de los problemas no rígidos, el que mejor funciona es ode45. Sin embargo, se recomienda ode23 en problemas que permitan una tolerancia de error algo más aproximada o con rigidez moderada. Igualmente, ode113 puede ser más eficiente que ode45 en problemas con tolerancias de error más estrictas o cuando la función de ODE es computacionalmente cara de evaluar. ode78 y ode89 son solvers de orden alto que sobresalen con integraciones largas donde la precisión es crucial para la estabilidad.

Si los solvers no rígidos tardan mucho en resolver el problema o dan problemas de integración sistemáticamente, el problema podría ser rígido. Para obtener más información, consulte Solve Stiff ODEs.

Ejemplo: Ecuación de van der Pol no rígida

La ecuación de van der Pol es una ODE de segundo orden

$$y''_1 - \mu \left( 1 - y_1^2\right) y'_1+y_1=0,$$

donde $\mu > 0$ es un parámetro de escalar. Vuelva a escribir esta ecuación como un sistema de ODE de primer orden haciendo la sustitución $y'_1 = y_2$. El sistema resultante de las ODE de primer orden es

$$
\begin{array}{cl}
y'_1 &= y_2\\
y'_2 &= \mu (1-y_1^2) y_2 - y_1.\end{array}
$$

El sistema de las ODE debe codificarse en un archivo de función que el solver de ODE pueda utilizar. La firma funcional general de una función de ODE es

  dydt = odefun(t,y)

Es decir, la función debe aceptar t e y como entradas, aunque no utilice t para ningún cálculo.

El archivo de función vdp1.m codifica la ecuación de van der Pol utilizando $\mu = 1$. Las variables $y_1$ y $y_2$ están representadas por y(1) e y(2), y el vector columna de dos elementos dydt contiene las expresiones para $y'_1$ y $y'_2$.

function dydt = vdp1(t,y)
%VDP1  Evaluate the van der Pol ODEs for mu = 1
%
%   See also ODE113, ODE23, ODE45.

%   Jacek Kierzenka and Lawrence F. Shampine
%   Copyright 1984-2014 The MathWorks, Inc.

dydt = [y(2); (1-y(1)^2)*y(2)-y(1)];

Resuelva la ODE utilizando la función ode45 en el intervalo de tiempo [0 20] con los valores iniciales [2 0]. La salida es un vector columna de puntos de tiempo t y un arreglo de soluciones y. Cada fila en y se corresponde con un tiempo devuelto en la fila correspondiente de t. La primera columna de y corresponde a $y_1$ y la segunda columna, a $y_2$.

[t,y] = ode45(@vdp1,[0 20],[2; 0]);

Represente las soluciones para $y_1$ y $y_2$ con respecto a t.

plot(t,y(:,1),'-o',t,y(:,2),'-o')
title('Solution of van der Pol Equation (\mu = 1) using ODE45');
xlabel('Time t');
ylabel('Solution y');
legend('y_1','y_2')

La función vdpode resuelve el mismo problema, pero acepta un valor especificado por el usuario para $\mu$. Las ecuaciones de van der Pol se vuelven rígidas a medida que $\mu$ aumenta. Por ejemplo, con el valor $\mu = 1000$ tendrá que utilizar un solver rígido como ode15s para resolver el sistema.

Ejemplo: Ecuaciones de Euler no rígidas

Las ecuaciones de Euler para un cuerpo rígido sin fuerzas externas son un problema de prueba estándar para los solvers de ODE destinados a problemas no rígidos.

Las ecuaciones son

$$ \begin{array}{cl} y'_1 &= y_2y_3 \\ y'_2 &= -y_1y_3 \\ y'_3 &=
-0.51y_1y_2. \end{array}$$

El archivo de función rigidode define y resuelve este sistema de ecuaciones de primer orden en el intervalo de tiempo [0 12] usando el vector de condiciones iniciales [0; 1; 1] correspondiente a los valores iniciales de $y_1$, $y_2$ y $y_3$. La función local f(t,y) codifica el sistema de ecuaciones.

rigidode llama a ode45 sin argumentos de salida, por lo que el solver utiliza la función de salida predeterminada odeplot para representar automáticamente los puntos de solución después de cada paso.

function rigidode
%RIGIDODE  Euler equations of a rigid body without external forces.
%   A standard test problem for non-stiff solvers proposed by Krogh.  The
%   analytical solutions are Jacobian elliptic functions, accessible in
%   MATLAB.  The interval here is about 1.5 periods; it is that for which
%   solutions are plotted on p. 243 of Shampine and Gordon.
%
%   L. F. Shampine and M. K. Gordon, Computer Solution of Ordinary
%   Differential Equations, W.H. Freeman & Co., 1975.
%
%   See also ODE45, ODE23, ODE113, FUNCTION_HANDLE.

%   Mark W. Reichelt and Lawrence F. Shampine, 3-23-94, 4-19-94
%   Copyright 1984-2014 The MathWorks, Inc.

tspan = [0 12];
y0 = [0; 1; 1];

% solve the problem using ODE45
figure;
ode45(@f,tspan,y0);

% --------------------------------------------------------------------------

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


Resuelva las ecuaciones de Euler no rígidas llamando a la función rigidode.

rigidode
title('Solution of Rigid Body w/o External Forces using ODE45')
legend('y_1','y_2','y_3','Location','Best')

Consulte también

| | | |

Temas

Sitios web externos