【问题标题】:How to save an output variable using ode45 [MATLAB]?如何使用 ode45 [MATLAB] 保存输出变量?
【发布时间】:2020-01-01 20:12:03
【问题描述】:

我有一个二阶微分方程

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。

【问题讨论】:

    标签: matlab simulation ode differential-equations


    【解决方案1】:

    只需评估轨迹点上的second_order 函数。结果的第二部分是所需的导数。

    您还拥有评估函数deval,可以访问解的“密集输出”插值以及这些点的斜率,请参阅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) 中的二阶导数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多