Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.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 使用Simulink和tf()对同一系统的不同结果_Matlab_Controls_System_Simulink - Fatal编程技术网

Matlab 使用Simulink和tf()对同一系统的不同结果

Matlab 使用Simulink和tf()对同一系统的不同结果,matlab,controls,system,simulink,Matlab,Controls,System,Simulink,看看下面的简单系统 其中Kp=7130和Kd=59.3880。这些值的设计应确保系统的超调量为20%,稳态误差小于0.01。Simulink模型会产生正确的结果,而tf()不会。这就是模型 其结果是 现在使用tf实现相同的系统,如下所示: clear all clc kp=7130; kd=59.3880; num=[kd kp]; den=[1 18+kd 72+kp]; F=tf(num,den); step(F) stepinfo(F) 产生不同的超调量 有什么建议可以解释为什么

看看下面的简单系统

其中Kp=7130和Kd=59.3880。这些值的设计应确保系统的超调量为20%,稳态误差小于0.01。Simulink模型会产生正确的结果,而
tf()
不会。这就是模型

其结果是

现在使用
tf
实现相同的系统,如下所示:

clear all
clc
kp=7130;
kd=59.3880;
num=[kd kp];
den=[1 18+kd 72+kp];
F=tf(num,den);
step(F)
stepinfo(F)
产生不同的超调量


有什么建议可以解释为什么回复不一致?要使用
tf()
,是否必须将系统设置为特定的形式

错误考虑的是Simulink实现的正确响应<代码>步骤为您提供了正确的响应

Simulink中不存在纯导数,如果尝试使用
[kd,kp]
作为分子,
[1]
作为分母的传递函数块,则会出现错误

使用固定步长积分器时,导数是一个带极点的滤波器,即具有可变步长的行为。控制器的闭环系统的相对阶数为1(1个零,2个极点)

如果查看响应,对于
t=0
,Simulink实现从
dy/dt=0
开始,这在这种闭环系统中是不可能的。正确的响应是
tf
dy/dt>0
for
t=0

你的闭环传递函数是正确的,你应该考虑它的响应是正确的。尝试用Simulink模拟图像中的传递函数。您将看到与

步骤
命令相同的响应

让我们用一些代码来测试这一点:

在图中,我们有三个测试:

  • 解析传递函数
  • 导数的近似
  • 使用导数块进行模拟
尝试实现它并测试tf
s/(0.001 s+1)
中的
0.001
值,您将看到,如果将系数减小到0,传递Fnc2的响应将近似于分析闭环tf的响应(直到某一点Simulink不会计算导数,并将停止模拟)。 最后,Simulink中的解析传递函数给出了与
step
命令相同的响应

在你的评论中,你说你评估了逆拉普拉斯,所以让我们也检查一下逆拉普拉斯。符号工具箱将为我们实现这一点:

syms s kp kd t

Plant = 1/(s^2 + 18 * s + 72)
Reg = kp + kd * s

L = Plant * Reg
ClosedLoop = simplify(L / (1 + L))
Step = 1/s

ResponseStep = simplify(ilaplace(ClosedLoop * Step))

ResponseStep_f = matlabFunction(simplify( ...
  subs( ...
    subs(ResponseStep, kp, 7130), kd, 59.3880)));

t_ = linspace(0, 0.15, 200);
y_ = arrayfun(t_closedLoop_d, t_);
plot(t_, y_);

正如你所看到的,逆拉普拉斯曲线显示了超过25%的超调量

编辑:计算在处计算的逆拉普拉斯


同样,超调量为25.9%

谢谢你的回答
tf
产生不正确的超调量(即27%),但kd和kp的设计应产生20%的超调量。我已经通过确定拉普拉斯逆变换对其进行了双重检查。另外,您认为如何实现非因果控制器?是的,我确定。看一看反向拉普拉斯在你张贴的链接有相同的超调!25.9%,如答案最后部分所示(这与
步骤(tf([…
)预测的超调量完全相同)