数学 / 复数 · 一个点、一次旋转 / 实系数二次方程的复数根 待审核 3 / 5
b² − 4ac < 0

实系数二次方程的复数根

x2+1=0x^2 + 1 = 0 在实数范围内无解,这句话是 复数的概念与复平面 §1 引入 ii 的由头。把它推广到一般的 ax2+bx+c=0ax^2 + bx + c = 0(系数全为实数),就是本页的问题:判别式为负时方程在复数集内有几个根、这两个根之间是什么关系、根与系数的旧结论还成不成立。末两节交代复数进入数学的真实场合,以及这次扩充为何是最后一次。

1 · 判别式为负时的两个根

配方法对任何非零的 aa 都成立,与判别式的符号无关:

ax2+bx+c=a(x+b2a)2b24ac4aax^2 + bx + c = a\left(x + \frac{b}{2a}\right)^2 - \frac{b^2 - 4ac}{4a}

故方程等价于 (x+b2a)2=b24ac4a2\left(x + \dfrac{b}{2a}\right)^2 = \dfrac{b^2 - 4ac}{4a^2}。右端是一个实数,判别式 Δ=b24ac\Delta = b^2 - 4ac 为负时它是负实数,而负实数在复数集内有两个平方根(见 三角形式与乘法的旋转 §3)。求根公式于是照旧可用,只需把根号下的负数换个写法。

定义 1.1(实系数二次方程的复数根)aabbcc 为实数且 a0a \ne 0Δ<0\Delta < 0 时方程 ax2+bx+c=0ax^2 + bx + c = 0 在复数集内有两个根

x1,2=b±i4acb22ax_{1,2} = \frac{-b \pm i\sqrt{4ac - b^2}}{2a}

根号下的 4acb24ac - b^2 为正,取算术平方根。

判别式的三档在复平面上是连续的一件事。Δ>0\Delta > 0 时两个实根分居实轴上两点;Δ\Delta 减小,两点相向而行,在 Δ=0\Delta = 0 处撞在一起;越过零点后它们垂直离开实轴,成为一对关于实轴对称的点。实部一路钉在 b/(2a)-b/(2a) 不动,动的只有虚部。

图 1-1 · 二次方程的两根随判别式移动,以及求根公式在大 bb 处的抵消。可调 aabbcc 观察两根合并后离开实轴,或切换到第二栏按 b=10kb = 10^k 对照两条算路给出的小根。

判别式过零的那一点在浮点下判不准。x20.1x+0.0025x^2 - 0.1x + 0.0025 数学上是 (x0.05)2(x - 0.05)^2,判别式应为零,而 0.1 * 0.1 - 4 * 0.0025 实测得 1.734723475976807e-18,符号为正,实现于是报出两个不等实根 0.050000000658544510.04999999934145549。判别式那 1.7e-18 的绝对误差被开方放大成 1.3e-9 的根间距——开方把误差的量级开了一次根号。把同一条抛物线的方程两边乘以 400,写成 400x240x+1=0400x^2 - 40x + 1 = 0,三个系数都能精确表示,判别式恰为 0,实现改报二重根。所以「Δ\Delta 是否为零」这个判定依赖于方程写成什么样,不是曲线本身的性质。

求根公式还有一处与判别式符号无关的数值陷阱。Δ>0\Delta > 0bbΔ\sqrt{\Delta} 量级相近时,b+Δ-b + \sqrt{\Delta} 这一步两项同号相减,有效位成批消失。取 a=1a = 1b=108b = 10^8c=1c = 1,小根真值约为 108-10^{-8},求根公式给 -7.450580596923828e-9,相对误差 25.5%。改由 q=(b+sgn(b)Δ)/2q = -\bigl(b + \operatorname{sgn}(b)\sqrt{\Delta}\bigr)/2 定出两根 q/aq/ac/qc/q,两处都不再做同号大数相减,小根实测精确到 -1e-8。判别式为负时反倒没有这个问题:那时相加的两项一实一虚,不发生抵消。

2 · 实系数下的共轭根对

定义 1.1 的式子里,正负号只作用在虚部上,两个根实部相同、虚部相反。这不是二次方程独有的现象。

定理 2.1f(x)=anxn++a1x+a0f(x) = a_n x^n + \dots + a_1 x + a_0 的系数全为实数。若复数 zz 满足 f(z)=0f(z) = 0,则 zˉ\bar z 也满足 f(zˉ)=0f(\bar z) = 0

