scipy.signal.lti声称能够接受四个数组( A、B、C和D )来定义系统(除了其他方法)。然而,它给了我一个错误,我找不到任何例子来说明这一点。
我的代码很简单:
A=np.array([[0,0,1,0],[0,0,0,1],[-2,1,-.02,.01],[1,-2,.01,-.02]])
B=np.array([[0],[0],[-1],[0]])
C=np.array([[0,0,1,0],[0,0,0,1]])
D=np.array([[0],[0]])
sys=scipy.signal.lti(A,B,C,D) #spelled out有错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/opt/local/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/scipy/signal/ltisys.py", line 317, in __init__
self._update(N)
File "/opt/local/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/scipy/signal/ltisys.py", line 428, in _update
self.C, self.D)
File "/opt/local/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/scipy/signal/ltisys.py", line 259, in ss2zpk
return tf2zpk(*ss2tf(A, B, C, D, input=input))
File "/opt/local/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/scipy/signal/filter_design.py", line 315, in tf2zpk
z = roots(b)
File "/opt/local/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/numpy/lib/polynomial.py", line 203, in roots
raise ValueError("Input must be a rank-1 array.")
ValueError: Input must be a rank-1 array.我在这里错过了什么?矩阵(数组)大小是正确的。
发布于 2015-04-15 21:43:06
在状态空间表示中,输入向量D的大小为2,这意味着该控制系统有2个输出变量。我认为scipy.signal.lti的当前实现不支持这一点。
例如,具有一个输出变量的以下输入确实有效。
C=np.array([[0,0,1,0]])
D=np.array([[0]])进一步详细介绍了。问题是原来的输入参数,
num, den = scipy.signal.ss2tf(A, B, C, D)为分母提供一维数组,为分子提供2D数组(即其中几个,因为有多个输出变量)。但是scipy.signal.tf2zpk(num, den)期望num和den都是多项式(即一维数组)。因此,无法初始化lte类。
https://stackoverflow.com/questions/29660088
复制相似问题