我在控制系统类中使用 SciPy 而不是 MATLAB 来绘制 LTI 系统的阶跃响应。到目前为止效果很好,但是我遇到了一个非常具体的系统的问题。使用此代码:
from numpy import min
from scipy import linspace
from scipy.signal import lti, step
from matplotlib import pyplot as p
# Create an LTI transfer function from coefficients
tf = lti([64], [1, 16, 64])
# Step response (redo it to get better resolution)
t, s = step(tf)
t, s = step(tf, T = linspace(min(t), t[-1], 200))
# Plotting stuff
p.plot(t, s)
p.xlabel('Time / s')
p.ylabel('Displacement / m')
p.show()
代码原样显示一条平线。如果我将分母的最终系数修改为64.00000001
(即tf = lti([64], [1, 16, 64.0000001])
),那么它可以正常工作,显示出欠阻尼的阶跃响应。将系数设置为63.9999999
也有效。将所有系数更改为具有明确的小数位(即 tf = lti([64.0], [1.0, 16.0, 64.0])
)不会影响任何事情,所以我想这不是整数除法搞砸的情况。
这是 SciPy 中的错误,还是我做错了什么?