作者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