证明 共轭与加法、乘法可交换次序(见 四则运算与 i 的幂 §5),故 f(z)=kakzk=kakzˉk\overline{f(z)} = \sum_k \overline{a_k z^k} = \sum_k \overline{a_k} \cdot \bar z^{\,k}。系数为实数给出 ak=ak\overline{a_k} = a_k,右端即 f(zˉ)f(\bar z)。另一方面 f(z)=0ˉ=0\overline{f(z)} = \bar 0 = 0,两式相接得 f(zˉ)=0f(\bar z) = 0。∎

「实系数」这个前提不能省。x2ix=0x^2 - ix = 0 的两个根是 00ii,而 i-i 代进去得 11=20-1 - 1 = -2 \ne 0:系数里只要出现一个虚数,共轭对称就断了。

两条推论此后要用。其一,实系数多项式的非实根成对出现,个数是偶数,故奇次实系数多项式至少有一个实根,三次方程尤其如此。其二,共轭在复平面上是关于实轴的镜像(见 复数的概念与复平面 §3),所以一对虚根关于实轴对称,连线垂直于实轴,中点落在实轴的 b/(2a)-b/(2a) 处。

3 · 复数域上的根与系数关系

韦达定理的推导只用到分解式,与根是实是虚无关。Δ\Delta 取任何符号下都有 ax2+bx+c=a(xx1)(xx2)ax^2 + bx + c = a(x - x_1)(x - x_2),展开右端并比较系数:

x1+x2=ba,x1x2=cax_1 + x_2 = -\frac{b}{a}, \qquad x_1 x_2 = \frac{c}{a}

两根为共轭虚根时,这两个量为何是实数有直接的读法:和是 z+zˉ=2Rezz + \bar z = 2\operatorname{Re} z,积是 zzˉ=z2z \bar z = |z|^2。前者说两根的实部同为 b/(2a)-b/(2a),后者说两根的模同为 c/a\sqrt{c/a},即两个根落在以原点为心、c/a\sqrt{c/a} 为半径的圆上。半径写得出来是因为 Δ<0\Delta < 0 蕴含 ac>0ac > 0,商 c/ac/a 必为正。这类以模为半径的圆见 模与距离给出的轨迹 §2。

x22x+5=0x^2 - 2x + 5 = 0 是一个现成的例子:判别式 16-16,两根 1±2i1 \pm 2i,和为 2=b/a2 = -b/a,积为 12+22=5=c/a1^2 + 2^2 = 5 = c/a,两根的模同为 5\sqrt 5

浮点下两支的表现并不对称,这是写核心模块的单测时撞出来的。18 万余组随机实系数(a0.2|a| \ge 0.2bbcc 落在 10-101010 之间)实测:判别式为正一支,两根之积的相对残差最大 3.275e-14;判别式为负一支只有 4.410e-16,而两根之和的残差在全部样本上恒为 0。原因在共轭对的和是 b/(2a)-b/(2a) 乘 2,乘 2 在二进制下只改阶码,一位有效数字都不丢;两个实根相加则要把 +Δ+\sqrt{\Delta}Δ-\sqrt{\Delta} 抵消掉,各自带进来的舍入留在了结果里。虚根那一支算得比实根一支更准,与「虚数更麻烦」的直觉相反。

4 · 卡尔达诺公式里的虚数弯路

二次方程的负判别式可以用一句「无实根」打发过去,因为要求的东西本来就不存在。三次方程没有这条退路:实系数三次方程至少有一个实根(§2 的推论),而求这个实根的公式会中途要求对负数开平方。

一般三次方程作代换 x=tb/(3a)x = t - b/(3a) 消去二次项,化为压缩形式 t3+pt+q=0t^3 + pt + q = 0。卡尔达诺公式取

u3=q2+q24+p327,v=p3u,t=u+vu^3 = -\frac{q}{2} + \sqrt{\frac{q^2}{4} + \frac{p^3}{27}}, \qquad v = -\frac{p}{3u}, \qquad t = u + v

根号下那个量为负时,三个根全是实数而中间量 u3u^3 是虚数。这一支叫不可约情形(casus irreducibilis)。它不是公式没选好:Wantzel 于 1843 年证明,方程在有理数域上不可约且三个根都是实数时,这些根无法只用实数范围内的根式表出。绕道复平面是必需的,不是偷懒。

