Matlab功能块出错:索引超过数组维数

Matlab功能块出错:索引超过数组维数,matlab,simulink,Matlab,Simulink,我在运行下面的代码时遇到了一些问题,它给了我错误 索引超过数组维度。索引值3超出了数组“a”的有效范围[1-2]。如果a(i)>0,“测试/测试”(第18行)中出现错误 此代码是用于计算标量参考调速器的参数k的代码。Hx和Hv是矩阵A、B、C、D的最大容许输出集(MAS),希望能从您的all中得到一些帮助来修复此代码 function v = SRG_new(v_previous, r) A=[0 1;-275.5 -21.22]; B=[0;1]; C=[11.02 275.5];

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

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_先前)将生成少于100个条目的矩阵“a”(如果仅与标量值相乘,则正好是两个条目)。这必然导致“超出范围错误”

要消除错误,只需使用

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

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

thx为帮助我解决错误,您建议的代码可以再次运行thx以获得帮助我很高兴能够帮助您!然后你可以把问题标记为已解决