粒子群算法解非线性方程组问题
哪位高手帮我看看,我自己编了一个粒子群算法解非线性方程组的,可是运行起来不好使,c1=input('输入学习因子C1:2.8');
c2=input('输入学习因子C2:1.3');
w=input('输入惯性因子w:1');
N=input('初始化群体数目N(行数):');
D=input('搜索空间维数(自变量个数,列数)D:');
MaxCir=input('最大迭代次数MaxCir:');
Minx=input('输入变量下限:');
Maxx=input('输入变量上限:');
jzss=input('输入接种新粒子中元素占Pg元素个数大于1小于D:');
eps=10^(-6); %精度
for i=1:N
for j=1:D
x(i,j)=Minx+rand()*(Maxx-Minx);%位置初始化
v(i,j)=rand; %速度初始化
end
end
%-----------------------------------------------------
%计算适应度,并初始化Pi(个体最优),Pg(群体最优)---------
for i=1:N
P(i,:)=x(i,:);
y(i,:)=x(i,:); %y()为最优个体群
end
Pg=x(1,:);
for i=2:N
if fitness(x(i,:),D)<fitness(Pg,D)
Pg=x(i,:); %Pg为群体最优
end
end
%------------------------------------------------------
%进入主循环,按PSO迭代公式迭代,直至超出循环次数或满足精度-
for t=1:MaxCir
for i=1:N
v(i,:)=w*v(i,:)+c1*rand*(y(i,:)-x(i,:))+c2*rand*(Pg-x(i,:)); %速度更新
x(i,:)=x(i,:)+v(i,:); %位置更新
for j=1:D
if x(i,j)<Minx || x(i,j)>Maxx
x(i,j)=Minx+rand()*(Maxx-Minx)%超出范围重新初始化
end
end
if fitness(x(i,:),D)<fitness(P(i,:),D)
P(i,:)=fitness(x(i,:),D); %个体选优
y(i,:)=x(i,:);
end
if P(i,:)<fitness(Pg,D) %群体选优
Pg=y(i,:);
end
end
Pg=inoculation(x,Pg,D,N,jzss);
x=immunity(x,D,N,Maxx,Minx);
Pbest(t)=fitness(Pg,D);
end
%-------------------------------------------------------
%显示最终结果--------------------------------------------
disp('函数最优解为:')
Pg
disp('最优极值为:')
fitness(Pg,D)
%-------------------------------------------------------
function G=fitne(a)
FA1=@(x)x.*exp(a(1).*x+a(2).*x.^2+a(3).*x.^3);
FA2=@(x)exp(a(1).*x+a(2).*x.^2+a(3).*x.^3);
f1=quad(FA1,-0.1,0.1)/quad(FA2,-0.1,0.1)-0.0003344;
FB1=@(x)x.^2.*exp(a(1).*x+a(2).*x.^2+a(3).*x.^3);
FB2=@(x)exp(a(1).*x+a(2).*x.^2+a(3).*x.^3);
f2=quad(FB1,-0.1,0.1)/quad(FB2,-0.1,0.1)-0.0011;
FC1=@(x)x.^3.*exp(a(1).*x+a(2).*x.^2+a(3).*x.^3);
FC2=@(x)exp(a(1).*x+a(2).*x.^2+a(3).*x.^3);
f3=quad(FC1,-0.1,0.1)/quad(FC2,-0.1,0.1)+0.0000144;
g=;
%%%%%%%%%%%%%%%%%%%%%%%%%%~~~~~~~~~~~~~~~~~
function result=fitness(a,D)
options = optimset('Display','off');
= fsolve(@fitne(a),a,options);
a=a;
result=fval;
程序运行总是出现如下错误:
输入学习因子C1:2.8
输入学习因子C2:1.3
输入惯性因子w:1
初始化群体数目N(行数):40
搜索空间维数(自变量个数,列数)D:3
最大迭代次数MaxCir:200
输入变量下限:-1
输入变量上限:1
输入接种新粒子中元素占Pg元素个数大于1小于D:2
??? Error: File: D:\work\fitness.m Line: 4 Column: 25
Unbalanced or misused parentheses or brackets.
Error in ==> pso at 30
if fitness(x(i,:),D)<fitness(Pg,D)
看错误提示显然是少半个括号,但是问题远不止如此:
首先,这个文件中包含调用函数function G=fitne(a),那么这个文件必须存成function格式,在文件开始加上
function myfun()
然后将文件存成myfun.m。还有存成function格式之后呢,你的子函数就必须用end与function匹配!你重新把function对应的end加一下
我copy了这个文件只能调试成这样了,专业知识我一点也不懂,你再调调,然后再往上放吧!
本帖最后由 Happy99 于 2010-11-19 16:13 编辑
那个错误讯息告知
= fsolve(@fitne(a),a,options);
应该改为
= fsolve(@fitne,a,options);
还有不得不说下
Error in ==> pso at 30
if fitness(x(i,:),D)<fitness(Pg,D)
但LZ给的程序在第25行
??? Error: File: D:\work\fitness.m Line: 4 Column: 25
但LZ给的又不确定:@Q
不要忘记, 给的讯息愈正确详细, 别人也愈容易帮lz解决
页:
[1]