Main Content

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 (EDO) 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 EDO 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 cruda o en presencia de una 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 EDO 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 EDO 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 las EDO de primer orden, haciendo la sustitución $y'_1 = y_2$. El sistema de las EDO de primer orden resultante 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 EDO debe codificarse en un archivo de función que el solver de EDO pueda utilizar. La firma funcional general de una función de EDO 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 usando $\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 EDO usando 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 temporales t y un arreglo de soluciones y. Cada fila de y corresponde a una hora devuelta 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 de $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 EDO 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 relacionados

Sitios web externos