求解一元高次多项式方程的所有实数根的算法
一元高次多项式的形式可以表示为:
f ( x ) = c 0 + c 1 x + c 2 x 2 + c 3 x 3 + . . . + c n x n = 0 f(x) =c _0+c_1x+c_2x^2+c_3x^3+...+c_nx^n=0 f(x)=c0+c1x+c2x2+c3x3+...+cnxn=0
一般来说,一元高次多项式方程很难有显示解析解,大多使用数值算法计算方程的根,例如牛顿法、割线法等。但这些算法的缺点是计算得到的解受到迭代初始值的影响,另外在某些特定情况下,迭代也有可能不收敛。对于拥有多个实数根的多项式方程,使用这些迭代算法难以获得方程所有实数根。
本文将介绍一种新的算法,通过递归降次,将高次多项式方程的求解问题逐步转化为可以解析求解的一元二次方程,进而求解出多项式的所有实数根。
原理
首先,为了求解多项式方程的所有实根,我们需要对多项式函数进行分段。使用 x 1 , x 2 , x 3 , . . . , x k x_1,x_2,x_3,...,x_k x1,x2,x3,...,xk这一系列的点将实数轴分成若干区间段,以使得在每一个区间段上函数f(x)都是单调的。
当我们获得了这一系列的分隔点后,例如上述k个分隔点,将实数轴分为k+1个区间段,(包括 ( − ∞ , x 1 ] (-\infin,x_1] (−∞,x1]和 [ x k , + ∞ ) [x_k,+\infin) [xk,+∞)两个区间)。在每一个区间中函数都是单调的。对于区间 [ x i , x i + 1 ] [x_i,x_{i+1}] [xi,xi+1],如果 f ( x i ) f(x_i) f(xi)和 f ( x i + 1 ) f(x_{i+1}) f(xi+1)符号相反,由于函数在区间中是单调的,在该区间中必然有且仅有一个实根。这时只要我们在该区间中使用最简单的二分法就能得到该区间中的或者一个实根。
当然,如果 f ( x i ) f(x_i) f(xi)和 f ( x i +