Укажите верхние границы массива, если:
Динамическое выделение памяти отключено.
Если динамическое выделение памяти отключено, необходимо указать верхние границы для всех массивов.
Генератор кода не должен использовать динамическое выделение памяти для массива.
Укажите верхние границы, которые приводят к размеру массива (в байтах), который меньше порога динамического выделения памяти.
При создании кода с помощью codegen, чтобы задать верхние границы для входов переменного размера, используйте coder.typeof конструкция с -args вариант. Например:
codegen foo -args {coder.typeof(double(0),[3 100],1)}Эта команда указывает, что входные данные функционируют foo - матрица вещественных двойников с двумя переменными измерениями. Верхняя граница для первого размера равна 3. Верхняя граница для второго размера равна 100.
Если вы создаете код с помощью приложения MATLAB ® Coder™, см. раздел Задание свойств входов функции точки входа с помощью приложения и создание размеров переменного размера, когда они соответствуют пороговому значению размера.
При использовании статического распределения генератор кода использует сложный анализ для вычисления верхних границ локальных данных. Однако если при анализе не удается обнаружить верхнюю границу или вычисляется верхняя граница, которая является недостаточно точной для приложения, необходимо явно указать верхние границы для локальных переменных.
Чтобы ограничить значение переменных, задающих размеры массивов переменного размера, используйте assert функция с реляционными операторами. Например:
function y = dim_need_bound(n) %#codegen assert (n <= 5); L= ones(n,n); M = zeros(n,n); M = [L; M]; y = M;
Это assert оператор ограничивает ввод n до максимального размера 5. L - переменный размер с верхними границами 5 в каждом измерении. M переменный размер с верхней границей 10 в первом измерении и 5 во втором измерении.
Чтобы задать верхние границы для всех экземпляров локальной переменной в функции, используйте coder.varsize функция. Например:
function Y = example_bounds1(u) %#codegen Y = [1 2 3 4 5]; coder.varsize('Y',[1 10]); if (u > 0) Y = [Y Y+u]; else Y = [Y Y*u]; end
Второй аргумент coder.varsize указывает верхнюю границу для каждого экземпляра переменной, указанной в первом аргументе. В этом примере аргумент [1 10] указывает, что для каждого экземпляра Y:
Первый размер фиксируется размером 1.
Второй размер может вырасти до верхней границы 10.