[問題] 程式跑出後的答案已回收

看板MATLAB作者 (賤兔)時間16年前 (2010/02/27 14:34), 編輯推噓3(304)
留言7則, 4人參與, 最新討論串1/1
開始學這個程式後, 最近寫出了一個解方程式的式子, 但是有一些疑惑, 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
roots?
02/27 17:30, 2F

02/28 00:05, , 3F
roots怎麼使用??
02/28 00:05, 3F

02/28 12:05, , 4F
那如果我是用粒子群的跑法,跑一個已知矩陣*一個未知數X,這
02/28 12:05, 4F

02/28 12:06, , 5F
樣會變成多次方題目,無法用roots來列出式子,這樣有沒有什
02/28 12:06, 5F

02/28 12:07, , 6F
麼指令,可以讓題目跑出所有的次方解??謝謝
02/28 12:07, 6F

03/01 11:07, , 7F
roots([1 -11 10]) 就是你要的。
03/01 11:07, 7F
文章代碼(AID): #1BYBphkw (MATLAB)