[爆卦]MATLAB 解 方程式 的根是什麼?優點缺點精華區懶人包

為什麼這篇MATLAB 解 方程式 的根鄉民發文收入到精華區:因為在MATLAB 解 方程式 的根這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者ptx03 (改暱稱是宅宅)看板MATLAB標題[問題]請問matlab一元五次方程式的數值計算...


想請問板上前輩

小弟我目前用matlab 解一元五次方程式的根

由於原來的方程式係數order差異很大

所以我利用 x = m*y+n 調整 m 和 n 的大小

將原本的方程式改為 p 其中 p 的係數表示如下


p = [a1 a2 a3 a4 a5 a6]

a1 = 1

a2 = -8.3253840053406076293640580843203

a3 = 27.724839697799051663196223671548

a4 = -46.164094636185041053977329283953

a5 = 38.433515602069739713897433830425

a6 = -12.799010656064368163242761511356


由 p 可以利用 roots(p) 解出方程式的根 r1~r5

r1 = 1.6633 + 0.0061i

r2 = 1.6633 - 0.0061i

r3 = 1.6668

r4 = 1.6660 + 0.0000i

r5 = 1.6660 + 0.0000i


由上可以知道有一實根在 1.6668 附近


所以我選擇 y = 1.665:0.00001:1.667; 的區間對 p 做圖

以下為結果

http://imgur.com/Mg775kN

可以發現在這範圍內的圖型上下震盪的很嚴重

但是我輸入的是很單純一元五次函數阿

造成這樣的原因是matlab本身的問題,還是函數精度的問題呢?

有勞各位前輩解惑,謝謝! <(_ _)>

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.233.148.147
ejialan:浮點數誤差造成的 看起來振的很嚴重 那是因為order在1E-14 10/22 09:48
ejialan:由他給出的五個解看來 實部都很接近 虛部很小 粗略的看 10/22 09:52
ejialan:會視為五重根 所以在解附近的一個區間都會很接近0 10/22 09:53
ptx03:那請問這種情況可以用什麼方式改善嗎? 還是可以再調整精度計 10/22 13:46
ptx03:計算呢? 10/22 13:46
alamabarry:怎麼感覺變成單精度的浮點運算? 10/22 14:22
alamabarry:不過我印象中浮點運算誤差大概是這個量值 10/22 14:22
alamabarry:輸入eps看看 10/22 14:23
ptx03:我目前只用過vpa,eps沒有用過,可以請教一下他的功用嗎? 10/22 14:54
ptx03:歐歐!他是看電腦能分辨的最小值嗎? 10/22 14:58
ptx03:我輸入以後得到的是2.2204e-016 10/22 14:59
ptx03:所以表示我這附近的數值運算是無法再調整了嗎 @_@ 10/22 14:59
ptx03:還是可以重新定義eps讓它變得更小?增加計算精度? 10/22 15:08
H45:呃..還有個 realmin.. 10/22 17:40
H45:你研究一下 1 + 0.1 * eps, 1 + eps, realmin, 0.5 * realmin 10/22 17:42
H45:上面這些數值 (在雙倍精度浮點數下) 哪些會相等 10/22 17:43
H45:這裡有詳細說明 http://tinyurl.com/ltps9f5 10/22 17:46
alamabarry:如果你真的要很準的解~~五次方還是有公式解 10/22 18:38
alamabarry:但可能就要先用符號運算去處理了~~再把他數值化 10/22 18:38
alamabarry:如果你是要實數解而已 可以用fzero去收斂 10/22 18:40
alamabarry:roots 好像是利用矩陣的方法去求解的 很容易跑出複數 10/22 18:41
profyang:我怎麼記得四次以上就沒有公式解了@@好像還有證明 10/22 20:15
ptx03:五次方程式除了特殊型式外是沒有公式解的 Q_Q 10/22 20:44
ptx03:我有用fzero去做,但是那附近震盪很嚴重,fzero也算不準 10/22 20:46
ptx03:我是需要用到所有的根,所以要使用roots。之所以畫圖是要驗 10/22 22:24
ptx03:證roots的精準性。 10/22 22:25
alamabarry:抱歉記錯了~~四次以下~~ 10/22 23:41
profyang:實數解的話 試過牛頓法嗎?還是fzero就是= =" 10/23 05:36
profyang:不過震成這樣牛頓法應該也不會準... 10/23 08:15
ptx03:所以這種情形是無法避免的事嗎? 10/23 15:13
ptx03:但是double精度不是可以計算到e-308以下嗎? 10/23 15:14
ptx03:這樣看起來就很矛盾,有前輩可以解釋一下嗎? 10/23 15:15
ejialan:realmin是指他機器最小的浮點數 實際運算還是只有到eps 10/23 15:50
ejialan:而且會因為捨入誤差再吃掉一些 就造成振盪的情形 10/23 15:51
ejialan:如果真的要求很準的根可能要用多精度計算了 10/23 15:52
ejialan:http://ppt.cc/euTv 有toolbox 不過我沒用過 10/23 15:53
alamabarry:fzero 印象中是混合法 好像也包含二分 和牛頓等等 10/23 18:03
alamabarry:只能找實數的根 重根可能就比較危險一點 10/23 18:04
alamabarry:roots 好像是把它當成特徵方程式 建構出一個矩陣 10/23 18:05
alamabarry:用一些分解法去求出特徵值 QZ分解? 10/23 18:05
alamabarry:所以會算出複數的解 10/23 18:05
alamabarry:不過太詳細的內容不清楚 10/23 18:06
alamabarry:如果把你的數值代入整數還會這麼震盪嗎 10/23 18:06
ptx03:整數?是指a1~a6都帶整數嗎? 10/23 19:13
alamabarry:恩~~因為之前有做過類似的~但沒有變動這麼劇烈 10/23 22:58
ptx03:不這樣又會產生另一個問題! 原本方程式的係數差異非常大 10/23 23:03
ptx03:最大和最小比例是1:10^22,要是改動係數那結果就會差很多 10/23 23:04
alamabarry:單純覺得有可能是因為位數太多而產生計算的誤差 10/23 23:53
alamabarry:可以測試一下釐清原因在哪 10/23 23:53
ptx03:那我可以使用vpa來計算嗎?把小數位精度調整? 10/24 00:03
WRO:印象中超過四次還是有精確公式解,只是這個『公式』內含類似 10/28 13:04
WRO:雙曲函數或三角函數等等,也就是無法將方程式係數透過有限次的 10/28 13:05
WRO:加、減、乘、除、開根號操作得出根,這也是普遍所指的『公式 10/28 13:06
WRO:解』。所以精確的"五次公式解"印象中應該還是存在的 10/28 13:08
WRO:如果你願意接受公式內有包含加、減、乘、除、開根號以外的動作 10/28 13:10
ptx03:要用Θ函數和戴德金η函數才能建構出來。 10/28 23:39
ptx03:然而這兩種函數會花費大量運算的時間,五次函數是我程式的一 10/28 23:40
ptx03:小部分,不能花太多時間的 10/28 23:41

你可能也想看看

搜尋相關網站