2013-10-09 54 views
-2

我运行下面这个程序,我不断收到此错误“指数超过矩阵尺寸”线路“Tour1 =弹出(KK(1:10),:);”。我不知道我错过了。任何人都可以请帮忙。 感谢指数误差在for循环,MATLAB

for i = 1:100        %Population Initialization 
    pop(i,1) = 50 - rand*(50-1); 
    pop(i,2) = 1 - rand*(1-0.1); 
    pop(i,3) = 0.2 - rand*(0.2-0.01); 
    Kc(i) = pop(i,1); 
    T1(i) = pop(i,2); 
    T2(i) = pop(i,3); 

    fitness(i) = obj(Kc(i), T1(i), T2(i)); 

%% TOURNAMENT SELECTION 

for j = 1:10         %Select first parent 
    kk = randperm(100); 
    Tour1 = pop(kk(1:10),:); 
    temp1 = mat2cell(Tour1(j,:),1,ones(1,numel(Tour1(j,:)))); 
    ZET1(j) = obj(temp1{:}); 
end 

[Val1 Ind1] = max(ZET1); 
parent1 = Tour1(Ind1,:); 

end 
+0

在Tour1中访问它之前,您需要使用tofinish填充'pop'。使用debug:如果error''>> DBSTOP,看看'kk'和'pop'是 – Shai

回答

2

只需将最终end执行j

for i = 1:100        %Population Initialization 
    pop(i,1) = 50 - rand*(50-1); 
    pop(i,2) = 1 - rand*(1-0.1); 
    pop(i,3) = 0.2 - rand*(0.2-0.01); 
    Kc(i) = pop(i,1); 
    T1(i) = pop(i,2); 
    T2(i) = pop(i,3); 
    fitness(i) = obj(Kc(i), T1(i), T2(i)); 
end 

for j = 1:10         %Select first parent 
    kk = randperm(100); 
    Tour1 = pop(kk(1:10),:); 
    temp1 = mat2cell(Tour1(j,:),1,ones(1,numel(Tour1(j,:)))); 
    ZET1(j) = obj(temp1{:}); 
end 

[Val1 Ind1] = max(ZET1); 
parent1 = Tour1(Ind1,:); 
+0

谢谢你们,错误已经消失。 – dee

2

之前你真的想拥有的第一个内部的第二for

在外环的第一次执行,i是一个。您填写pop (1, :),但没有更多。

在内循环中,您尝试访问pop (kk (1:10), :),其中kk (1:10)在[1..100]之内。但没有pop (i, :) i> 1.