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
这样,它只会遍历可用的数组元素。
我在 运行 下面的代码中遇到了一些问题,它给了我错误 索引超出数组维度。索引值 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
这样,它只会遍历可用的数组元素。