Hacker News 中文摘要

RSS订阅

复数可视化入门 -- A Visual Intro to Complex Numbers

我们先尝试求解下面给出的方程组。起初它看起来只是普通的二元方程组,但只要花一点时间把常规整数或实数代进去,就能发现有些不对劲。先试着把 x 和 y 都代入 3,再分别代入 4 和 2;多试几次就会意识到,无论怎么尝试,似乎都无法用我们常规的实数系统解出这些方程。

正文

我们先从下面这组方程开始尝试求解:

需要求解的方程组

乍一看,这只是个普通的二元方程组;但只要试着代入几个实数,就会发现有点不对劲。先让 x 和 y 都等于 3:

代入 x=3、y=3 的结果

再试试 x=4、y=2,看是否更接近:

代入 x=4、y=2 的结果

多试几次就会意识到问题很严重:在常规数字系统里,这组方程似乎无解——无论代入什么,两个答案总是相差很远。改用负数也没用,因为乘法那一步需要两个负数相乘,而两个负数相加不可能大于 0。

那怎么办?我们改用代数方法来解,而不是继续试探。先把第一个方程变形,用 x 表示 y:

由第一个方程解出 y

把 y 代入第二个方程:

代入第二个方程后得到的等式

展开左边:

展开左边后的等式

把所有项移到左边,化成标准二次方程形式:

移项后得到的标准二次方程

最后把每项乘以 -1,让平方项为正:

乘以 -1 后得到的二次方程

看一眼这个方程,会发现一个谜团:把它画出来时,图像似乎根本不与 x 轴相交(也就是取不到 0):

二次函数图像不与 x 轴相交

看来方程没有解。但我们再用代数方法快速验证一下,用求根公式来解这个方程。提醒一下,形如下面的二次方程:

标准二次方程形式

它的解由下面公式给出:

二次方程求根公式

根据我们的二次方程:

当前要解的二次方程

可知 a=1,b=-6,c=36,代入得到:

代入求根公式后的表达式

化简判别式

出现对负数开平方的结果

于是又遇到了那个大谜团:原二次方程的解似乎要对负数(-108)开平方,但在由实数组成的常规数系里,这是不可能的。我们撞墙了。

这个涉及“对负数开平方”的数学之墙,正是意大利数学家 Gerolamo Cardano 在 1545 年所处的位置。在为三次方程寻找通用解法的过程中,Cardano 注意到一件怪事:即使某个方程最终给出完全真实、可感知的答案,代数路径却迫使他临时去计算负数的平方根。例如,在他的一些中间表达式里,会出现需要操作像 √-15 这样的项,并与其他项一起运算。

Cardano 发现,如果固执地对这些被禁止的量沿用标准代数规则——做乘法、化简——虚部最终会消失,留下一个完全正确的现实世界解。1545 年,他出版了 Ars Magna(《大衍术》),这是文艺复兴时期最重要的代数著作之一。书中有许多问题,其中 Cardano 要求读者把 10 分成两部分,使这两部分的乘积为 40。用现代记号表示,他要找两个数 u 和 v,使得:

把 10 分成两部分且乘积为 40

这和前面关于 x、y 的原问题非常像。用类似的方法,Cardano 把上面的条件化成如下方程:

化简后得到的二次方程

应用求根公式,会得到一个在当时几乎所有数学家看来都不可能的结果:

应用求根公式后得到含负数开平方的解

进一步化简

结果中出现了 √-15

此时,普通算术的直觉都在喊停——不能对 -15 开平方。没有哪个实数的平方是负数,所以这两部分只能是……(原文此处公式缺失)。但接着,近乎神奇的事发生了:如果暂时无视这种不可能性,照常使用代数规则……最终结果是……(原文此处公式缺失)。然而,尽管数学在他面前干净地成立了,Cardano 自己却不敢相信。他把整个操作仅视为一种“方便的技巧”(convenient artifice)——一场没有实质或实用意义的数学魔术。法国哲学家 René Descartes(1596–1650)也强烈认同这种怀疑:面对这些奇怪的数字,Descartes 把它们斥为荒谬的捏造,并为负数的根创造了“imaginary”(虚数)一词——一个贬义标签,意在嘲讽它们是纯粹想象的产物;不幸的是,这个词沿用了好几个世纪。

