[問題] 程式跑出後的答案已回收
開始學這個程式後,
最近寫出了一個解方程式的式子,
但是有一些疑惑,
1.
例如要解一個方程式X(i)^2-11*X(i)+10=0,
手算知道兩個答案分別是 X=10 X=1,
那程式有辦法"一次"跑出這兩個答案嗎?
(不然解多次方的題目都要跑很多次才知道有哪些答案)
2.
另外還有每次跑出來答案都很接近10或1
但都不會剛剛好,是正常的嗎?
有沒有辦法讓它們跑出完全正確的答案
謝謝您!
在這附上我的程式
clc
clear
%--------The settings of PSO parameter-------
pop_n=30; Dimen=1;
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;
E=X(i)^2-11*X(i)+10;
pbest(i)=E'*E;
V(i,:)=Vmax.*rand(1,Dimen);
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,:);
E=X(i)^2-11*X(i)+10;
Fit(i)=E'*E;
if Fit(i)<pbest(i)
pbest(i)=Fit(i);
Pbest(i,:)=X(i,:);
end
end
[New_gbest,New_g]=max(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)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.120.109.24
推
02/27 14:44, , 1F
02/27 14:44, 1F
推
02/27 17:30, , 2F
02/27 17:30, 2F
→
02/28 00:05, , 3F
02/28 00:05, 3F
→
02/28 12:05, , 4F
02/28 12:05, 4F
→
02/28 12:06, , 5F
02/28 12:06, 5F
→
02/28 12:07, , 6F
02/28 12:07, 6F
推
03/01 11:07, , 7F
03/01 11:07, 7F