Я новичок в Simulink, но мне нужно использовать функцию matlab.Использование функции matlab в ошибке simulink
Я создал блок «MATLAB Function1» с одним входом (сигнал времени, поступающий от другого блока) и один выход (три сигнала, завернутые в матрицу, показанную в блоке области).
Вот код внутри функции 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
Раньше у меня были проблемы с использованием функции «сс» и «lsim» из-за проблем с генерацией кода, но я должен был решить их с помощью feval и кодировщик .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.
EDIT: Я понял, что проблема связана с тем, что lsim требует входной_сигнал длиной не менее 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, но с выходом.
Было бы хорошо, если бы вы могли обеспечить входной сигнал, который вы используете, чтобы проверить вашу модель. –
У вас есть 3 системы, о чем свидетельствует ваш цикл с 3 независимыми вызовами 'ss' и' lsim'. Вместо этого используйте предоставленный блок Simulink 'State-Space'. В вашем вопросе не рассматривается вопрос о том, почему вы должны использовать функциональный блок Matlab. – Matt