【问题标题】:Error in Matlab Function Block: Index exceeds array dimensionsMatlab 功能块中的错误:索引超出数组维度
【发布时间】:2021-05-04 04:44:48
【问题描述】:

我在运行下面的代码时遇到了一些问题,它给了我错误 索引超出数组维度。索引值 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

【问题讨论】:

    标签: matlab simulink


    【解决方案1】:

    这主要取决于您的输入 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
    

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

    【讨论】:

    • 感谢帮助我解决错误,您建议的代码可以再次工作以寻求帮助
    • 很高兴能帮到你!然后您可以将问题标记为已解决?
    猜你喜欢
    • 2021-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多