整个 18 世纪,数学家们却发现自己无法忽视这些数字。它们不断作为微积分、代数和物理中不可或缺的捷径冒出来。最后是 Leonhard Euler 给了它们正当的归属和标准记号,引入符号 i 来表示 -1 的平方根:

即使有了 Euler 的记号,一个挥之不去的问题仍然存在:这些数到底代表什么?如果实数生活在一条从负无穷延伸到正无穷的一维数轴上,虚数又住在哪里?

答案在 19 世纪之交前后出现:Jean-Robert Argand 和 Caspar Wessel 各自独立找到了缺失的那块拼图——一个几何模型。他们意识到,乘以 -1 相当于把数在数轴上旋转 180 度:

乘以 -1 相当于在数轴上旋转 180 度

因此,乘以 -1 的平方根(即 i)不应该只是把人在一维直线上往左或往右推——它代表的是旋转 90 度,进入一个全新的、垂直的维度。这自然是 i² = -1(180 度旋转)的产物:既然 i 代表这一乘法步的一半,它自然可以映射到 90 度(180 度旋转的一半)。把一维数轴变成二维坐标平面(横轴放实数,纵轴放虚数)后,每一个“复数”突然都对应了平面上的一个物理点:

一维数轴扩展为二维复平面

在上图中,水平轴代表实数轴(-2、-1、0、1/3、3 等),而垂直轴代表一个全新的垂直维度,表示我们这个数的虚部(-2i、-1i、0、1/3 i、3i 等)。蓝色曲线显示了乘以 i 会发生什么:把 +1 乘以 i,会把它向上摆动四分之一圈,正好落在 +i 上,也就是旋转 90 度。

简单说:新维度让我们能把一维实数系统变成二维系统。为此,我们让普通的 x 维度建模新数系的实部,而垂直的 y 维度代表新的“虚”维度。

用 x 轴表示实部,y 轴表示虚部

我们可以直观地看下面这张图,其中 a 是实部,b 是虚部:

复数 a+bi 对应平面上的点

这个模型在复数与平面上的点之间提供了自然对应。水平轴叫实轴,垂直轴叫虚轴,任意复数 z = a + ib 都表现为平面上坐标为 (a, b) 的点。

我们还注意到,在新的维度系统里,乘以 i simplement 就代表旋转 90 度:

乘以 i 相当于旋转 90 度

19 世纪初,许多严格的数学家拒绝接受 Argand / Wessel 平面,因为它感觉像是一种廉价的视觉花招。他们争辩说,就算你能把 1 的平方根画成一条垂直线,也不能证明它在逻辑上作为一个数而存在。

1833 年,Hamilton 发表了一篇论文,彻底去除了所有几何和“虚”的神秘感。他严格地把复数定义为实数构成的有序对,简单地写成 (a, b)。然后他给这些有序对定义了加法和乘法的精确规则:

加法部分很容易可视化,因为它对应普通的向量加法:

复数加法对应向量相加

乘法也可以可视化(尽管比加法更不直观),如下面几张图所示——在下面这张图里,我们把一个虚数乘以 i(以产生 90 度旋转):

虚数乘以 i 产生 90 度旋转

下面是一个更复杂的例子:在新虚数系统中把 (2, 1) 和 (1, 2) 相乘:

在复平面内相乘 (2,1) 与 (1,2)

在上图中,可以看到这样一个例子:两个因子都有实部和虚部。它们的方向相加,得到:

方向相加的结果

而它们的长度相乘:

因此,乘积落在 (0, 5)。

