如何使用 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) 中的二阶导数。