Re: [問題] 粒子群求解已回收

看板MATLAB作者 (賤兔)時間16年前 (2010/03/15 19:52), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串2/3 (看更多)
※ 引述《umi1008 (賤兔)》之銘言: : 如果我用粒子群的方式 : 來解一個多項式 : 答案裡面是複變數 : 但我怎麼弄都只能算出實部 : 弄不出虛部 : Q:是因為粒子群的算法無法求解複變嗎? : Q:還是有什麼指令可以利用? 在此複上程式碼 clc clear %--------The settings of PSO parameter------- pop_n=50; Dimen=2; Xmin=-10*ones(1,Dimen); Xmax=10*ones(1,Dimen); iter=0; itermax=300; C1=2; C2=2; Wi=0.9; Wf=0.4; %--------Particle Swarm initialization------- X=zeros(pop_n,Dimen); pbest=zeros(1,pop_n); V=zeros(pop_n,Dimen); Fit=zeros(1,pop_n); Vmax=0.05*Xmax; for i=1:pop_n X(i,:)=(Xmax-Xmin).*rand(1,Dimen)+Xmin; c=X(1)+X(2)*j; e=(c)^2+3*(c)+8; E=abs(e); pbest(i)=E; V(i,:)=2*Vmax.*rand(1,Dimen)+Vmax; end Pbest=X; [gbest,g]=min(pbest); Gbest=X(g,:); while(1) W=Wi+(Wf-Wi)*iter/itermax; for i=1:pop_n V(i,:)=W*V(i,:)+C1*rand(1,Dimen).*(Pbest(i,:)-X(i,:))... +C2*rand(1,Dimen).*(Gbest-X(i,:)); V(i,:)=(abs(V(i,:))>Vmax).*sign(V(i,:)).*Vmax... +(abs(V(i,:))<=Vmax).*V(i,:); X(i,:)=V(i,:)+X(i,:); X(i,:)=(X(i,:)>Xmax).*Xmax+(X(i,:)<=Xmax).*X(i,:); X(i,:)=(X(i,:)<Xmin).*Xmin+(X(i,:)>=Xmin).*X(i,:); c=X(1)+X(2)*j; e=(c)^2+3*(c)+8; E=abs(e); Fit(i)=E; if Fit(i)<pbest(i) pbest(i)=Fit(i); Pbest(i,:)=X(i,:); end end [New_gbest,New_g]=min(pbest); if New_gbest<gbest gbest=New_gbest; g=New_g; Gbest=X(g,:); end if iter>=itermax,break,end iter=iter+1; end disp(Gbest) 註備: 題目的意思就是解X^2+3*X+8=0的題目 解出來的X解為-1.5士2.4i 但是我的程式都會亂跳... 請大大幫幫忙QQ 謝謝您 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.120.109.24

03/15 21:25, , 1F
建議把主程式和適應函數分開成兩個 m-file
03/15 21:25, 1F
文章代碼(AID): #1BdXzxCc (MATLAB)
討論串 (同標題文章)
文章代碼(AID): #1BdXzxCc (MATLAB)