这一几何突破最初由 Carl Friedrich Gauss 推广并确立下来。Gauss 利用复数系统构造了代数基本定理的证明,证明每个非常数多项式方程在复数系统中至少有一个根。举个例子——尽管下面方程的图像从不与 0 相交——我们仍然能在复平面中找到四个根,它们对称地出现在单位圆上:

方程 z⁴+1=0 的四个根对称分布在单位圆上

这一决定性证明终于让更广的数学界相信了复数的深远重要性和绝对有效性——把它们从 Cardano 那种折磨人的技巧,变成了数学和科学中最强大的工具之一。

最后,借鉴 Cardano 和 Euler,我们自己大胆地迈出这一步,把这一概念应用到前面那个未解之谜上。我们之前得到了那个令人头疼的分式(即含 √-108 的求根结果)。不停下来,我们可以拆开 -108。我们知道 -108 就等于 36 乘以 -3:

我们可以计算 36 的平方根,并把它作为 6 提到外面:

这就是 Euler 的 i 来拯救我们的地方。我们可以把 -1 的平方根从 -3 中分离出来:

代入虚数单位 i 并除以 2,就得到最终的两部分解:

由于 x + y = 6,对应的 y 值为:

我们把这两组有序解写成:

x = 3 ± 3i√3,y = 3 ∓ 3i√3;两组解为 (3 + 3i√3, 3 - 3i√3) 和 (3 - 3i√3, 3 + 3i√3)。

我们来验证乘积:

中间两项相等且相反,因此虚部消失了。最后的 i² 变成 -1,把最后的减法变成了加法。我们可以把它可视化为:把两个角度相加(由于它们方向相反,结果是一个 0 度的向量),并把长度为 6 的结果向量沿 x 轴缩放 6 倍,得到 36:

两个解相乘得到 36 的几何示意

也很容易验证 x + y = 6,因为 i 分量互相抵消,实部加起来正好等于 6:

验证 x+y=6

说到底,复数并不复杂:我们所做的只是把一维的数系转换成二维的数。一个实数只需要一个坐标,所以我们把它画在普通直线上;一个复数需要两个坐标——实部和虚部——所以我们把它画在如下平面里:

复数在二维平面上的表示

上面的 x 轴代表实部,y 轴代表虚部。加法现在看起来就像平面里的普通移动:实部水平相加,虚部垂直相加。

乘法包含更深的思想:乘以 i 会把点 a + bi 变换并旋转——把我们的二维点(或向量)逆时针旋转 90 度:

乘以 i 将点逆时针旋转 90 度

再乘以一次 i,它又转了 90 度,总共旋转 180 度。这就是为什么 i 的平方等于 -1:两个四分之一圈正好把我们在实轴上指向了相反方向。

再乘以 i 后总共旋转 180 度,因此 i²=-1

因此,乘法也很好地映射进这个新世界(尤其是乘以 i)。

在进一步探索这一联系之前,值得先花点时间理解三角函数到底表示什么。

一开始,正弦和余弦通常被介绍为涉及直角三角形边的规则。给定一个角 θ,我们定义:

正弦与余弦的直角三角形定义

这些定义虽然有用,却容易让正弦和余弦显得不过是解三角形的工具。当把三角形放进圆里时,它们的深层含义才更清楚。

想象画一个半径为 1 的圆,然后把一条线从正水平轴旋转一个角度 θ。那条线的端点有两个坐标:水平位置和垂直位置。水平坐标由 cos θ 给出,垂直坐标由 sin θ 给出:

于是这一对:

标识了单位圆上的一个点:

单位圆上的点 (cosθ, sinθ)

随着 θ 变化,这个点绕圆移动,而正弦和余弦的值记录着它的垂直和水平位置。

简单说,正弦和余弦把一个角转换成两个运动方向。余弦告诉我们水平走多远,正弦告诉我们垂直走多远。如果旋转线的长度是 r 而不是 1,这两个分量就变成:

这看起来已经和复数系统非常相似。复数也包含两个分量:水平测量的实部,垂直测量的虚部。因此三角学给了我们另一种描述复数的方式——不仅可以说出它的水平和垂直坐标,还可以说出它的长度和角度。

