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



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

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

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

最新更新