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.

Resolver ODE no rígidas

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

  • ode45

  • ode23

  • ode113

Para la mayoría de los problemas no rígidos, ode45 funciona mejor. Sin embargo, se recomienda utilizar ode23 para problemas que permiten una tolerancia al error ligeramente más cruda o si existe una rigidez moderada. Asimismo, ode113 puede resultar más eficiente que ode45 en problemas con una tolerancia a errores estricta.

Si a los solvers no rígidos les lleva mucho tiempo resolver el problema o sistemáticamente falla la integración, entonces puede que el problema sea rígido. Para obtener más información, consulte Resolver ODE rígidas.

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 escalar. Reescriba esta ecuación como un sistema de ODE de primer orden realizando la sustitución $y'_1 = y_2$. El sistema resultante de 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 ODE debe codificarse en un archivo de función que el solver de ODE pueda utilizar. La firma funcional general de una función ODE es

  dydt = odefun(t,y)

Es decir, la función debe aceptar como entradas tanto t e y, incluso si no utiliza t para ningún cálculo.

El archivo de función vdp1.m codifica la ecuación de van der Pol con $\mu = 1$. Las variables $y_1$ y $y_2$ se representan con 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 mediante 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 de y corresponde a un momento 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$. La ecuación de van der Pol se vuelve rígida a medida que $\mu$ aumenta. Por ejemplo, con el valor $\mu = 1000$ debe utilizar un solver rígido como ode15s para resolver el sistema.

Ejemplo: ecuaciones de Euler no rígidas

Las ecuaciones de Euler de un cuerpo rígido sin fuerzas externas son una prueba estándar para los solvers de ODE pensados para los 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 sistemas de ecuaciones de primer orden en el intervalo de tiempo [0 12], con 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 ningún argumento de salida, para que el solver utilice 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 relacionados