代数基本定理 定义 任何复系数一元 𝑛 n 𝑛 n 1 1 
由此推出,𝑛 n 𝑛 n 
有时这个定理也表述为:
任何一个非零的一元 𝑛 n 𝑛 n 
代数基本定理的证明,一般会用到复变函数或者近世代数,因此往往作为一个熟知结论直接应用。
根据代数基本定理,一个复系数多项式 𝑓 ( 𝑥 )   = 𝑎 𝑛 𝑥 𝑛   + 𝑎 𝑛 − 1 𝑥 𝑛 − 1   + …   + 𝑎 0 f ( x ) = a n x n + a n − 1 x n − 1 + … + a 0 
𝑓 ( 𝑥 ) = 𝑎 𝑛 ( 𝑥 − 𝑥 1 ) 𝑘 1 ( 𝑥 − 𝑥 2 ) 𝑘 2 … ( 𝑥 − 𝑥 𝑡 ) 𝑘 𝑡 f ( x ) = a n ( x − x 1 ) k 1 ( x − x 2 ) k 2 … ( x − x t ) k t 其中各个根均为复数,𝑘 1   + 𝑘 2   + …   + 𝑘 𝑡   = 𝑛 k 1 + k 2 + … + k t = n 
虚根成对定理 代数基本定理的研究对象是复系数多项式。当对实系数多项式进行研究时,虽然也能分解出复数根,却需要将研究范围扩大,不太方便。
虚根:非实数根。
定理:实系数多项式的根的共轭复数也是该多项式的根。
证明:直接在代数基本定理的等式两端取共轭即证毕。
如果根本身是实数,则取共轭仍为它本身,不受影响。
如果根是虚根,则虚根的共轭复数也是原多项式的根。那么,两个虚根就可以配对。
定理:实数系数方程的共轭虚根一定成对出现,并且共轭虚根的重数相等。
证明:假设一个根为 𝑎   + 𝑏 i a + b i 𝑎   − 𝑏 i a − b i 
( 𝑥 − 𝑎 − 𝑏 i ) ( 𝑥 − 𝑎 + 𝑏 i ) = 𝑥 2 − 2 𝑎 𝑥 + 𝑎 2 + 𝑏 2 ( x − a − b i ) ( x − a + b i ) = x 2 − 2 a x + a 2 + b 2 可以看到两项乘在一起,各项系数会全部变为实数。这个等式右端的二次实系数多项式整除原始的多项式。
于是,在代数基本定理的等式中,两遍同时除以这个二次三项式,得到的仍旧是实系数多项式的等式。对新等式重复操作,随着次数的下降,若干次后即不存在虚根。
因此,每对共轭虚根的重数相等。证毕。
以下是虚根成对定理的推论:
实系数奇次多项式至少有一个实根,并且总共有奇数个实根。 实系数偶次多项式可能没有实根,总共有偶数个实根。 称上述二次三项式 𝑥 2   − 2 𝑎 𝑥   + 𝑎 2   + 𝑏 2   = 𝑥 2   + 𝑝 𝑥   + 𝑞 x 2 − 2 a x + a 2 + b 2 = x 2 + p x + q 
定理:实系数多项式一定是一次或者二次实系数不可约因式的积。
证明:
只要实系数多项式有一个实根 𝑐 c 𝑥   − 𝑐 x − c 𝑎   ± 𝑏 i a ± b i 𝑥 2   − 2 𝑎 𝑥   + 𝑎 2   + 𝑏 2 x 2 − 2 a x + a 2 + b 2 
因此,只要在原始的代数基本定理分解式中,利用虚根成对定理进行配对,即证毕。
根据虚根成对定理,一个实系数多项式 𝑓 ( 𝑥 )   = 𝑎 𝑛 𝑥 𝑛   + 𝑎 𝑛 − 1 𝑥 𝑛 − 1   + …   + 𝑎 0 f ( x ) = a n x n + a n − 1 x n − 1 + … + a 0 
𝑓 ( 𝑥 ) = 𝑎 𝑛 ( 𝑥 − 𝑥 1 ) 𝑘 1 ( 𝑥 − 𝑥 2 ) 𝑘 2 … ( 𝑥 − 𝑥 𝑡 ) 𝑘 𝑡 ( 𝑥 2 + 𝑝 1 𝑥 + 𝑞 1 ) 𝑙 1 ( 𝑥 2 + 𝑝 2 𝑥 + 𝑞 2 ) 𝑙 2 … ( 𝑥 2 + 𝑝 𝑠 𝑥 + 𝑞 𝑠 ) 𝑙 𝑠 f ( x ) = a n ( x − x 1 ) k 1 ( x − x 2 ) k 2 … ( x − x t ) k t ( x 2 + p 1 x + q 1 ) l 1 ( x 2 + p 2 x + q 2 ) l 2 … ( x 2 + p s x + q s ) l s 其中各项系数均为实数,𝑘 1   + 𝑘 2   + …   + 𝑘 𝑡   + 2 ( 𝑙 1   + 𝑙 2   + …   + 𝑙 𝑠 )   = 𝑛 k 1 + k 2 + … + k t + 2 ( l 1 + l 2 + … + l s ) = n 
林士谔算法 简介 怎样对实系数多项式进行代数基本定理的分解?如果将数域扩充至复数会很复杂。
如果只在实数范围内进行分解,只能保证,当次数大于 2 2 
这是因为,如果该多项式有虚根,直接凑出一对共轭虚根即可。如果该多项式只有实根,任取两个实根对应的一次因式乘在一起,也能得到实系数二次三项式因式。
找到二次三项式因式之后,再从二次式中解实根或复根就极为容易。于是便有逐次 找出一个二次因子  来求得方程的复根的计算方法,这种方法避免了复数运算。
在 1940 年 8 月、1943 年 8 月和 1947 年 7 月,林士谔先后在 MIT 出版的《数学物理》杂志上接连正式发表了 3 篇关于解算高阶方程式复根方法的论文
这个方法今天还在现代计算机中进行快速运算,计算机程序包(如 MATLAB)中的多项式求根程序依据的原理也是这个算法。
过程 要想找到一个二次三项式因子,就要将多项式分解为:
𝑓 ( 𝑥 ) = ( 𝑥 2 + 𝑝 1 𝑥 + 𝑞 1 ) 𝑔 ( 𝑥 ) f ( x ) = ( x 2 + p 1 x + q 1 ) g ( x ) 由于无法一下子找到二次三项式因子,按照迭代求解的思路,对于初始值有:
𝑓 ( 𝑥 ) = ( 𝑥 2 + 𝑝 𝑥 + 𝑞 ) 𝑔 ( 𝑥 ) + 𝑟 𝑥 + 𝑠 f ( x ) = ( x 2 + p x + q ) g ( x ) + r x + s 会产生一个一次式作为余项。只要余项足够小,即可近似地找到待求因子。
我们希望最终解是初始值加一个偏移修正:
𝑝 1 = 𝑝 + 𝑑 𝑝 p 1 = p + d p 𝑞 1 = 𝑞 + 𝑑 𝑞 q 1 = q + d q 余式中的两个数 ( 𝑟 , 𝑠 ) ( r , s ) ( 𝑝 , 𝑞 ) ( p , q ) 
𝑑 𝑟 = 𝜕 𝑟 𝜕 𝑝 𝑑 𝑝 + 𝜕 𝑟 𝜕 𝑞 𝑑 𝑞 d r = ∂ r ∂ p d p + ∂ r ∂ q d q 𝑑 𝑠 = 𝜕 𝑠 𝜕 𝑝 𝑑 𝑝 + 𝜕 𝑠 𝜕 𝑞 𝑑 𝑞 d s = ∂ s ∂ p d p + ∂ s ∂ q d q 在初始的等式中,被除式 𝑓 ( 𝑥 ) f ( x ) 𝑔 ( 𝑥 ) g ( x ) 𝑟 𝑥   + 𝑠 r x + s 𝑥 2   + 𝑝 𝑥   + 𝑞 x 2 + p x + q 
0 = 𝑥 𝑔 ( 𝑥 ) + 𝜕 𝑔 ( 𝑥 ) 𝜕 𝑝 ( 𝑥 2 + 𝑝 𝑥 + 𝑞 ) + 𝜕 𝑟 𝜕 𝑝 𝑥 + 𝜕 𝑠 𝜕 𝑝 0 = x g ( x ) + ∂ g ( x ) ∂ p ( x 2 + p x + q ) + ∂ r ∂ p x + ∂ s ∂ p 0 = 𝑔 ( 𝑥 ) + 𝜕 𝑔 ( 𝑥 ) 𝜕 𝑞 ( 𝑥 2 + 𝑝 𝑥 + 𝑞 ) + 𝜕 𝑟 𝜕 𝑞 𝑥 + 𝜕 𝑠 𝜕 𝑞 0 = g ( x ) + ∂ g ( x ) ∂ q ( x 2 + p x + q ) + ∂ r ∂ q x + ∂ s ∂ q 注意到,偏导数只是一个数值,与变元 𝑥 x 
𝑥 𝑔 ( 𝑥 ) = − 𝜕 𝑔 ( 𝑥 ) 𝜕 𝑝 ( 𝑥 2 + 𝑝 𝑥 + 𝑞 ) − 𝜕 𝑟 𝜕 𝑝 𝑥 − 𝜕 𝑠 𝜕 𝑝 x g ( x ) = − ∂ g ( x ) ∂ p ( x 2 + p x + q ) − ∂ r ∂ p x − ∂ s ∂ p 𝑔 ( 𝑥 ) = − 𝜕 𝑔 ( 𝑥 ) 𝜕 𝑞 ( 𝑥 2 + 𝑝 𝑥 + 𝑞 ) − 𝜕 𝑟 𝜕 𝑞 𝑥 − 𝜕 𝑠 𝜕 𝑞 g ( x ) = − ∂ g ( x ) ∂ q ( x 2 + p x + q ) − ∂ r ∂ q x − ∂ s ∂ q 这里的结论是,待求的偏导数,恰好是对商式继续做除法的余式。多项式对给定二次三项式的除法,直接计算即可。这里就求得了四个偏导数。
我们希望 𝑠 s 𝑟 r 𝑑 𝑠 d s 𝑑 𝑟 d r 0 0 𝑑 𝑠 d s 𝑑 𝑟 d r 𝑠 s 𝑟 r 
− 𝜕 𝑟 𝜕 𝑝 𝑑 𝑝 − 𝜕 𝑟 𝜕 𝑞 𝑑 𝑞 = 𝑟 − ∂ r ∂ p d p − ∂ r ∂ q d q = r − 𝜕 𝑠 𝜕 𝑝 𝑑 𝑝 − 𝜕 𝑠 𝜕 𝑞 𝑑 𝑞 = 𝑠 − ∂ s ∂ p d p − ∂ s ∂ q d q = s 从上述方程组中解得 𝑝 p 𝑞 q 𝑑 𝑝 d p 𝑑 𝑞 d q 
实现 
 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 // a 是原始的多项式,n 是多项式次数,p 是待求的一次项,q 是待求的常数项 
