看板 MATLAB 關於我們 聯絡資訊
目前我正在解一個數值滿大的一元五次方程式 我程式碼用 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
ejialan:fzero應該不是用牛頓法 牛頓法初始猜複數可以找複數根 05/29 09:33
ejialan:可以試著用fsolve 另外你的方程式是多項式可用polyval代值 05/29 09:35
ejialan:muller法應該沒有內建 但網路應該找的到別人寫好的 05/29 09:37
sunev:多項式求根可以用roots,可能準一些。 05/29 11:40
sunev:啊,沒看清楚,別理我。 05/29 11:41
weimork:ployval這指令正是我目前用來找實數根的指令...不過 05/29 14:08
weimork:我代的值已經超過matlab最小精確度,所以也是找不到真正的 05/29 14:09
weimork:實數根代入方程式讓它為零 = = 05/29 14:10
doom8199:令 x = m*y + n, 調整(m,n), 讓 f(y) 係數不要過大(小) 05/29 17:32
weimork:感謝樓上提供方法~我試試看! 05/30 11:08