Предположительно, вы используете возможность автоопределения в приложении MATLAB Coder. Для этого нужно запустить предоставленный вами скрипт и отслеживать входные данные для вашей функции my_varsize
. Давайте рассмотрим конкретный пример:
функция my_varsize.m
function [sz] = my_varsize(x)
sz = length(x);
end
тестовый скрипт my_varsize_tb.m
samp = 20;
x = zeros(1,samp);
sz = my_varsize(x);
display(sz);
samp = 37;
x = zeros(1,samp);
sz = my_varsize(x);
display(sz);
Здесь запускается my_varsize_tb
, и кодер обнаруживает 2 вызова на my_varsize
. Первый занимает двойной массив 1-by-20
. Второй занимает массив 1-by-37
. Таким образом, он вычисляет, что ввод должен быть 1-by-:37
. Так как таким способом вы можете сделать только конечное количество вызовов, входной сигнал будет определен только с конечной верхней границей.
Затем вы можете настроить размер на 1-by-:Inf
в приложении Coder:
![Coder app varsize](https://i.stack.imgur.com/41s3O.gif)
Дополнительная информация
Существует функция командной строки, которая дает то же поведение, что и вы :
>> t = coder.getArgTypes('my_varsize_tb','my_varsize')
t =
1×1 cell array
{1×1 coder.PrimitiveType}
>> t{1}
ans =
coder.PrimitiveType
1×:37 double
Аналогичным образом можно настроить этот размер:
>> inputType = coder.resize(t{1},[1,Inf])
inputType =
coder.PrimitiveType
1×:inf double
>> codegen my_varsize -args inputType
, чтобы использовать его с командой codegen
.
Наконец, учитывая, что у вас есть простая функция Вы можете просто сделать:
t = coder.typeof(1, [1,Inf]);
codegen my_varsize -args t
coder.typeof
берет первый вход, чтобы определить, что это реальный double
и размер. Когда вы передаете второй аргумент, он переопределяет размер, создавая 1-by-:Inf
, как и ожидалось в этом случае.