[討論] 使用"數值方法"求解"複數方程式"?

看板MATLAB作者 (阿泰斯)時間11年前 (2014/01/20 10:57), 編輯推噓1(1016)
留言17則, 3人參與, 最新討論串1/1
如: A=@(x1) (1+2i)*sin((3+4i)*x1); fsolve(A,1) ans = 0.3770 - 0.5027i 以上是用Matlab求解 我另外用Mathematica的內建數值方法指令FindRoot求解,解完全跟Matlab一樣 目前有學到牛頓法、二分法......等 但是都只會用在實數係數的方程式,請問複數係數的方程式要如何使用數值方法? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.130.17.253

01/20 11:06, , 1F
另外問一下,牛頓法跟正割法會推薦正割法嗎?
01/20 11:06, 1F

01/20 11:06, , 2F
因為牛頓法要對方程式微分,有些方程式相當複雜,微分
01/20 11:06, 2F

01/20 11:07, , 3F
很耗時間。
01/20 11:07, 3F

01/20 11:42, , 4F
還有,上面那個方程式求初始值為100的時候,fsolve無解
01/20 11:42, 4F

01/20 11:44, , 5F
正割法卻求出有解,ans=35.8142 -47.7522i
01/20 11:44, 5F

01/20 11:45, , 6F
牛頓法求出來的解分正割法一樣
01/20 11:45, 6F

01/20 18:19, , 7F
我想最大問題應該在於~複數沒有勘根定理~~
01/20 18:19, 7F

01/20 18:20, , 8F
除非你可以嚴格證明 或是去控制你的方程式變成實係數
01/20 18:20, 8F

01/20 18:20, , 9F
否則就只能用絕對值最小值去解出"可能"解
01/20 18:20, 9F

01/20 18:21, , 10F
如果你是實數方程解複數根~~那就muller's method試試
01/20 18:21, 10F

01/20 20:16, , 11F
感謝!!!我現在就是用絕對值取最小值,但是把最小值代回
01/20 20:16, 11F

01/20 20:17, , 12F
去取絕對值,會發現絕對值會離0很遠...,而且取特徵值
01/20 20:17, 12F

01/20 20:18, , 13F
也離0很遠...,雖然相對其它特徵值而言,是算非常接近
01/20 20:18, 13F

01/20 20:18, , 14F
0,如特徵值為:[1e10,1e8,1e5,1e2],最後一個就離0相對
01/20 20:18, 14F

01/20 20:19, , 15F
接近很多,不曉得這樣算會準確嗎?
01/20 20:19, 15F

01/20 20:20, , 16F
解complex root的paper還蠻多的歐 有興趣可以google zanly
01/20 20:20, 16F

01/21 18:52, , 17F
感謝各位!!!
01/21 18:52, 17F
文章代碼(AID): #1It92biE (MATLAB)
文章代碼(AID): #1It92biE (MATLAB)