Я пытаюсь создать модель simulink, которая выполняет несколько матричных умножений, но, похоже, не могу правильно ввести входные данные.
Это настройка модели. Ветер и гравитация представляют собой векторы 3x1, а DCM — матрицу 3x3, исходящую от объекта с фиксированной массой 6DOF.
Сама модель выглядит так:
Учитывая размеры, ожидаемое умножение должно привести к (3x3) * (3x1) = (3x1). Однако при запуске моделирования я получаю несколько ошибок несоответствия размеров.
Error using uavsim (line 7)
Error due to multiple causes.
Caused by:
Error using uavsim (line 7)
Error in port widths or dimensions. 'Output Port 1' of 'storm_uav/Constant2' is a [3x1] matrix.
Error using uavsim (line 7)
Error in port widths or dimensions. 'Input Port 1' of 'storm_uav/Model5' is a one dimensional vector with 1 elements.
Я не уверен, в чем здесь проблема, поскольку, по моему мнению, размеры должны быть правильными. Кажется, я не могу передать векторы в данную модель, поскольку модель ожидает какое-то другое измерение, даже если оно должно быть унаследовано?
Помощь очень ценится.
Вы используете ссылку на модель, с которой я не совсем знаком, но это своего рода предварительно скомпилированный блок. По данным Справочного центра , такой блок имеет «определенный интерфейс», который делает «модель, на которую ссылаются, независимой от ее контекста в иерархии модели».
Поэтому входные измерения, вероятно, не наследуются по этой причине. Вы можете убедиться в этом, напрямую скопировав и вставив содержимое этого блока в обычную подсистему, чтобы проверить, работает ли он должным образом.
Обновлено:
Чтобы определить атрибут сигнала интерфейса, в частности его размерность, вам необходимо указать размерность Inport корневого уровня эталонной модели (подробнее => Справочный центр).
Да, я протестировал то же содержимое в родительской модели, и оно работает так, как ожидалось. Должен ли я просто использовать подмодуль для инкапсуляции блоков? Что было бы подходящим способом? Или есть способ заранее определить интерфейс модели? Я попытался установить размеры вручную, но это не помогло.