作者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