Использование функции Matlab при ошибке Simulink
Я новичок в Simulink, но мне нужно использовать функцию Matlab.
Я создал блок "MATLAB Function1" с одним входом (сигнал времени, поступающий из другого блока) и одним выходом (три сигнала, заключенные в матрицу, показанную в блоке Scope).
Вот код внутри функционального блока matlab:
function outputSignal = myFunction(input_signal)
coder.extrinsic('lsim');
time = [1:1:length(input_signal)];
k_dia = [19.5 13 9.9];
k_dia = k_dia*10^-3;
outputSignal = zeros(length(time), length(k_dia));
for j = 1:length(k_dia)
A = [-k_dia(j) 0; k_dia(j) -k_dia(j)];
B = [1 0]';
C = [1 1];
D = 0;
sistem = feval('ss', A, B, C, D);
outputSignal(:,j) = lsim(sistem, input_signal, time);
end
end
Раньше у меня были проблемы с использованием функций "ss" и "lsim" из-за проблем с генерацией кода, но я должен был их решить, используя feval и coder.extrinsic. Теперь у меня есть следующая ошибка:
When simulating the response to a specific input signal, the input data U must be a matrix
of numeric values with at least two rows (samples) and without any NaN or Inf.
и я не могу понять, по-прежнему ли проблема с этими функциями или я ошибся в том, как использовать функции matlab в simulink.
РЕДАКТИРОВАТЬ: я понял, что проблема была в том, что lsim требуется input_signal по крайней мере длиной 2, в то время как моя система дает вход для функции одного единственного значения на каждом временном шаге. Таким образом, если время составляет 10 шагов, а серия значений, сгенерированных из предыдущего блока, равна [1 2 3 4 5 6 7 8 9 10], я хотел бы иметь в качестве входных данных для моей функции:
- [1] на шаге 1,
- [1 2] на шаге 2,
- [1 2 3] на шаге 3,....
- [1 2 3 4 5 6 7 8 9 10] на шаге 10.
Конечно, поскольку lsim не работает с одним значением, на шаге 1 я мог бы использовать выходное значение по умолчанию.
Я думаю, что мне нужен блок, который запоминает то, что происходит на временных шагах раньше, что-то вроде блока Scope, но с выводом.
1 ответ
Поскольку ваши системы не зависят от времени, вы можете создать три отдельные системы пространства состояний, каждая из которых имеет различные матрицы параметров, и предоставить вектор из трех компонентов в качестве входных сигналов, которые я оставил пустыми, потому что я не знаю, откуда вы хотите отправлять.