当我们开始做复数乘法时,这一联系变得格外强大。18 世纪初,法国数学家 Abraham De Moivre 注意到复数乘法与三角函数中正弦、余弦的加法公式之间存在惊人相似。给定正弦和余弦的加法公式,会发现这两个看似独立的公式完美地融合在一个复数里。要明白原因,我们先换一种方式看复平面。

到目前为止,我们用水平位置 a 和垂直位置 b 来描述复数 z = a + bi。但还有另一种同样有用的定位方式:不问向右和向上走多远,而问两个新问题——这个点离原点多远?必须转过多大角度才能面对它?

我们把到原点的距离叫 r,角度叫 θ(theta)。由勾股定理:

以及普通的三角函数:

把这两个等式都乘以 r,得到:

由勾股定理和三角函数得到 a=r cosθ, b=r sinθ

现在把这些表达式代入 z = a + bi:

复数表示为 r(cosθ+i sinθ)

这里没有添加任何神秘的东西。我们只是换了一种描述这个点的语言。形式 a + bi 告诉我们它的水平和垂直分量,而形式 r(cos θ + i sin θ) 告诉我们它的长度和方向。前者像给街道地址;后者像给距离和罗盘方位。如果 r = 1,我们的点就位于单位圆上,表达式变得格外简单:

余弦提供水平坐标,正弦提供垂直坐标。随着 θ 变化,复数绕单位圆旅行。在这种形式里,角不再只是附加在复数上——它已经成为数本身的一部分。

现在我们把两个单位复数相乘:

用普通代数方式把它们相乘得到:

由于 i² = −1,我们可以收集实部和虚部:

一开始,这个结果看起来有点笨重。但再看看我们开头提到的两个三角加法公式。实部正好是 cos(α + β),而虚部正好是 sin(α + β)。因此:

两个单位复数相乘得到角度相加

这就是 De Moivre 揭示的惊人联系。复数乘法自动执行了三角学的角度相加规则。普通代数制造出的那一大堆项并不是随机的——它正是藏在明处的正弦和余弦加法公式。

简单说,复数乘法同时执行两个几何动作:

  1. 它把长度相乘:r₁ × r₂。

  2. 它把角度相加:α + β。

我们用一个精确的代数例子来检验这幅图。考虑:

三角规则预测乘积的长度为 2 × 2 = 4,角度为 30° + 60° = 90°:

长度为 2、角度为 30° 与 60° 的复数相乘,结果角度 90°

普通代数确认了完全相同的事情:

实部项抵消了,留下一个在虚轴上笔直向上的数。代数和几何不是两种不同的解释——它们是同一次乘法的两种视角。

一旦这个模式可见,重复乘法就变得几乎不费力气。把一个复数自乘两次,它的角度翻倍;自乘三次,角度变成三倍。一般来说,对于任意整数次幂 n:

棣莫弗公式:(r(cosθ+i sinθ))^n = r^n(cos nθ + i sin nθ)

这就是现在所称的 De Moivre 公式。如果原复数的长度为 r,这个长度也自乘 n 次:

例如,我们来计算 (1 + i)⁴。在直角坐标形式下,1 + i 的长度为 √2,角度为 45°。因此:

应用 De Moivre 公式得到:

计算 (1+i)^4 的结果

我们不必展开四个因子并努力追踪每一个 i,只需把长度提升到四次幂,并把角度乘以四。这个数从 45° 旋转到 180°,同时长度从 √2 增长到 4。

另一个很好的简单例子是下面这个取复数立方的例子:

复数取立方的几何示例

所以 De Moivre 定理不只是一个公式;它是对旋转的紧凑描述。把一个复数提升到 n 次幂,会把它旋转原角度的 n 倍。

同样的想法也可以倒着跑。幂把角度相乘,所以根把角度相除。然而,复角包含最后一个转折:转过 360° 会让我们回到同一个方向。因此,0°、360°、720° 以及每一个完整的圈都描述正实轴。

