数学 / 复数 · 一个点、一次旋转 / 四则运算与 i 的幂 待审核 2 / 5
i² = −1

四则运算与 i 的幂

复数的四则运算只有一条新规则:i2=1i^2 = -1。其余照多项式运算做,把 ii 当字母处理,遇到 i2i^2 就换成 1-1。本页依次给出四种运算的形式与几何对应,并交代除法为何要先给分母乘上共轭。

1 · 加减法与向量的对应

加减法逐部进行:

(a+bi)±(c+di)=(a±c)+(b±d)i(a + bi) \pm (c + di) = (a \pm c) + (b \pm d)i

这与向量按坐标相加减是同一个式子,故复平面上 z+wz + w 落在以 zzww 为邻边的平行四边形的第四个顶点上,zwz - w 则对应从 ww 指向 zz 的那条向量,它与从原点出发的 zwz - w 平行且等长。差的这条对应关系是几何应用的入口:两点间的距离就是 zw|z - w|(见 模与距离给出的轨迹 §3)。

图 1-1 · 四则运算与 i 的幂。可切换运算并调 z 与 w 的实部虚部,读数给出两条算路的结果与它们的差值。

2 · 乘法的展开式与极坐标路径

按分配律展开再用 i2=1i^2 = -1 收拢:

(a+bi)(c+di)=(acbd)+(ad+bc)i(a + bi)(c + di) = (ac - bd) + (ad + bc)i

同一个乘法还有另一条算路:模相乘、辐角相加(见 三角形式与乘法的旋转 §2)。两条路径在数学上是同一个函数,在浮点下不是同一串位。(2+3i)(4+5i)(2 + 3i)(4 + 5i) 的展开式给 7+22i-7 + 22i,极坐标路径给的实部是 -6.9999999999999964。20 万组随机取值(实部与虚部都落在 10-101010 之间)下,两条路径的绝对偏差最大 8.53e-14、相对偏差最大 9.47e-16,即几个 ulp 的量级。

这个量级恰好使两条路径互为对照:核心模块的单测拿它们互验,谁都不是「把被测公式抄一遍」。若某天展开式写错一个符号,随机取值下的偏差会立刻从 1e-16 跳到 1e0 量级,而不是悄悄通过。

3 · i 的幂的周期

i1=ii^1 = ii2=1i^2 = -1i3=ii^3 = -ii4=1i^4 = 1,此后循环。指数除以 44 的余数决定值,四个连续幂之和恒为零:in+in+1+in+2+in+3=0i^n + i^{n+1} + i^{n+2} + i^{n+3} = 0。这条常用来一口气消掉长求和里的大部分项。

实现按余数查表,而不用 cos(nπ/2)\cos(n\pi/2)sin(nπ/2)\sin(n\pi/2)。后者从 n=1n = 1 起就不精确:Math.cos(Math.PI / 2)6.123233995736766e-17 而非 0,到 n=8n = 8 时虚部的偏差已是 -4.898587196589413e-16,误差随 nn 线性累积。查表则逐个精确,且负指数也走同一张表:(n % 4 + 4) % 4 把 JS 的余数符号归一之后,i1=ii^{-1} = -ii3i^3 落到同一格。

注 · 用重复相乘算 ii 的幂同样精确,但会带出一个负零:i3i^3(1+0i)i(-1 + 0i) \cdot i 得到,实部是 1×00×1-1 \times 0 - 0 \times 1,在 IEEE 754 下是 -0。查表给的是 +0。单测里用 toEqual 深比较这两个结果会失败,改按差值比对才通过——判等的坑不在虚部,在那个看不见的符号位。

4 · 除法与分母实数化

除法的目标是把结果写回 a+bia + bi 的形式,而分母带 ii 时办不到。给分子分母同乘分母的共轭,分母变成实数 w2|w|^2

a+bic+di=(a+bi)(cdi)(c+di)(cdi)=(ac+bd)+(bcad)ic2+d2\frac{a + bi}{c + di} = \frac{(a + bi)(c - di)}{(c + di)(c - di)} = \frac{(ac + bd) + (bc - ad)i}{c^2 + d^2}

这一步叫分母实数化,与实数里根式分母有理化是同一个套路。

例 4.1 计算 3+4i1+2i\dfrac{3 + 4i}{1 + 2i}。分子分母同乘 12i1 - 2i:分子 (3+4i)(12i)=36i+4i+8=112i(3 + 4i)(1 - 2i) = 3 - 6i + 4i + 8 = 11 - 2i,分母 12+22=51^2 + 2^2 = 5,故商为 2.20.4i2.2 - 0.4i

另一条算路是先求倒数 w1=wˉ/w2w^{-1} = \bar w / |w|^2 再相乘。它与分母实数化的差别只在做除法的时机,20 万组随机取值下最大相对偏差 2.70e-16。落到例 4.1 这个数上,分母实数化给的虚部是 -0.4,乘倒数给 -0.40000000000000013——=== -0.4 一条为真一条为假。两条路径同样在单测里互验,另加一条闭合检验:商乘回除数应得被除数。

零仍然不能作除数,也没有倒数。实现在 w=0|w| = 0 时返回空值,而不是让 Infinity 流进后续计算——一旦流出去,画板上得到的是 NaN 坐标,报错点离病因很远。

5 · 共轭的运算律

共轭与四则运算可交换次序:

z±w=zˉ±wˉ,zw=zˉwˉ,z/w=zˉ/wˉ\overline{z \pm w} = \bar z \pm \bar w, \qquad \overline{zw} = \bar z \cdot \bar w, \qquad \overline{z / w} = \bar z / \bar w

三条都由定义直接展开可得,单测也就按定义展开去验,而不是引用另一条公式。另有两个常用等式:zzˉ=z2z \bar z = |z|^2 是实数,z+zˉ=2Rezz + \bar z = 2 \operatorname{Re} z。前者是分母实数化那一步的实质,后者常用来把「实部为某值」的条件写成不含实部记号的形式。

6 · 参考文献

  1. Complex number. Wikipedia. 四则运算的定义与运算律。https://en.wikipedia.org/wiki/Complex_number
  2. Complex conjugate. Wikipedia. 共轭的运算律与它在除法里的用处。https://en.wikipedia.org/wiki/Complex_conjugate
  3. Complex Multiplication. Wolfram MathWorld. 乘法的展开式与极坐标写法。https://mathworld.wolfram.com/ComplexMultiplication.html
  4. Imaginary unit. Wikipedia. i 的幂的周期。https://en.wikipedia.org/wiki/Imaginary_unit