如何在 MATLAB 中使用 ode23 求解三阶微分方程并绘制阶跃响应

How do I solve a third order differential equation using ode23 in MATLAB and plot the step response

我的解决方案基于 Matlab - solving a third order differential equation 提供的示例。

我的问题是我必须使用 ode23 求解器求解三阶微分方程 y'''+3y''+2y'+y=4u 并绘制阶跃响应。 这是我目前所拥有的。

function dy = diffuy( t, y )
%Split uy into variables in equation
%y'''+3y''+2y'+y=4u
%Have to take third order equation and convert to 1st order
%y0 = y
%y1 = y0'
%y2 = y1'
%y3 = y2'

%y0' = y1
%y1' = y2
%y2' = y3
%y3' = y''' = -3*y2-2*y1-y0+4*u
%Assume that y(0)= 0, y'(0)=0, y''(0)=0, no initial conditions
u = @(t) heaviside(t);

dy =  zeros(4,1);
dy(1) = y(2);
dy(2) = y(3);
dy(3) = y(4);
dy(4) = -3*y(3)-2*y(2)-y(1)+4*u(t);
end

在我的主文件中,我有代码:

[T, Y]=ode23(@diffuy,[0 20],[0 0 0 0]);
figure(1)
plot(T,Y(:,1))


A=[0 1 0;0 0 1; -1 -2 -3]
B=[0;0;4]
C=[1 0 0]
D=[0]

sys4=ss(A,B,C,D)
figure(2)
step(sys4)

我遇到的问题是在 MATLAB 中使用 state-space 表示命令产生的阶跃响应与 ode23 产生的阶跃响应不匹配,所以我假设我求解了微分方程不正确。任何提示或评论都会非常有帮助。

ss 命令的步骤响应:

使用 ode23 的阶跃响应:

我不确定链接的问题是如何得到正确答案的,因为您实际上是在使用他们的方法求解 fourth-order 方程。 为 ODE 套件提供的正确 hand-side 向量应该只有 n 个条目用于 n 阶问题。

在你的例子中,变量的变化

三阶系统结果

具有初始条件

.

diffuy 更改为

function dy = diffuy( t, y )        
    dy =  zeros(3,1);
    dy(1) = y(2);
    dy(2) = y(3);
    dy(3) = -3*y(3)-2*y(2)-y(1)+4*u(t);
end

给出了与 state-space 模型匹配的解决方案。