如何使用 ode45 [MATLAB] 保存输出变量?
How to save an output variable using ode45 [MATLAB]?
我有一个二阶微分方程
function Xdot =second_order(t,X)
y=X(1);
y_d=X(2);
Xdot=zeros(2,1);
Xdot(1)=y_d;
Xdot(2)= -5*y_d-7;
y_dd=Xdot(2);
end
使用 MATLAB ode45 命令,我可以模拟它 [t,X]=ode45(@(t,X)second_order(t,X),tspan,X0);
我能够以这种方式捕获向量中的两个状态变量 y 和 y_d 作为时间的函数。
我想捕捉 y_dd 作为时间函数的向量,但我无法保存它。如何将其视为输出变量?
我已尝试对我的函数文件 function [Xdot,y_dd] =second_order(t,X)
进行以下更改,但我不明白如何使用 ode45 命令,因此我也可以在其执行期间保存 y_dd。
只需在轨迹点上评估second_order
函数。结果的第二部分是所需的导数。
您还有评估函数 deval
,可以访问解的 "dense output" 插值和这些点的斜率,请参阅 https://de.mathworks.com/help/matlab/ref/deval.html#bu7i1mf
sol=ode45(@second_order,[tspan(1) tspan(end)] ,X0);
[X,Xp] = deval(sol,tspan)
您应该发现 X(:,2)
和 Xp(:,1)
中的一阶导数(几乎)相同,然后是 Xp(:,2)
中的二阶导数。
我有一个二阶微分方程
function Xdot =second_order(t,X)
y=X(1);
y_d=X(2);
Xdot=zeros(2,1);
Xdot(1)=y_d;
Xdot(2)= -5*y_d-7;
y_dd=Xdot(2);
end
使用 MATLAB ode45 命令,我可以模拟它 [t,X]=ode45(@(t,X)second_order(t,X),tspan,X0);
我能够以这种方式捕获向量中的两个状态变量 y 和 y_d 作为时间的函数。
我想捕捉 y_dd 作为时间函数的向量,但我无法保存它。如何将其视为输出变量?
我已尝试对我的函数文件 function [Xdot,y_dd] =second_order(t,X)
进行以下更改,但我不明白如何使用 ode45 命令,因此我也可以在其执行期间保存 y_dd。
只需在轨迹点上评估second_order
函数。结果的第二部分是所需的导数。
您还有评估函数 deval
,可以访问解的 "dense output" 插值和这些点的斜率,请参阅 https://de.mathworks.com/help/matlab/ref/deval.html#bu7i1mf
sol=ode45(@second_order,[tspan(1) tspan(end)] ,X0);
[X,Xp] = deval(sol,tspan)
您应该发现 X(:,2)
和 Xp(:,1)
中的一阶导数(几乎)相同,然后是 Xp(:,2)
中的二阶导数。