假设我们想要求解 z³ = 8。数字 8 的长度为 8,角度为 0°,但也可以用角度 360° 和 720° 来描述。取立方根时,长度和每一个角度都要除以三:

8 的立方根:长度和角度除以 3

这给出三个不同的解:

三个立方根在圆上等距分布

这三个答案在圆上等距分布。它们的角度相差 120°,因为 360° ÷ 3 = 120°。更一般地,非零复数的 n 个不同 n 次根在圆上均匀分布,就像一个完美正多边形的顶点。这也正是前面方程 z⁴ + 1 = 0 中复数根呈现美丽对称性的原因之一。

我们现在能看到,为什么正弦和余弦如此自然地属于复数系统。它们不是贴在复数算术上的装饰性附加物,而是旋转本身的坐标。余弦记录水平分量,正弦记录垂直分量,而复数乘法以恰好能相加角度的方式把它们结合起来。

说到底,复数并不是因为数学家想把算术变得更复杂才被发明出来的——它们的出现,是因为普通代数不断产生出实数系统无法满足的模式。起初看似不可能的平方根,结果证明是数轴只是一个更大世界切片的证据。一旦我们允许那个世界有两个方向而不是一个,谜团就开始消失:复数不是一个假装存在的虚答案,它是更丰富数学空间里的普通点。

简单说,一维实数的世界变成了一个“复”世界,涉及成对出现的实数,并赋予它们自己的算术。直角坐标形式 a + bi 告诉我们复数在哪里,而三角形式 r(cos θ + i sin θ) 告诉我们它延伸多远、指向哪里。一旦使用这第二种语言,乘法就变成了缩放加旋转,幂变成了重复旋转,而根变成了绕圆等距分布的方向。看似复杂的二元算术, quietly 变成了长度与角度的几何。

复数分析以及复数的使用可能看起来是个抽象概念,但现实恰恰相反。因为它们是旋转、缩放和振荡的自然语言,复数 uniquely 能够描述渗透我们物理世界的周期与波。它们远不是数学客厅戏法,而是工程师、物理学家和计算机科学家的必备工具。

信号处理和通信建立在同一想法上。任何合理的信号——声音、图像、无线电波——都可以分解成复指数之和。

信号可分解为复指数之和

傅里叶变换做这件事,而快速傅里叶变换让它快到足以用于日常设备。这就是 MP3 和 JPEG 压缩的工作原理,是 WiFi 和 5G 编解码数据的方式,是降噪耳机分离 unwanted 声音的方式,也是雷达、GPS 和医学成像重建信息的方式。在每一种情形里,复数都把困难的时域问题转成更简单的频域运算。

傅里叶变换把时域问题转为频域运算

控制系统用复数分析来保持机器稳定。无人机、自动驾驶仪、机器人、巡航控制和恒温器都用拉普拉斯变换和传递函数建模。这些函数的极点和零点生活在复平面里。它们的位置告诉工程师一个系统会稳定下来、振荡,还是变得不稳定。左半平面的极点通常意味着稳定;虚轴上的极点意味着持续振荡;右半平面的极点意味着不稳定。这幅抽象图像直接决定了一台真实机器能否安全运行。

物理和工程领域对复数分析的依赖更深。在电磁学、流体流动和热传导中,复势和共形映射解决二维场问题。它们被用于空气动力学设计机翼,用于静电学塑造电场,用于土木和机械工程建模应力与流动。量子力学走得更远:薛定谔方程明确包含 i,而波函数是复值的。没有复数,关于原子、半导体、激光和磁共振成像的现代描述都不可能实现。

所以,复数并不是偏离现实的奇怪弯路。它们是描述旋转和振荡的紧凑语言,而复数分析就是这种语言的微积分。虚数单位 i 并不是“不真实”意义上的虚;它是一个 90 度的转弯。从我们墙里的交流电,到手机里的信号,从无人机的稳定性,到 MRI 内部的图像,复数的数学 quietly 运行着日常世界的大部分。起初只是一个不可能的平方根,最后变成了科学与工程中最有用、最统一的思想之一。

