С control.step_response невозможно получить ожидаемый результат
import control
import numpy as np
import matplotlib.pyplot as plt
Ts = 1
G1 = control.tf([60], [1,0.1])
G2 = control.tf([0.5, 3], [1, 5, 12])
G3 = control.tf([1], [1, 5])
Gs= G1*G2*G3
Gz = control.c2d(Gs,Ts, method='tustin' )
print(Gz)
print(Gs)
cltf=(Gs/(1+Gs))
Zcltf=(Gz/(1+Gz))
T = np.arange(0, 15)
za = control.step_response(cltf, T)
Tout, y = control.step_response(cltf, T)
Tout, x = control.step_response(Zcltf, T)
plt.subplot(2,1,1)
plt.plot(Tout, y)
plt.subpolt(2,1,2)
plt.plot(Tout,y.Tout)
Привет всем, это мой код. Я новичок в Python. И мои пошаговые ответы всегда выглядят так:Этот график
В Matlab я получил их для двухшаговых ответов .
Я не мог понять, в чем причина этого.
1 ответ
вектору времени T нужно больше точек, если вы не ставите шаг, используйте значение по умолчанию. Вы можете попробовать, что T = np.arange(0, 15,0.1).
с другой стороны, если вы не используете T в функции step_response, вычислите вектор времени, но у вас есть проблемы с некоторыми растениями, например, с жесткими растениями.
попробуй это:
Tout, y = control.step_response(cltf)
наконец, вы никогда не рисуете x(выход цифрового шага), вы можете попробовать использовать plt.step() вместо plt.plot() для построения лестницы.
import control
import numpy as np
import matplotlib.pyplot as plt
Ts = 1
G1 = control.tf([60], [1,0.1])
G2 = control.tf([0.5, 3], [1, 5, 12])
G3 = control.tf([1], [1, 5])
Gs= G1*G2*G3
Gz = control.c2d(Gs,Ts, method='tustin' )
print(Gz)
print(Gs)
cltf=(Gs/(1+Gs))
Zcltf=(Gz/(1+Gz))
Tout1, y = control.step_response(cltf)
Tout2, x = control.step_response(Zcltf)
plt.plot(Tout1, y)
plt.figure()
plt.step(Tout2,x)