实系数二次方程的复数根
在实数范围内无解,这句话是 复数的概念与复平面 §1 引入 的由头。把它推广到一般的 (系数全为实数),就是本页的问题:判别式为负时方程在复数集内有几个根、这两个根之间是什么关系、根与系数的旧结论还成不成立。末两节交代复数进入数学的真实场合,以及这次扩充为何是最后一次。
1 · 判别式为负时的两个根
配方法对任何非零的 都成立,与判别式的符号无关:
故方程等价于 。右端是一个实数,判别式 为负时它是负实数,而负实数在复数集内有两个平方根(见 三角形式与乘法的旋转 §3)。求根公式于是照旧可用,只需把根号下的负数换个写法。
定义 1.1(实系数二次方程的复数根) 设 、、 为实数且 。 时方程 在复数集内有两个根
根号下的 为正,取算术平方根。
判别式的三档在复平面上是连续的一件事。 时两个实根分居实轴上两点; 减小,两点相向而行,在 处撞在一起;越过零点后它们垂直离开实轴,成为一对关于实轴对称的点。实部一路钉在 不动,动的只有虚部。
判别式过零的那一点在浮点下判不准。
数学上是
,判别式应为零,而 0.1 * 0.1 - 4 * 0.0025 实测得 1.734723475976807e-18,符号为正,实现于是报出两个不等实根 0.05000000065854451 与 0.04999999934145549。判别式那 1.7e-18 的绝对误差被开方放大成
1.3e-9 的根间距——开方把误差的量级开了一次根号。把同一条抛物线的方程两边乘以 400,写成
,三个系数都能精确表示,判别式恰为 0,实现改报二重根。所以「
是否为零」这个判定依赖于方程写成什么样,不是曲线本身的性质。
求根公式还有一处与判别式符号无关的数值陷阱。
且
与
量级相近时,
这一步两项同号相减,有效位成批消失。取
、、,小根真值约为
,求根公式给 -7.450580596923828e-9,相对误差 25.5%。改由
定出两根
与
,两处都不再做同号大数相减,小根实测精确到 -1e-8。判别式为负时反倒没有这个问题:那时相加的两项一实一虚,不发生抵消。
2 · 实系数下的共轭根对
定义 1.1 的式子里,正负号只作用在虚部上,两个根实部相同、虚部相反。这不是二次方程独有的现象。
定理 2.1 设 的系数全为实数。若复数 满足 ,则 也满足 。
证明 共轭与加法、乘法可交换次序(见 四则运算与 i 的幂 §5),故 。系数为实数给出 ,右端即 。另一方面 ,两式相接得 。∎
「实系数」这个前提不能省。 的两个根是 与 ,而 代进去得 :系数里只要出现一个虚数,共轭对称就断了。
两条推论此后要用。其一,实系数多项式的非实根成对出现,个数是偶数,故奇次实系数多项式至少有一个实根,三次方程尤其如此。其二,共轭在复平面上是关于实轴的镜像(见 复数的概念与复平面 §3),所以一对虚根关于实轴对称,连线垂直于实轴,中点落在实轴的 处。
3 · 复数域上的根与系数关系
韦达定理的推导只用到分解式,与根是实是虚无关。 取任何符号下都有 ,展开右端并比较系数:
两根为共轭虚根时,这两个量为何是实数有直接的读法:和是 ,积是 。前者说两根的实部同为 ,后者说两根的模同为 ,即两个根落在以原点为心、 为半径的圆上。半径写得出来是因为 蕴含 ,商 必为正。这类以模为半径的圆见 模与距离给出的轨迹 §2。
是一个现成的例子:判别式 ,两根 ,和为 ,积为 ,两根的模同为 。
浮点下两支的表现并不对称,这是写核心模块的单测时撞出来的。18 万余组随机实系数(,
与
落在
到
之间)实测:判别式为正一支,两根之积的相对残差最大 3.275e-14;判别式为负一支只有 4.410e-16,而两根之和的残差在全部样本上恒为 0。原因在共轭对的和是
乘 2,乘 2 在二进制下只改阶码,一位有效数字都不丢;两个实根相加则要把
与
抵消掉,各自带进来的舍入留在了结果里。虚根那一支算得比实根一支更准,与「虚数更麻烦」的直觉相反。
4 · 卡尔达诺公式里的虚数弯路
二次方程的负判别式可以用一句「无实根」打发过去,因为要求的东西本来就不存在。三次方程没有这条退路:实系数三次方程至少有一个实根(§2 的推论),而求这个实根的公式会中途要求对负数开平方。
一般三次方程作代换 消去二次项,化为压缩形式 。卡尔达诺公式取
根号下那个量为负时,三个根全是实数而中间量 是虚数。这一支叫不可约情形(casus irreducibilis)。它不是公式没选好:Wantzel 于 1843 年证明,方程在有理数域上不可约且三个根都是实数时,这些根无法只用实数范围内的根式表出。绕道复平面是必需的,不是偷懒。
Bombelli 1572 年《代数学》里的例子是
。这个方程一眼看得出
是根,而公式给出
。Bombelli 把
这样的量当作数来算,取
、,两者相加得
。实现里跑同一组数:
的立方根取到 1.9999999999999996 + 1i,三个根算得 4、-3.7320508075688776、-0.26794919243112464,虚部最大只有 8.88e-16。复数在历史上第一次成为非算不可的东西,就是在这个位置,比它作为「
的解」被接受早了两百多年。
照抄这条公式会在实数支上算崩,这是实现时踩到的。
时
与那个平方根异号且量级相近,
被抵消到近零,随后
把误差放大回来。3000 组随机的
与
实测,照抄写法的最大代回残差是 3.9016e-6;把平方根取成与
同号之后降到 3.6629e-14。两种取法给出同一组根,因为另一支恰是
,
与
在公式里本就对称。
5 · 一次扩充的终点
复数是为解方程造出来的,接着的疑问是这条路要走多少轮:解 造出 ,那么 、 是否又各要造一批新数。
定理 5.1(代数基本定理) 次数不小于 1 的复系数多项式在复数集内至少有一个根。反复分出一次因式即得推论: 次复系数多项式在复数集内恰有 个根(按重数计)。
本页不证这条定理,因为它的分量不在证法而在推论:复数集是一个代数闭域(algebraically closed field),对「解代数方程」这件事封闭。为解一个实系数方程造出的新数,把所有复系数方程一并解决了。数系扩充的这条线在此闭合:自然数不够减,补出整数;整数不够除,补出有理数;有理数不够开方与取极限,补出实数;实数不够解 ,补出复数。前四步各由一类解不出的方程逼出来,第五步之后再没有这样的方程。
「代数」基本定理这个名字有点名不副实。已知的证明没有一条是纯代数的:复分析路线用刘维尔定理,拓扑路线用绕数,最省代数外功夫的 Artin 路线也要借「奇次实系数多项式必有实根」这一条,而它本身靠介值定理。这并不奇怪——定理断言的是实数域这个特定对象的性质,而实数的定义里就含着完备性这条分析事实。相比之下,「复数集代数闭」这句话本身倒是纯代数的说法。
数系再往外扩并非没有先例:四元数、八元数都是。但它们不是为解方程造的,且每扩一步要交出一条运算律:四元数放弃乘法交换律,八元数再放弃结合律。代数方程这条线在复数处就停了。
6 · 参考文献
- Fundamental theorem of algebra. Wikipedia. 定理的陈述与各类证明所依赖的分析事实。https://en.wikipedia.org/wiki/Fundamental_theorem_of_algebra
- Casus irreducibilis. Wikipedia. 三实根的不可约三次方程不能用实根式表出。https://en.wikipedia.org/wiki/Casus_irreducibilis
- Cubic equation. Wikipedia. 卡尔达诺公式、压缩形式与三次方程的判别式。https://en.wikipedia.org/wiki/Cubic_equation
- Rafael Bombelli. Wikipedia. 1572 年《代数学》中用虚数算出 x³ = 15x + 4 的实根。https://en.wikipedia.org/wiki/Rafael_Bombelli
- Vieta's formulas. Wikipedia. 根与系数的关系及其在复数域的形式。https://en.wikipedia.org/wiki/Vieta%27s_formulas
- Loss of significance. Wikipedia. 求根公式里 −b + √Δ 的抵消与数值稳定的写法。https://en.wikipedia.org/wiki/Loss_of_significance