matlab索引超出数组元素数目如何解决

我在用粒子群算法优化4*4阵列天线副瓣时,程序总是报错,说索引超出了数组元素的数目,实在不知道如何解决。

错误出在17行

代码如下:

clear all;
close all;
clc;
N=100;                         %群体粒子个数
D=32;                          %粒子维数
T=300;                         %最大迭代次数
c1=1.5;                        %学习因子1
c2=1.5;                        %学习因子2
Wmax=0.8;                      %惯性权重最大值
Wmin=0.4;                      %惯性权重最小值
Xmax=[ones(1,16)  ones(1,16)*pi]; %上限
Xmin=[ones(1,16)*eps -ones(1,16)*pi]; %下限
Vmax=1;                       %速度最大值
Vmin=-1;                      %速度最小值
%初始化个体位置,速度
for i=1:N
    x(i,:)=rand(1,D)*(Xmax(i)-Xmin(i))+Xmin(i);  
    v(i,:)=rand(1,D)*(Vmax-Vmin)+Vmin;
end

%初始化个体最优位置和最优值
p=x;
pbest=ones(N,1); %pbest是粒子当前位置,个体极值
for i=1:N
     pbest(i)=func_find_msll(x(i,:));  
end
%初始化全局最优位置和最优值
g=ones(1,D);
gbest=inf;   %gbest是初始群体中最佳粒子的位置,全局极值
for i=1:N   %寻找最小值
    if (pbest(i)<gbest)
        g=p(i,:);
        gbest=pbest(i);
    end
end
gb=ones(1,T);
%按照公式依次迭代直到满足精度或者迭代次数
for i=1:T
    for j=1:N
        %更新个体最优位置和最优值
        if (func_find_msll(x(j,:))<pbest(j))
            p(j,:)=x(j,:);
            pbest(j)=func_find_msll(x(j,:));
        end
        %更新全局最优位置和最优值
        if (pbest(j)<gbest)
            g=p(j,:);
            gbest=pbest(j);
        end
        %计算动态惯性权重值
        w=Wmax-(Wmax-Wmin)*i/T;
        %计算位置和速度
        v(j,:)=w*v(j,:)+c1*rand*(p(j,:)-x(j,:))+c2*rand*(g-x(j,:));
        x(j,:)=x(j,:)+v(j,:);
        %边界条件处理
        for ii=1:D
            if (v(j,ii)<Vmin)||(v(j,ii)>Vmax)
                v(j,ii)=rand*(Vmax-Vmin)+Vmin;
            end
        end
            vx(j,:)=1./(1+exp(-v(j,:)));
        for jj=1:D
             if vx(j,jj)>rand
             x(j,jj)=1;
             else
             x(j,jj)=0;
             end
        end
    end
    %记录全局最优值
    gb(i)=gbest;
end
g;                         %最优个体
gb(end);                   %最优值
figure
plot(gb)
xlabel('迭代次数')
ylabel('适应度值')
title('适应度进化曲线')

 

你的Xmax与Xmin是1X32的矩阵,但你N却有100,这么设置肯定报错啊