m0_62740426 2022-08-10 15:35 采纳率: 33.3%
浏览 32
已结题

位置 1 中的索引超过数组边界(不得超过 1报错

一个简单的粒子群算法,在第32行标注的地方一直报错
我检查了这些数组的大小都是一样的啊,为啥会报错 ,看了我一个小时555

img

img

clc
clear

c1 = 1.4955;
c2 = 1.4955;
w = 1;

maxgen = 100;
sizepop = 50;
nvar = 2;
vmax = 5 ;
vmin = -5;
popmax = 100;
popmin = -100;
pbest = [];
for i = 1 : sizepop
pop(i,:) = (popmax-popmin) * rand(1,nvar) + popmin;
V(i,:) = (vmax-vmin) * rands(1,nvar) + vmin;
funtion(i) = fun(pop(i,:));
fitness(i) = 1/funtion(i);
end
[bestfitness,bestindex] = max(fitness);
bestfuntion = funtion(bestindex);
bestpop = pop(bestindex,:);
pbest = pop;
pbestfuntion = funtion;
pbestfitness = fitness;

for i = 1 : maxgen

for j = 1 : sizepop
V(j,:) = w.V(j,:) + c1rand*(pbest(j,:)-pop(j,:))+c2rand(bestpop-pop(j,:));

    V(j, find(V(j,:)) > vmax) = vmax;
    V(j, find(V(j,:)) < vmin) = vmin;
    
    pop(j,:) = pop(j,:) + V(j,:);
  
    pop(j,find(pop(j,:) > popmax)) = popmax;
    pop(j,find(pop(j,:) < popmin)) = popmin;     
    funtion(j) = fun(pop(j,:));
    fitness(j) = 1/funtion(j);
 

end
for j = 1 : sizepop
if fitness(j) > pbestfitness(j)
pbestfitness(j) = fitness(j);
pbestfuntion(j) = funtion(j);
pbest = pop(j,:);

   end
   if   fitness(j) > bestfitness
       bestfitness = fitness(j);
       bestfuntion = funtion(j);
       bestpop = pop(j,:);
   end

end

end

  • 写回答

1条回答 默认 最新

  • falwat 2022-08-10 15:49
    关注

    不好排查问题出在哪儿。建议你自己在出错的地方设置一个断点,然后在命令窗口里依次测试表达式的每个运算

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 8月18日
  • 已采纳回答 8月10日
  • 创建了问题 8月10日

悬赏问题

  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