代码之家  ›  专栏  ›  技术社区  ›  Chewbaka

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

  •  -1
  • Chewbaka  · 技术社区  · 6 年前

    我的simulink嵌入函数有固定的输入和输出。 但是,我想在函数中计算一个可变大小的元素(仅用于计算)。

    因此,我不希望将块声明为接收或发送动态大小信号。(或使用编码器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 回复  |  直到 6 年前
        1
  •  1
  •   Phil Goddard    6 年前

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

    还有几件事需要注意:

    1. 如果 p\u变量 是函数的输入,您不能更改其大小,但需要一个临时变量,如下所示。

    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]