Настройка вектора u при использовании lsim

У меня есть неприятная ошибка при использовании Matlab, где я пытаюсь смоделировать систему непрерывного времени в дискретном времени.

Ts = 0.01;
A=[-0.313 0 56.7;
    0 56.7 0;
    -0.0139 0 0.426];
B = [0.232; 0; 0.0203];
C = [0 1 0];
D = 0;

SYSC = ss(A,B,C,D);
SYSD = c2d(SYSC,Ts);

t = linspace(0,10,10/0.01)';
u = zeros(1000,3);
u(:) = 0.2;
lsim(SYSD,u,t);

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

When simulating the response to a specific input signal, the
input data U must be a matrix with as many rows as samples in
the time vector T, and as many columns as input channels

Что здесь подразумевается под входными каналами? В целом я не уверен, как я могу исправить эту ошибку. У меня есть установленное время, в течение которого я хочу запустить симуляцию, но я не знаю, как правильно настроить вектор входных данных. Я моделирую три состояния.


person J_code    schedule 15.10.2020    source источник


Ответы (1)


Если ваша входная матрица B = [0.232; 0; 0.0203] и представляет собой вектор-столбец 3 на 1, то линейная система, заданная A*x + B*u, имеет только один управляющий вход.

Итак, u должно быть:

u = zeros(1000,1);
u(:) = 0.2;

И вы можете смоделировать систему дискретного времени, используя

lsim(SYSD,u,[]);

Обратите внимание, что вам не нужно определять вектор времени в lsim для дискретного моделирования, потому что u дискретизируется с той же частотой, что и SYSD.

Если бы матрица B была 3 на 3, вам нужно было бы иметь 3 управляющих входа.

person juju89    schedule 15.10.2020
comment
Ваш ответ относительно размера t имеет смысл. Но ваш подход дает мне вывод всех нулей, чего не должно быть. Кроме того, почему аргумент t здесь пуст? Я хочу моделировать в течение определенного периода времени. На самом деле, создание u и t одинакового размера вектора приводит к указанной выше ошибке. Я в замешательстве. - person J_code; 18.10.2020