matlab运行出现了??? Error using ==> BaseStepPso error,是关于粒子群算法的,麻烦各位帮忙解答一下

function[ParSwarm,OptSwarm]=BaseStepPso(ParSwarm,OptSwarm,ParticleScope,MaxW,MinW,Loo... function[ParSwarm,OptSwarm]=BaseStepPso(ParSwarm,OptSwarm,ParticleScope,MaxW,MinW,LoopCount,CurCount)
if nargin~=7 %输入容错
error('error')
end
if nargout~=2 %输出容错
error('error')
end
%线形递减策略
w=MaxW-CurCount*((MaxW-MinW)/LoopCount);
%得到粒子群群体大小以及一个粒子维数的信息
[ParRow,ParCol]=size(ParSwarm);
%得到粒子的维数
ParCol=(ParCol-1)/2;
SubTract1=OptSwarm(1:ParRow,:)-ParSwarm(:,1:ParCol);%求解出历史最优值与当前位置的差值
c1=2;
c2=2;
%完成一次粒子位置速度最优值的更新迭代
forrow=1:ParRow
SubTract2=OptSwarm(ParRow+1,:)-ParSwarm(row,1:ParCol);%计算出全局最优值与当前该粒子位置的差值
%速度更新公式
TempV=w.*ParSwarm(row,ParCol+1:2*ParCol)+c1*unifrnd(0,1).*SubTract1(row,:)+c2*unifrnd(0,1).*SubTract2;
%限制速度的代码
for h=1:ParCol
if TempV(:,h)>ParticleScope(h,2)
TempV(:,h)=ParticleScope(h,2);
end
if TempV(:,h)<-ParticleScope(h,2)
TempV(:,h)=-ParticleScope(h,2)+1e-10;%加1e-10防止适应度函数被零除
end
end
%更新该粒子速度值
ParSwarm(row,ParCol+1:2*ParCol)=TempV;
a=0.729;%约束因子
TempPos=ParSwarm(row,1:ParCol)+a*TempV;
%限制位置范围的代码
for h=1:ParCol
if TempPos(:,h)>ParticleScope(h,2)
TempPos(:,h)=ParticleScope(h,2);
end
if TempPos(:,h)<=ParticleScope(h,1)
TempPos(:,h)=ParticleScope(h,1)+1e-10;%加1e-10防止适应度函数被零除
end
end
%更新该粒子位置值
ParSwarm(row,1:ParCol)=TempPos;
%计算每个粒子的新的适应度值
ParSwarm(row,2*ParCol+1)=AdaptFunc(ParSwarm(row,1:ParCol));
if ParSwarm(row,2*ParCol+1)>AdaptFunc(OptSwarm(row,1:ParCol))
OptSwarm(row,1:ParCol)=ParSwarm(row,1:ParCol);
end
%for循环结束
%寻找适应度函数值最大的解在矩阵中的位置(行数),进行全局最优值的改变
[maxValue,row]=max(ParSwarm(:,2*ParCol+1));
if AdaptFunc(ParSwarm(row,1:ParCol))>AdaptFunc(OptSwarm(ParRow+1,:))
OptSwarm(ParRow+1,:)=ParSwarm(row,1:ParCol);
end
展开
 我来答
我行我素850915
2017-08-25 · TA获得超过8241个赞
知道大有可为答主
回答量:5788
采纳率:77%
帮助的人:1763万
展开全部
你这个程序是个函数,要先定义输入参数,再调用这个函数。如果参数定义和调用方法不当,都会出错。你是咋定义和调用函数的?请说明下。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式