Второе изображение показывает, что выходные данные второй функции являются скалярами - размерность на выходе блока равна 1, а не 38, как вы считаете.
То есть ваши функции не дают такой же вывод, как вы считаете.
Ошибка заключается в том, что блоки Selector
ожидают, что их входы будут иметь размерность 38, а они - нет.
Чтобы определить, почему то, что, по вашему мнению, происходит, на самом деле не то, что происходит, вы можете использовать редактор, чтобы установить точку останова в m-коде, запустить модель, а затем пошагово пройти по коду, чтобы определить, почему он дает скаляр вывод, когда вы ожидаете, что это будет иначе.
Другой подход - запускать ваши функции из командной строки MATLAB с поддельными входными данными. Что-то вроде
tmp = desiredtrajectory(randn(10,1))
здесь будет уместно.
Ответ таков: desiredtrajectory
выводит desired_state
, который является символической переменной. Да, он содержит вектор из 38 элементов, но Simulink рассматривает объект как скаляр.
Реальная проблема заключается в том, что вы не можете распространять символическую переменную по сигналу Simulink. Вам нужен вывод, чтобы быть числовым вектором.
Один из способов преодолеть это - поставить строку
desired_state = double(desired_state);
в конце вашего файла, чтобы привести символический объект к двойному объекту, который будет иметь 38 элементов.
(Однако непонятно, почему вы в первую очередь используете символическую математику, и я бы предположил, что она будет лучше и, безусловно, более эффективна, если вы ее не используете.)