我也是西安的,刚注册本论坛账号,如今在学习MATLAB中遇到了一些不小的问题,想向你请教,希望你能帮忙,谢谢了!
0000000000000000000000000000000000000000000000000000000000000
%==========================================================================
%模型中的变量说明如下:
%模型中共有8个变量x1 x2 x3 x4 x5 x6 x7 x8
%=======================模型的原始参数赋值【可以修改】=======================
vv1=1;vv2=1;
ET1=1;ET2=1;
sumx=2;
%==========================================================================
a=[-5,-5];
b=[10,10];
n=100;
m=100;
c1=0.5;c2=0.5;
w=0.8:-(0.8-0.4)/m:0.4;%n为粒子数;m为迭代次数;precision为精度;c1,c2为常数.
vmax=a'-b';%a,b为变量范围.
[c,d]=size(vmax);
fitness1=zeros(2,n)+10;fitness2=zeros(2,n)+10;
for i=1:c
for j=1:n
particle(i,j)=a(i)+rand*(-vmax(i));
v(i,j)=vmax(i)+rand*(-vmax(i));
end
end
population(:,:,1)=particle;
i=1;
while i<=m
particle=population(:,:,i);
for j=1:n
fitness1(1:i,j)=reshape((population(1,j,1:i)*vv1+population(2,j,1:i)*vv2),[i,1]);
fitness2(1:i,j)=reshape((population(1,j,1:i)*vv1/ET1/sumx+population(2,j,1:i)*vv2/ET2/sumx),[i,1]);
end
[pBest1,index1]=max(1./(fitness1+0.1));
[pBest2,index2]=max(1./(fitness2+0.1));
[gBest1,index11]=max(pBest1);
[gBest2,index22]=max(pBest2);
dpBest=sqrt(pBest1.^2+pBest2.^2);
dgBest=sqrt(gBest1.^2+gBest2.^2);
gbest=(population(:,index11,index1(index11))+population(:,index22,index2(index22)))/2;
for k=1:n
if dpBest(k)<dgBest
if round(rand)==1
pbest(:,k)=population(:,k,index1(k));
else
pbest(:,k)=population(:,k,index2(k));
end
else
pbest(:,k)=(population(:,k,index1(k))+population(:,k,index2(k)))/2;
end
end
for x=1:c
for y=1:n
v(x,y)=v(x,y)*w(i)+c1*rand*(pbest(x,y)-particle(x,y))+c2*rand*(gbest(x,1)-particle(x,y));
if vmax(x)<=v(x,y)&v(x,y)<=-vmax(x)
v(x,y)=v(x,y);
elseif v(x,y)<=vmax(x)
v(x,y)=vmax(x);
elseif -vmax(x)<=v(x,y)
v(x,y)=-vmax(x);
end
end
end
particle=particle+v;
i=i+1;
population(:,:,i)=particle;
end
plot(fitness1(m,

,fitness2(m,

,'b-')
00000000000000000000000000000000000000000000000000000
MATLAB错误提示:
??? Index exceeds matrix dimensions.
Error in ==> copywanglaoshi at 44
pbest(:,k)=population(:,k,index2(k));