作者rooster1125 (rooster)
看板MATLAB
標題[問題]顯示複數數值的問題
時間Tue May 1 18:54:41 2012
學校數值方法要我們用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)
1F:→ ejialan:fprintf只會印實部 可以配合real imag抓實虛部 05/01 19:13
2F:→ ejialan:或者改用disp + num2str 05/01 19:14
3F:→ rooster1125:不好意思,請問如何使用disp + num2str 05/01 19:16
4F:→ rooster1125:感謝e大!!我用disp+fprintf解決了! 05/01 19:50
5F:→ ejialan:disp(['P(',num2str(k+2),')=',num2str(p)]) 用法是這樣 05/01 20:01
6F:→ ejialan:不過解決了就好 05/01 20:01
7F:→ rooster1125:好強! 真的太感謝了! 05/01 20:18