[問題]顯示複數數值的問題

看板MATLAB作者 (rooster)時間13年前 (2012/05/01 18:54), 編輯推噓0(007)
留言7則, 2人參與, 最新討論串1/1
學校數值方法要我們用Muller法求(x-(3+2i))*(x-(3-2i))*(x+2)*(x-5)=0的根 以下是我的程式碼 clear fprintf('Solve (x-(3+2i))*(x-(3-2i))*(x+2)*(x-5)=0 by Muller''s method\n') fprintf('==================================================\n') syms x f=(x-(3+2i))*(x-(3-2i))*(x+2)*(x-5); p0=1.5; p1=2.5; p2=2; fprintf('Let P(0)=%1.1f P(1)=%1.1f P(2)=%1.1f\n',p0,p1,p2) tol=1e-5; h1=p1-p0; h2=p2-p1; n1=(subs(f,p1)-subs(f,p0))/h1; n2=(subs(f,p2)-subs(f,p1))/h2; d=(n2-n1)/(h2+h1); for k=1:50; b=n2+h2*d; g=(b^2-4*subs(f,p2)*d)^0.5; if abs(b-g)<abs(b+g); e=b+g; else e=b-g; end h=(-2*subs(f,p2))/e; p=p2+h fprintf('P(%1.0f)= %1.4f\n',k+2,p) if abs(h)<tol fprintf('This root is P(%1.0f)= %1.13f.\n',k+2,p) break end p0=p1; p1=p2; p2=p; h1=p1-p0; h2=p2-p1; n1=(subs(f,p1)-subs(f,p0))/h1; n2=(subs(f,p2)-subs(f,p1))/h2; d=(n2-n1)/(h2+h1); k=k+1; end 跑出來的結果是 Solve (x-(3+2i))*(x-(3-2i))*(x+2)*(x-5)=0 by Muller's method ================================================== Let P(0)=1.5 P(1)=2.5 P(2)=2.0 p = 3.6429 - 2.0392i P(3)= 3.6429 p = 2.7843 - 2.2223i P(4)= 2.7843 p = 3.0423 - 2.0243i P(5)= 3.0423 p = 2.9986 - 2.0003i P(6)= 2.9986 p = 3.0000 - 2.0000i P(7)= 3.0000 p = 3.0000 - 2.0000i P(8)= 3.0000 This root is P(8)= 2.9999999999683. 想請問的是 為何fprintf('P(%1.0f)= %1.4f\n',k+2,p) 這句 只讓我的P(N)值顯示出實數部分 複數部分卻顯示不出來? 感謝!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.33.54.146 ※ 編輯: rooster1125 來自: 114.33.54.146 (05/01 18:55) ※ 編輯: rooster1125 來自: 114.33.54.146 (05/01 18:57)

05/01 19:13, , 1F
fprintf只會印實部 可以配合real imag抓實虛部
05/01 19:13, 1F

05/01 19:14, , 2F
或者改用disp + num2str
05/01 19:14, 2F

05/01 19:16, , 3F
不好意思,請問如何使用disp + num2str
05/01 19:16, 3F

05/01 19:50, , 4F
感謝e大!!我用disp+fprintf解決了!
05/01 19:50, 4F

05/01 20:01, , 5F
disp(['P(',num2str(k+2),')=',num2str(p)]) 用法是這樣
05/01 20:01, 5F

05/01 20:01, , 6F
不過解決了就好
05/01 20:01, 6F

05/01 20:18, , 7F
好強! 真的太感謝了!
05/01 20:18, 7F
文章代碼(AID): #1Fdy3qi_ (MATLAB)