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

时间:2015-08-29 23:15:57

标签: matlab differential-equations

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

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

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中使用状态空间表示命令产生的阶跃响应与ode23产生的阶跃响应不匹配,所以我假设我错误地解决了微分方程。任何提示或评论都会非常有用。

来自ss命令的步骤响应: enter image description here

使用ode23的步骤响应:

enter image description here

1 个答案:

答案 0 :(得分:3)

我不确定相关问题是如何得到正确答案的,因为您实际上是使用他们的方法解决了四阶方程。 给予ODE套件的右侧向量应该只有 n 条目的 n 条目。

在您的情况下,变量的变化

Change of variables matrix

导致三阶系统

Third order system equation

初始条件

Initial conditions equation

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

提供与状态空间模型匹配的解决方案。