чтобы узнать больше о scipy, я пытаюсь сравнить непрерывную и дискретную версии простой модели пространства состояний, используя методы lsim и dlsim. Я обнаружил, что мой scipy dlsim согласен с выводом lsim и dlsim из MATLAB, однако выходной массив scipy lsim - все нули. Я не замечаю проблему, основываясь на скучной документации, но чувствую, что это, должно быть, простая ошибка с моей стороны, и я ищу слова мудрости. Спасибо!
Python Код
import numpy as np
from scipy.signal import StateSpace as ss
from scipy.signal import cont2discrete as c2d
from scipy.signal import lsim, dlsim
import matplotlib.pyplot as plt
A = np.array([[-1, -5], [6, -1]])
B = np.array([[1], [0]])
C = np.array([[0, 1]])
D = np.array([[0]])
dt = 0.01
sys_c = ss(A, B, C, D)
sys_d = c2d((A, B, C, D), dt)
T = np.arange(0, 10, dt)
U = np.sin(T) * 0.1
tC, yC, xC = lsim(sys_c, U, T)
tD, yD, xD = dlsim(sys_d, U, T)
fig, (ax1, ax2) = plt.subplots(2,1)
ax1.plot(T, U, label='Input')
ax1.set_title('Scipy lsim vs dlsim Comparison')
ax1.set(ylabel='Input')
ax1.grid()
ax2.plot(tC, yC, 'b', label='Continuous')
ax2.plot(tD, yD, 'r', label='Discrete')
ax2.set(xlabel= 'Time (sec)', ylabel='Output')
ax2.grid()
plt.legend()
plt.show()
Код MATLAB
x0 = [0; 0]; %initial condition of system states
A = [-1, -5; 6, -1];
B = [1; 0];
C = [0 1];
D = 0;
sys_c = ss(A, B, C, D);
sys_d = c2d(sys_c, 0.01)
t = 0:0.01:10;
u = sin(t) * 0.1;
[y_c, x_c] = lsim(sys_c, u, t, x0);
[y_d, x_d] = lsim(sys_d, u);
figure;
plot(t, u)
figure
plot(t, y_c, 'r'); hold on;
plot(t, y_d, 'b')
legend('Response','Input')
ПРИМЕЧАНИЕ: Следы MATLAB lsim и dlsim перекрываются на рисунке