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
donde es un parámetro escalar. Reescriba esta ecuación como un sistema de las EDO de primer orden, haciendo la sustitución . El sistema de las EDO de primer orden resultante es
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 . Las variables y están representadas por y(1)
e y(2)
, y el vector columna de dos elementos dydt
contiene las expresiones para y .
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 la segunda columna, a .
[t,y] = ode45(@vdp1,[0 20],[2; 0]);
Represente las soluciones de y 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 . Las ecuaciones de van der Pol se vuelven rígidas a medida que aumenta. Por ejemplo, con el valor 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
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 . 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
ode45
| ode23
| ode78
| ode89
| ode113