[問題]請問matlab一元五次方程式的數值計算問題

看板MATLAB作者 (改暱稱是宅宅)時間11年前 (2013/10/21 22:21), 編輯推噓13(13045)
留言58則, 6人參與, 最新討論串1/1
想請問板上前輩 小弟我目前用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

10/22 09:48, , 1F
浮點數誤差造成的 看起來振的很嚴重 那是因為order在1E-14
10/22 09:48, 1F

10/22 09:52, , 2F
由他給出的五個解看來 實部都很接近 虛部很小 粗略的看
10/22 09:52, 2F

10/22 09:53, , 3F
會視為五重根 所以在解附近的一個區間都會很接近0
10/22 09:53, 3F

10/22 13:46, , 4F
那請問這種情況可以用什麼方式改善嗎? 還是可以再調整精度計
10/22 13:46, 4F

10/22 13:46, , 5F
計算呢?
10/22 13:46, 5F

10/22 14:22, , 6F
怎麼感覺變成單精度的浮點運算?
10/22 14:22, 6F

10/22 14:22, , 7F
不過我印象中浮點運算誤差大概是這個量值
10/22 14:22, 7F

10/22 14:23, , 8F
輸入eps看看
10/22 14:23, 8F

10/22 14:54, , 9F
我目前只用過vpa,eps沒有用過,可以請教一下他的功用嗎?
10/22 14:54, 9F

10/22 14:58, , 10F
歐歐!他是看電腦能分辨的最小值嗎?
10/22 14:58, 10F

10/22 14:59, , 11F
我輸入以後得到的是2.2204e-016
10/22 14:59, 11F

10/22 14:59, , 12F
所以表示我這附近的數值運算是無法再調整了嗎 @_@
10/22 14:59, 12F

10/22 15:08, , 13F
還是可以重新定義eps讓它變得更小?增加計算精度?
10/22 15:08, 13F

10/22 17:40, , 14F
呃..還有個 realmin..
10/22 17:40, 14F

10/22 17:42, , 15F
你研究一下 1 + 0.1 * eps, 1 + eps, realmin, 0.5 * realmin
10/22 17:42, 15F

10/22 17:43, , 16F
上面這些數值 (在雙倍精度浮點數下) 哪些會相等
10/22 17:43, 16F

10/22 17:46, , 17F
這裡有詳細說明 http://tinyurl.com/ltps9f5
10/22 17:46, 17F

10/22 18:38, , 18F
如果你真的要很準的解~~五次方還是有公式解
10/22 18:38, 18F

10/22 18:38, , 19F
但可能就要先用符號運算去處理了~~再把他數值化
10/22 18:38, 19F

10/22 18:40, , 20F
如果你是要實數解而已 可以用fzero去收斂
10/22 18:40, 20F

10/22 18:41, , 21F
roots 好像是利用矩陣的方法去求解的 很容易跑出複數
10/22 18:41, 21F

10/22 20:15, , 22F
我怎麼記得四次以上就沒有公式解了@@好像還有證明
10/22 20:15, 22F

10/22 20:44, , 23F
五次方程式除了特殊型式外是沒有公式解的 Q_Q
10/22 20:44, 23F

10/22 20:46, , 24F
我有用fzero去做,但是那附近震盪很嚴重,fzero也算不準
10/22 20:46, 24F

10/22 22:24, , 25F
我是需要用到所有的根,所以要使用roots。之所以畫圖是要驗
10/22 22:24, 25F

10/22 22:25, , 26F
證roots的精準性。
10/22 22:25, 26F

10/22 23:41, , 27F
抱歉記錯了~~四次以下~~
10/22 23:41, 27F

10/23 05:36, , 28F
實數解的話 試過牛頓法嗎?還是fzero就是= ="
10/23 05:36, 28F

10/23 08:15, , 29F
不過震成這樣牛頓法應該也不會準...
10/23 08:15, 29F

10/23 15:13, , 30F
所以這種情形是無法避免的事嗎?
10/23 15:13, 30F

10/23 15:14, , 31F
但是double精度不是可以計算到e-308以下嗎?
10/23 15:14, 31F

10/23 15:15, , 32F
這樣看起來就很矛盾,有前輩可以解釋一下嗎?
10/23 15:15, 32F

10/23 15:50, , 33F
realmin是指他機器最小的浮點數 實際運算還是只有到eps
10/23 15:50, 33F

10/23 15:51, , 34F
而且會因為捨入誤差再吃掉一些 就造成振盪的情形
10/23 15:51, 34F

10/23 15:52, , 35F
如果真的要求很準的根可能要用多精度計算了
10/23 15:52, 35F

10/23 15:53, , 36F
http://ppt.cc/euTv 有toolbox 不過我沒用過
10/23 15:53, 36F

10/23 18:03, , 37F
fzero 印象中是混合法 好像也包含二分 和牛頓等等
10/23 18:03, 37F

10/23 18:04, , 38F
只能找實數的根 重根可能就比較危險一點
10/23 18:04, 38F

10/23 18:05, , 39F
roots 好像是把它當成特徵方程式 建構出一個矩陣
10/23 18:05, 39F

10/23 18:05, , 40F
用一些分解法去求出特徵值 QZ分解?
10/23 18:05, 40F

10/23 18:05, , 41F
所以會算出複數的解
10/23 18:05, 41F

10/23 18:06, , 42F
不過太詳細的內容不清楚
10/23 18:06, 42F

10/23 18:06, , 43F
如果把你的數值代入整數還會這麼震盪嗎
10/23 18:06, 43F

10/23 19:13, , 44F
整數?是指a1~a6都帶整數嗎?
10/23 19:13, 44F

10/23 22:58, , 45F
恩~~因為之前有做過類似的~但沒有變動這麼劇烈
10/23 22:58, 45F

10/23 23:03, , 46F
不這樣又會產生另一個問題! 原本方程式的係數差異非常大
10/23 23:03, 46F

10/23 23:04, , 47F
最大和最小比例是1:10^22,要是改動係數那結果就會差很多
10/23 23:04, 47F

10/23 23:53, , 48F
單純覺得有可能是因為位數太多而產生計算的誤差
10/23 23:53, 48F

10/23 23:53, , 49F
可以測試一下釐清原因在哪
10/23 23:53, 49F

10/24 00:03, , 50F
那我可以使用vpa來計算嗎?把小數位精度調整?
10/24 00:03, 50F

10/28 13:04, , 51F
印象中超過四次還是有精確公式解,只是這個『公式』內含類似
10/28 13:04, 51F

10/28 13:05, , 52F
雙曲函數或三角函數等等,也就是無法將方程式係數透過有限次的
10/28 13:05, 52F

10/28 13:06, , 53F
加、減、乘、除、開根號操作得出根,這也是普遍所指的『公式
10/28 13:06, 53F

10/28 13:08, , 54F
解』。所以精確的"五次公式解"印象中應該還是存在的
10/28 13:08, 54F

10/28 13:10, , 55F
如果你願意接受公式內有包含加、減、乘、除、開根號以外的動作
10/28 13:10, 55F

10/28 23:39, , 56F
要用Θ函數和戴德金η函數才能建構出來。
10/28 23:39, 56F

10/28 23:40, , 57F
然而這兩種函數會花費大量運算的時間,五次函數是我程式的一
10/28 23:40, 57F

10/28 23:41, , 58F
小部分,不能花太多時間的
10/28 23:41, 58F
文章代碼(AID): #1IPJY0R9 (MATLAB)
文章代碼(AID): #1IPJY0R9 (MATLAB)