Python ValueError:输入必须是秩1数组。使用scipy.signal.ss2zpk时

Python ValueError:输入必须是秩1数组。使用scipy.signal.ss2zpk时,python,numpy,scipy,signal-processing,Python,Numpy,Scipy,Signal Processing,我正在使用scipy.signal并尝试使用scipy.signal.ss2zpk将状态空间表示转换为ZeroPoleGain表示,因为我想更改增益以控制系统。我正在这样做: A = np.array([[0, 1, 0, 0], [0, 0, (-3*m*g*l/(4*M + m)), 0], [0, 0, 0, 1], [0, 0, 3*(M+m)*g/((4*M + m)*l), 0]]) B = np

我正在使用
scipy.signal
并尝试使用
scipy.signal.ss2zpk
将状态空间表示转换为ZeroPoleGain表示,因为我想更改增益以控制系统。我正在这样做:

A = np.array([[0, 1, 0, 0],
              [0, 0, (-3*m*g*l/(4*M + m)), 0], 
              [0, 0, 0, 1],
              [0, 0, 3*(M+m)*g/((4*M + m)*l), 0]])

B = np.array([[0],
              [4/(4*M + m)],
              [0],
              [-3*F/((4*M + m)*l)]])

C = np.array([
              [1,0,0,0],
              [0,0,0,0],
              [0,0,1,0],
              [0,0,0,0]
])

D = np.array([
              [0],
              [0],
              [0],
              [0]
])
sys_zpk = signal.ss2zpk(A,B,C,D)
但我得到了一个错误:

ValueError                                Traceback (most recent call last)
<ipython-input-64-5eec82e63217> in <module>()
----> 1 sys_zpk = signal.ss2zpk(A,B,C,D)

2 frames
/usr/local/lib/python3.6/dist-packages/scipy/signal/lti_conversion.py in ss2zpk(A, B, C, D, input)
    332 
    333     """
--> 334     return tf2zpk(*ss2tf(A, B, C, D, input=input))
    335 
    336 

/usr/local/lib/python3.6/dist-packages/scipy/signal/filter_design.py in tf2zpk(b, a)
   1067     k = b[0]
   1068     b /= b[0]
-> 1069     z = roots(b)
   1070     p = roots(a)
   1071     return z, p, k

<__array_function__ internals> in roots(*args, **kwargs)

/usr/local/lib/python3.6/dist-packages/numpy/lib/polynomial.py in roots(p)
    219     p = atleast_1d(p)
    220     if p.ndim != 1:
--> 221         raise ValueError("Input must be a rank-1 array.")
    222 
    223     # find non-zero array entries

ValueError: Input must be a rank-1 array.
ValueError回溯(最近一次调用)
在()
---->1系统zpk=信号。ss2zpk(A、B、C、D)
2帧
/ss2zpk中的usr/local/lib/python3.6/dist-packages/scipy/signal/lti_conversion.py(A、B、C、D、input)
332
333     """
-->334返回tf2zpk(*ss2tf(A、B、C、D,输入=输入))
335
336
/tf2zpk中的usr/local/lib/python3.6/dist-packages/scipy/signal/filter_design.py(b,a)
1067K=b[0]
1068 b/=b[0]
->1069 z=根(b)
1070 p=根(a)
1071返回z,p,k
根(*args,**kwargs)
/根中的usr/local/lib/python3.6/dist-packages/numpy/lib/polymonery.py(p)
219 p=至少1d(p)
220如果p.ndim!=1:
-->221 raise VALUERROR(“输入必须是秩1数组”)
222
223#查找非零数组项
ValueError:输入必须是秩1数组。

有人能帮我吗?

你的
M,M,g,l的值是多少?我用的是g=9.8,M=1,M=0.1,l=0.5,F=10