嵌入式函数中的可变大小元素,但固定的输入和输出

时间:2018-03-30 10:19:00

标签: size simulink local-variables pre-allocation

我的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 个答案:

答案 0 :(得分:1)

您必须为p_var的大小定义上限。这可以通过几种方式完成,例如使用coder.varsize,如下所示。

还有其他几点需要注意:

  1. 如果p_var是您的函数的输入,则无法更改其大小,但需要一个临时变量,如下所示。

  2. 您很可能不想像现在这样使用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]