Matlab 函数块中的错误:索引超出数组维度

Error in Matlab Function Block: Index exceeds array dimensions

我在 运行 下面的代码中遇到了一些问题,它给了我错误 索引超出数组维度。索引值 3 超出数组 'a' 的有效范围 [1-2]。如果 a(i)> 0,'TEST/TEST' 中的错误(第 18 行) 此代码是用于计算标量参考调节器的参数 k 的代码。 Hx 和 Hv 是矩阵 A、B、C、D 的最大允许输出集 (MAS) 希望能得到一些帮助来修复此代码。

function v = SRG_new(v_previous, r)
  A=[0 1;-275.5 -21.22];
  B=[0;1];
  C=[11.02 275.5];
  D=0;
  I=eye(2);
  Hx=(C*A); 
  Hv= C*((I-A)*((I-A)^-1)*B+D); 
  s=350; %s=max_output
  a=Hx*(r-v_previous);
  b=s-Hx-Hv*v_previous;
  k=1;
 
for i=1:100
    if a(i)> 0
        k=min(k, b(i)/a(i));
    end       
end
  k=max(k,0);
  v=v_previous + k*(r-v_previous);
end

嗯,这主要取决于您输入的大小 v_previous 和 r(因为错误指定了范围“1-2”,我猜,“r”和“v_previous”是标量值).

错误发生,因为你想遍历“a”的 100 个元素,但由于 Hx=(C*A); 只创建一个 1x2 矩阵,a = Hx*(r-v_previous); 将导致矩阵“a”具有更少超过 100 个条目(如果仅乘以标量值,则正好是两个条目)。这一定会导致“超出范围 - 错误”。

要消除错误,只需使用

for i=1:numel(a)
    if a(i)> 0
        k=min(k, b(i)/a(i));
    end       
end

这样,它只会遍历可用的数组元素。