Bombelli 1572 年《代数学》里的例子是 x3=15x+4x^3 = 15x + 4。这个方程一眼看得出 x=4x = 4 是根,而公式给出 u3=2+11iu^3 = 2 + 11i。Bombelli 把 121\sqrt{-121} 这样的量当作数来算,取 u=2+iu = 2 + iv=2iv = 2 - i,两者相加得 44。实现里跑同一组数:2+11i2 + 11i 的立方根取到 1.9999999999999996 + 1i,三个根算得 4-3.7320508075688776-0.26794919243112464,虚部最大只有 8.88e-16。复数在历史上第一次成为非算不可的东西,就是在这个位置,比它作为「x2=1x^2 = -1 的解」被接受早了两百多年。

图 4-1 · 卡尔达诺公式的中间量与压缩三次方程的三个根。可调 ppqq 使 q2/4+p3/27q^2/4 + p^3/27 的符号翻转,观察三个根全落回实轴而 u3u^3 仍是虚数的那一支。

照抄这条公式会在实数支上算崩,这是实现时踩到的。q>0q > 0q/2-q/2 与那个平方根异号且量级相近,u3u^3 被抵消到近零,随后 v=p/(3u)v = -p/(3u) 把误差放大回来。3000 组随机的 ppqq 实测,照抄写法的最大代回残差是 3.9016e-6;把平方根取成与 q/2-q/2 同号之后降到 3.6629e-14。两种取法给出同一组根,因为另一支恰是 v3v^3uuvv 在公式里本就对称。

5 · 一次扩充的终点

复数是为解方程造出来的,接着的疑问是这条路要走多少轮:解 x2=1x^2 = -1 造出 ii,那么 x2=ix^2 = ix5x+1=0x^5 - x + 1 = 0 是否又各要造一批新数。

定理 5.1(代数基本定理) 次数不小于 1 的复系数多项式在复数集内至少有一个根。反复分出一次因式即得推论:nn 次复系数多项式在复数集内恰有 nn 个根(按重数计)。

本页不证这条定理,因为它的分量不在证法而在推论:复数集是一个代数闭域(algebraically closed field),对「解代数方程」这件事封闭。为解一个实系数方程造出的新数,把所有复系数方程一并解决了。数系扩充的这条线在此闭合:自然数不够减,补出整数;整数不够除,补出有理数;有理数不够开方与取极限,补出实数;实数不够解 x2=1x^2 = -1,补出复数。前四步各由一类解不出的方程逼出来,第五步之后再没有这样的方程。

「代数」基本定理这个名字有点名不副实。已知的证明没有一条是纯代数的:复分析路线用刘维尔定理,拓扑路线用绕数,最省代数外功夫的 Artin 路线也要借「奇次实系数多项式必有实根」这一条,而它本身靠介值定理。这并不奇怪——定理断言的是实数域这个特定对象的性质,而实数的定义里就含着完备性这条分析事实。相比之下,「复数集代数闭」这句话本身倒是纯代数的说法。

数系再往外扩并非没有先例:四元数、八元数都是。但它们不是为解方程造的,且每扩一步要交出一条运算律:四元数放弃乘法交换律,八元数再放弃结合律。代数方程这条线在复数处就停了。

6 · 参考文献

  1. Fundamental theorem of algebra. Wikipedia. 定理的陈述与各类证明所依赖的分析事实。https://en.wikipedia.org/wiki/Fundamental_theorem_of_algebra
  2. Casus irreducibilis. Wikipedia. 三实根的不可约三次方程不能用实根式表出。https://en.wikipedia.org/wiki/Casus_irreducibilis
  3. Cubic equation. Wikipedia. 卡尔达诺公式、压缩形式与三次方程的判别式。https://en.wikipedia.org/wiki/Cubic_equation
  4. Rafael Bombelli. Wikipedia. 1572 年《代数学》中用虚数算出 x³ = 15x + 4 的实根。https://en.wikipedia.org/wiki/Rafael_Bombelli
  5. Vieta's formulas. Wikipedia. 根与系数的关系及其在复数域的形式。https://en.wikipedia.org/wiki/Vieta%27s_formulas
  6. Loss of significance. Wikipedia. 求根公式里 −b + √Δ 的抵消与数值稳定的写法。https://en.wikipedia.org/wiki/Loss_of_significance