我在MATLAB中编写了一个包含循环的算法。该代码适用于多次迭代,然后由于以下错误而突然停止
??? Index exceeds matrix dimensions.
导致此错误的原因是什么?
这是代码的一部分。
[x,fval,exitflag,output]=cplexmilp(f,Aineq,bineq,Aeq,beq,sostype,sosind,soswt,lb,ub,ctype,x0,options)
for m=1:100
supply=[];
supply=x(1:p*w*t);
supply=reshape(supply,w,p*t)';
Failprob=[0.1927 0.1753 0.1728 0.1165 0.2375 0.1649];%Low
%Failprob=[0.3770 0.3061 0.2894 0.2682 0.3993 0.2983];%Med
Failprob=[0.5708 0.4842 0.4097 0.5144 0.4205 0.4312];%High
%Failprob=[0.4547 0.4958 0.4965 0.4158 0.4971 0.4957];%High
Epsilon=[.8 .9];%Low
%Epsilon=[.7 .9];%Med
Epsilon=[.6 .9];%High
Sigma=.05;%Low
%Sigma=.10;%Med
Sigma=.2;%High
Failprob=Failprob';
prob2=1-Failprob;
prob2=horzcat(prob2,Failprob);
prob2=repmat(prob2,t,1);
for n=1:t
for i=1+p*(n-1):p+p*(n-1)
for j=1:w
r=rand;
prob=prob2(i,:);
prob=cumsum(prob);
value=[supply(i,j),(Epsilon(1)+(Epsilon(2)-Epsilon(1))*rand(1))*supply(i,j)];
%values corresponding to the probabilities
ind=find(r<=prob,1,'first');
supply(i,j)=value(ind);
end
end
end
经过一些迭代后,我得到以下输出。
Iteration 20 Current value 12020253.6911 Best value 12020253.6911
Iteration 21 Current value 10841341.9259 Best value 10841341.9259
Iteration 22 Current value 11307742.3543 Best value 10841341.9259
Iteration 23 Current value 10784746.9812 Best value 10784746.9812
??? Index exceeds matrix dimensions.
Error in ==> CodefinalTwelveGuMulti at 1947
supply=x(1:p*w*t);
答案 0 :(得分:0)
我甚至不知道代码是如何运行的。 x
未在任何地方定义,您突然开始在for
循环中使用它。我的猜测是你先前在某处定义了一些代码,这些迭代开始发生,然后一旦这些迭代结束,这个函数就会运行。这是有道理的,因为我在代码中的任何地方都没有看到任何打印声明。
这就是错误所暗示的内容。它表示您尝试使用超过x
维度的索引编入索引x
。在这种情况下,x
没有维度(即空)。因此,无论您使用什么索引来尝试索引x
,MATLAB都会为您提供超出错误的索引。
您需要通过将其作为函数的输入来定义x
,或者在函数本身内定义它。