void   Shie ( double   a [],   int   n ,   double   * p ,   double   * q )   { 
   // 数组 b 是多项式 a 除以当前迭代二次三项式的商 
   memset ( b ,   0 ,   sizeof ( b )); 
   // 数组 c 是多项式 b 乘以 x 平方再除以当前迭代二次三项式的商 
   memset ( c ,   0 ,   sizeof ( c )); 
   * p   =   0 ; 
   * q   =   0 ; 
   double   dp   =   1 ; 
   double   dq   =   1 ; 
   while   ( dp   >   eps   ||   dp   <   - eps   ||   dq   >   eps   ||   dq   <   - eps )    // eps 自行设定 
   { 
     double   p0   =   p ; 
     double   q0   =   q ; 
     b [ n   -   2 ]   =   a [ n ]; 
     c [ n   -   2 ]   =   b [ n   -   2 ]; 
     b [ n   -   3 ]   =   a [ n   -   1 ]   -   p0   *   b [ n   -   2 ]; 
     c [ n   -   3 ]   =   b [ n   -   3 ]   -   p0   *   b [ n   -   2 ]; 
     int   j ; 
     for   ( j   =   n   -   4 ;   j   >=   0 ;   j -- )   { 
       b [ j ]   =   a [ j   +   2 ]   -   p0   *   b [ j   +   1 ]   -   q0   *   b [ j   +   2 ]; 
       c [ j ]   =   b [ j ]   -   p0   *   c [ j   +   1 ]   -   q0   *   c [ j   +   2 ]; 
     } 
     double   r   =   a [ 1 ]   -   p0   *   b [ 0 ]   -   q0   *   b [ 1 ]; 
     double   s   =   a [ 0 ]   -   q0   *   b [ 0 ]; 
     double   rp   =   c [ 1 ]; 
     double   sp   =   b [ 0 ]   -   q0   *   c [ 2 ]; 
     double   rq   =   c [ 0 ]; 
     double   sq   =   - q0   *   c [ 1 ]; 
     dp   =   ( rp   *   s   -   r   *   sp )   /   ( rp   *   sq   -   rq   *   sp ); 
     dq   =   ( r   *   sq   -   rq   *   s )   /   ( rp   *   sq   -   rq   *   sp ); 
     * p   +=   dp ; 
     * q   +=   dq ; 
   } 
} 
参考资料与注释 2023/7/30 10:47:50 ,更新历史 在 GitHub 上编辑此页! Tiphereth-A , Xeonacid , Enter-tainer , Great-designer , iamtwz , Jijidawang CC BY-SA 4.0  和 SATA