作者weimork (0.0)
看板MATLAB
標題[運算] 關於一元五次方程式解的精準度...
時間Mon May 28 22:59:32 2012
目前我正在解一個數值滿大的一元五次方程式
我程式碼用 p=[1 c1 c2 c3 c4 c5]
c1~c5是一些很大的常數
eq=x^5+c1*x^4+c2*x^3+c3*x^2+c4*x+c5
接著使用pp=roots(p)求出五個根
但是遇到了一些問題,當我用subs(eq,x,pp(1~5))代回方程式時
所得到的值不為零,而且還非常大
後來我用 function @(x) fuc=x^5+c1*x^4+c2*x^3+c3*x^2+c4*x+c5
fzero(fuc,1) 即用牛頓法求解後
可以求出一個較精確的實數解,但是其他2個實數解代回方程式依然誤差很大
重點是,我已經知道那五個根有三個實數解,另外兩個是一對共軛複數根
即使用牛頓法硬幹也只能找出三個較準的實數解...
所以我想請問一下,除了這兩種方法,還有別種更好的方法嗎@@?
另外,matlab有指令是執行muller method嗎???
謝謝~
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.43.48
1F:→ ejialan:fzero應該不是用牛頓法 牛頓法初始猜複數可以找複數根 05/29 09:33
2F:→ ejialan:可以試著用fsolve 另外你的方程式是多項式可用polyval代值 05/29 09:35
3F:→ ejialan:muller法應該沒有內建 但網路應該找的到別人寫好的 05/29 09:37
4F:推 sunev:多項式求根可以用roots,可能準一些。 05/29 11:40
5F:→ sunev:啊,沒看清楚,別理我。 05/29 11:41
6F:→ weimork:ployval這指令正是我目前用來找實數根的指令...不過 05/29 14:08
7F:→ weimork:我代的值已經超過matlab最小精確度,所以也是找不到真正的 05/29 14:09
8F:→ weimork:實數根代入方程式讓它為零 = = 05/29 14:10
9F:→ doom8199:令 x = m*y + n, 調整(m,n), 讓 f(y) 係數不要過大(小) 05/29 17:32
10F:→ weimork:感謝樓上提供方法~我試試看! 05/30 11:08