【发布时间】:2013-04-19 23:41:22
【问题描述】:
我在控制系统类中使用 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 中的错误,还是我做错了什么?
【问题讨论】:
-
我不确定您所说的“而不是”是什么意思,您使用 scipy 进行计算,使用 maplotlib 进行绘图,完全符合它们的设计用途。
-
你确定那组参数是非奇异的吗?您是否对 matplotlib 有任何问题,或者只是使用它?
-
@tcaswell 我使用的是 Python 库而不是 MATLAB。我不知道参数必须是非奇异的,谢谢!
标签: python matplotlib scipy