為什麼這篇matlab複數鄉民發文收入到精華區:因為在matlab複數這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者rooster1125 (rooster)看板MATLAB標題[問題]顯示複數數值的問題時間Tu...
學校數值方法要我們用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)