MATLAB中文论坛

标题: 这串代码运行时会出现“位置 1 的索引超出数组范围(不能超过 4)。”的错误提示,请问该如何修改 [打印本页]

作者: chu'de'shui    时间: 2021-6-9 20:06
标题: 这串代码运行时会出现“位置 1 的索引超出数组范围(不能超过 4)。”的错误提示,请问该如何修改
pop=10;
P=4;
for i=1:pop
   while 0<1
        for j=1:8
            x(i,j)=round(rand(1));   
        end
        if(sum(x(i,:),2)>=1)&(sum(x(i,:),2)<=P)
            break
        end
    end
end  

for i=1:pop
    for j=1:8
        if x(i,j)==0
            y(i,(8*(j-1)+1):(8*j))=0;
        else
            while x(i,j)==1
                y(i,(8*(j-1)+1):(8*j))=round(rand(1,8));
                if y(i,(8*(j-1)+1):(8*j))<=repmat(x(i,j),1,8)*(1-round(rand(1)))
                    break
                end
                yy=reshape(reshape(y,[],8)',[],8);
                yyy(i,:)=sum(yy((8*(i-1)+1):(8*i),:));
%                 if yyy(:)>=1
%                     break
%                 end
            end
        end
    end
end


作者: 20141303    时间: 2021-6-9 21:58
仅供参考

  1. pop=10;
  2. P=4;
  3. for i=1:pop
  4.    while 0<1
  5.         for j=1:8
  6.             x(i,j)=round(rand(1));   
  7.         end
  8.         if(sum(x(i,:),2)>=1)&(sum(x(i,:),2)<=P)
  9.             break
  10.         end
  11.     end
  12. end  

  13. for i=1:pop
  14.     for j=1:8
  15.         if x(i,j)==0
  16.             y(i,(8*(j-1)+1):(8*j))=0;
  17.         else
  18.             while x(i,j)==1
  19.                 y(i,(8*(j-1)+1):(8*j))=round(rand(1,8));
  20.                 if y(i,(8*(j-1)+1):(8*j))<=repmat(x(i,j),1,8)*(1-round(rand(1)))
  21.                     break
  22.                 end
  23.                 yy=reshape(reshape(y,[],8)',[],8);
  24.                 yyy(i,:)=sum(yy(:,1:8));
  25. %                 if yyy(:)>=1
  26. %                     break
  27. %                 end
  28.             end
  29.         end
  30.     end
  31. end
复制代码

作者: chu'de'shui    时间: 2021-6-10 09:28
20141303 发表于 2021-6-9 21:58
仅供参考

感谢您的回复指导,但是第26行的求和,我是想将矩阵yy每8行的每一列求和,而非您所说的将yy矩阵的所有行,1到8列求和
作者: aijunhao    时间: 2021-6-10 11:37
chu'de'shui 发表于 2021-6-10 09:28
感谢您的回复指导,但是第26行的求和,我是想将矩阵yy每8行的每一列求和,而非您所说的将yy矩阵的所有行 ...

能不能说出你代码的实现作用,你的源代码多次运行,有时候可以运行成功有时候不可以,你最好吧要实现的功能说明一下




欢迎光临 MATLAB中文论坛 (https://www.ilovematlab.cn/) Powered by Discuz! X3.4