评论

讨论气氛以分享复数学习资源为主,同时夹杂对文章质量的吐槽。分歧主轴是「直观式入门是否足够」:少数人质疑文章解释混乱、疑似大模型写成或遗漏关键表示,而较多人则肯定可视化与交互材料确实降低了初学者的直觉门槛。

肯定可视化、交互与实用案例能降低复数直觉门槛

  • 直观、可拖拽或视频化的解释让加法对应平移、乘法对应缩放加旋转,因而比纯符号更易入门;也有人用复数解火星车面试题、用 Python 做二维图形,说明它在实用中并不「虚」(较多人) > 把复数放在复平面上拖拽来做加法、乘法和指数运算,能直观感到加法就是平移、乘法就是缩放加旋转(@laszlokorte)

认为文章疑似大模型写成、质量存疑且更好的入门材料很多

  • 现有大量优秀的可视化复数入门文章,这篇却看起来基本由大模型写成,被选中本身令人不解(少数人) > 在大约十亿篇优秀的可视化复数入门文章里,偏偏挑了一篇看起来基本由大模型写成的文章?(@socializer)

认为「无解所以发明数」与先画虚平面的讲法不够好,应先形式化定义再推导

  • 把复数简化成「有些方程无解所以发明新数」并不充分,若接受这点只需 x²=-1;把虚平面说成「有人发现可以画出来而且更好用」同样糟糕。应先定义 1 与 i、规定 i×i=-1 并推导规则,直到得出 e^(iθ)=cosθ+i sinθ 后再讲用途(少数人) > 应先定义 1 与 i、规定 i×i=-1 并推导规则,直到得出 e^(iθ)=cosθ+i sinθ 后再讲用途,直接规定负一的平方根可用或声称画出来更好用都会让初学者困惑(@d--b)

认为「complex/imaginary」等术语误导,复数本质是二维或多分量的数

  • 「complex(复杂)」和「imaginary(虚)」这两个名字让初学者误以为它们不真实、很困难;它们实际上只是有两个分量的二维数,用来表示单个标量不够用的数据,对立名称「real(实)」同样会误导(少数人) > 如果不叫「complex(复杂)」或「imaginary(虚)」,而是承认它们就是有两个分量的二维数,初学者会容易接受得多(@reenorap)

追问复数加法、乘法与平方根为何被特殊对待

  • 若把 a+bi 看作阿尔冈图上的坐标,为什么可以把坐标相加?加法与乘法之间是否有连续过渡的算子?平方与平方根只是指数取 2 或 1/2,在实轴上并无特殊地位,复数为什么偏要围绕平方根来定义?(少数人) > 把复数写成 a+bi 时,加号到底意味着什么;为什么坐标可以相加,且平方根这种指数运算要被特殊对待?(@zkmon)

认为数学基础本身混乱,复数只是实数缺乏方向性后的补丁

  • 复数并非自然必要,而是因为实数等数系缺乏方向性才被迫引入;数学界长期用有缺陷的数学糊弄大众,专家正被 AI 取代(少数人) > 复数之所以必要,只是因为实数系本身缺乏方向性,整个数学基础都乱了(@freebsd_lovefes)

有价值的补充

  • 极坐标与欧拉公式是被文章遗漏的深刻表示:复数也可写成 r e^(iθ),乘法即模长相乘、角度相加;e^(iθ) 可看作把角度映射到单位圆上的函数,sin 与 cos 只是它的一维投影;在信号处理里实信号其实是复信号与其共轭之和,因此复信号反而更简单(@nneonneo)。
  • Python 原生支持复数,直接写 2+3j 就能做加减乘和乘方,有人曾把它当作二维图形的便捷“黑科技”(@rdtsc)。
  • Cardano 的 casus irreducibilis(三次方程不可约情况)比 x²=-1 更能说明复数为何在历史上被逼出来,只是展开它需要更多篇幅(@bananaflag)。