Вы не можете назначить матрицы переменного размера матрицам фиксированного размера в сгенерированном коде. Рассмотрим этот пример:
Компиляция этой функции приводит к следующей ошибке:
??? Dimension 1 is fixed on the left-hand side
but varies on the right ...
Существует несколько способов исправить эту ошибку:
Разрешить матричные A
чтобы расти путем добавления coder.varsize
конструкция:
Явным образом ограничьте размер матрицы B
к 3 на 3, изменяя assert
оператор:
Используйте явную индексацию для создания B
того же размера, что и A
:
Если вы присваиваете пустую матрицу []
к данным переменного размера, MATLAB® может бесшумно изменить форму данных в сгенерированном коде так, чтобы они совпадали coder.varsize
спецификация. Для примера:
В этом примере, coder.varsize
определяет Y
как вектор-столбец до 10 элементов, поэтому его первая размерность фиксируется при размере 1. Оператор Y = []
определяет первую размерность Y
0, что создает несоответствие. Правая сторона назначения является пустой матрицей, а левая - вектором переменного размера. В этом случае MATLAB изменяет форму пустой матрицы Y = []
в сгенерированном коде, чтобы Y = zeros(1,0)
так оно совпадает с coder.varsize
спецификация.