ValueError («Полиномиальный знаменатель должен быть массивом ранга 1».) - PullRequest
0 голосов
/ 21 февраля 2012

У меня есть следующий код в lti анализе переходных процессов с использованием Python (numpy, scipy, matplotlib) . Я новичок в питоне. У меня есть матрица передачи, которую я должен построить.

Я сталкивался с математикой: TF . Я пытаюсь следующим образом:

from numpy import min, max
from scipy import linspace
from scipy.signal import lti, step, impulse

num00 = [0.0]
den00 = [0.0]

num01 = [-2383.3]
den01 = [1.0,160.3460,-1962.0,-314598.852]

num10 = [1.0]
den10 = [1.0]

num11 = [31.9361,0,111320.0]
den11 = [1.0,160.3460,-1962.0,-314598.852]

num = [[num00,num01],[num10,num11]]
den = [[den00,den01],[den10,den11]]

tf = lti(num,den)

t = 0    
s = 0

# get t = time, s = unit-step response
t , s = step(tf)

t , s = step(tf, T = linspace(min(t), t[-1], 1000))

t , i = impulse(tf, T = linspace(min(t), t[-1], 1000))

from matplotlib import pyplot as plt

plt.plot(t, s, t, i)

plt.title('Transient-Response Analysis')
plt.xlabel('Time(sec)')
plt.ylabel('Amplitude')
plt.hlines(1, min(t), max(t), colors='r')
plt.hlines(0, min(t), max(t))
plt.xlim(xmax=max(t))
plt.legend(('Unit-Step Response', 'Unit-Impulse Response'), loc=0)
plt.grid()
plt.show()

Я получаю следующую ошибку:

>>> tf = lti(num,den)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python26\lib\site-packages\scipy\signal\ltisys.py", line 236, in __init__self.__dict__['num'], self.__dict__['den'] = normalize(*args)
  File "C:\Python26\lib\site-packages\scipy\signal\filter_design.py", line 276, in normalize raise ValueError("Denominator polynomial must be rank-1 array.") ValueError: Denominator polynomial must be rank-1 array.

1 Ответ

0 голосов
/ 23 февраля 2012

Часть проблемы заключается в том, что передаваемое число / число не является правильно сформированной матрицей. В вашем коде у вас есть:

num01 = [-2383.3]
den01 = [1.0,160.3460,-1962.0,-314598.852]

Это будет работать не очень хорошо, потому что, что касается numpy, вы пытаетесь создать матрицу, я понимаю, что это только один компонент матрицы передаточной функции, только один элемент в числителе и четыре в знаменателе. Так что вам нужно что-то вроде:

num01 = [  0,       0,      0,-2383.3]

Либо так, либо вы хотели иметь числитель чрезвычайно высокого порядка. Когда я пытаюсь сделать шаг, я получаю: Step Что, вероятно, не то, что вы ожидаете. Я также рекомендовал бы заглянуть в пакет python-control . Конечно, вам нужно получить все предварительные требования для этого пакета, такие как пакет pytic * SLICOT . Я верю, что это в конечном итоге послужит вам хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...