Элемент переменного размера во встроенной функции, но фиксированный ввод и вывод
У меня есть фиксированный вход и выход для моей функции встраивания simulink. Однако я хотел бы вычислить элемент переменного размера внутри функции (используется только для расчета).
Поэтому я бы предпочел не объявлять блок как получающий или отправляющий сигнал динамического размера. (или используя coder.varsize)
например:
K = find( p_var(:) == 0 ); % p_var is a vector containing some zeros
p_var(K) = []; % p_var is a therefore a varsize vector
% the variability is something I need for reason
n = length(p_var) % n is dynamic
M = ones(10,n) % M & L are also dynamic
L = ones(n,50)
G = M*L; % G is fixed of size [10*50]
Здесь переменная G всегда фиксирована... но у меня есть такой тип ошибки:
Dimension 2 is fixed on the left-hand side but varies on the right ([1 x 9] ~= [1 x :?])
Спасибо за ваше время.
1 ответ
Вы должны определить верхнюю границу для размера p_var
, Это можно сделать несколькими способами, например, используя coder.varsize
как показано ниже.
Несколько других вещей, чтобы отметить:
Если
p_var
является входом для вашей функции, вы не можете изменить ее размер, но потребуется временная переменная, как показано ниже.Вы, скорее всего, не хотите использовать
find
как вы сделали, но вместо этого следует использовать логическое индексирование.function G = fcn(u)
p_var = u;
coder.varsize('p_var', [10,1]);
p_var(p_var(:) == 0) = []; % p_var is therefore a varsize vector the variability is something I need for reason
n = length(p_var); % n is dynamic
M = ones(10,n); % M & L are also dynamic
L = ones(n,50);
G = M*L; % G is fixed of size [10*50]