Вывод нулевого значения из lsim по сравнению с dlsim - PullRequest
1 голос
/ 31 марта 2020

чтобы узнать больше о 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()

enter image description here

Код 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')

enter image description here

ПРИМЕЧАНИЕ: Следы MATLAB lsim и dlsim перекрываются на рисунке

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