Matlab功能块出错:索引超过数组维数
我在运行下面的代码时遇到了一些问题,它给了我错误 索引超过数组维度。索引值3超出了数组“a”的有效范围[1-2]。如果a(i)>0,“测试/测试”(第18行)中出现错误 此代码是用于计算标量参考调速器的参数k的代码。Hx和Hv是矩阵A、B、C、D的最大容许输出集(MAS),希望能从您的all中得到一些帮助来修复此代码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];
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以获得帮助我很高兴能够帮助您!然后你可以把问题标记为已解决