Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在MATLAB中使用ode23求解三阶微分方程并绘制阶跃响应_Matlab_Differential Equations - Fatal编程技术网

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

如何在MATLAB中使用ode23求解三阶微分方程并绘制阶跃响应,matlab,differential-equations,Matlab,Differential Equations,我的解决方案基于提供的示例 我的问题是,我必须通过使用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

我的解决方案基于提供的示例

我的问题是,我必须通过使用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中使用状态空间表示命令生成的阶跃响应与ode23生成的阶跃响应不匹配,因此我假设我错误地解出了微分方程。任何提示或评论都会非常有用

来自ss命令的阶跃响应:

使用ode23的步骤响应:


我不确定链接的问题是如何得到正确答案的,因为你实际上是在用他们的方法求解一个四阶方程。 对于n阶问题,赋给ODE套件的右侧向量应该只有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

给出了与状态空间模型相匹配的解决方案。

我不确定链接问题是如何得到正确答案的,因为您实际上是在用他们的方法求解一个四阶方程。 对于n阶问题,赋给ODE套件的右侧向量应该只有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

给出了与状态空间模型相匹配的解决方案。

我不确定链接问题是如何得到正确答案的,因为您实际上是在用他们的方法求解一个四阶方程。 对于n阶问题,赋给ODE套件的右侧向量应该只有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

给出了与状态空间模型相匹配的解决方案。

我不确定链接问题是如何得到正确答案的,因为您实际上是在用他们的方法求解一个四阶方程。 对于n阶问题,赋给ODE套件的右侧向量应该只有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


给出与状态空间模型匹配的解决方案。

您的解决方案似乎合理,但我不熟悉
ss
和朋友。您是否确定您正在将同一系统输入到
ss
进行检查?我非常确定我输入了同一系统。我想我得等一个熟悉状态空间的人。无论如何,谢谢:)看起来:)您是否有意使用非零初始条件,与代码中的注释相矛盾?进入
ode23
y(t=0)
的第三个参数为非零。感谢您的更正!然而,我仍然没有得到与之匹配的step响应。我不确定是因为我使用的输入u是heaviside函数,我过去因为它遇到过问题,还是因为其他原因。你的解决方案似乎合理,但我不熟悉
ss
和朋友。您是否确定您正在将同一系统输入到
ss
进行检查?我非常确定我输入了同一系统。我想我得等一个熟悉状态空间的人。无论如何,谢谢:)看起来:)您是否有意使用非零初始条件,与代码中的注释相矛盾?进入
ode23
y(t=0)
的第三个参数为非零。感谢您的更正!然而,我仍然没有得到与之匹配的step响应。我不确定是因为我使用的输入u是heaviside函数,我过去因为它遇到过问题,还是因为其他原因。你的解决方案似乎合理,但我不熟悉
ss
和朋友。您是否确定您正在将同一系统输入到
ss
进行检查?我非常确定我输入了同一系统。我想我得等一个熟悉状态空间的人。无论如何,谢谢:)看起来:)您是否有意使用非零初始条件,与代码中的注释相矛盾?进入
ode23
y(t=0)
的第三个参数为非零。感谢您的更正!然而,我仍然没有得到与之匹配的step响应。我不确定是因为我使用的输入u是heaviside函数,我过去因为它遇到过问题,还是因为其他原因。你的解决方案似乎合理,但我不熟悉
ss
和朋友。您是否确定您正在将同一系统输入到
ss
进行检查?我非常确定我输入了同一系统。我想我得等一个熟悉状态空间的人。无论如何,谢谢:)看起来:)您是否有意使用非零初始条件,与代码中的注释相矛盾?进入
ode23
y(t=0)
的第三个参数为非零。感谢您的更正!然而,我仍然没有得到与之匹配的step响应。我不确定这是因为我使用的输入u是heaviside函数,我在过去因为它遇到了问题,还是因为其他原因。哇,我想你总是要交叉检查答案,即使他们被投票了。非常感谢,这很有帮助。哦,哇,我想你总是要交叉核对答案,即使他们被投票了。非常感谢,这很有帮助。哦,哇,我想你总是这样