跳转至

# 复数

如果您已经学习过复数相关知识，请跳过本页面．

学习复数知识需要一部分向量基础，如果并未学习过向量知识请移步 向量页面．

## 复数

### 引入

注

下面的引入方法来自人教版高中数学 A 版必修二．

从方程的角度看，负实数能不能开平方，就是方程 𝑥 2 +𝑎 =0(𝑎 >0)x 2+a=0(a>0) 有没有解，进而可以归结为方程 𝑥 2 +1 =0 x 2+1=0 有没有解．

回顾已有的数集扩充过程，可以看到，每次扩充都与实际需求密切相关．例如，为了解决正方形对角线的度量，以及 𝑥 2 −2 =0 x 2−2=0 这样的方程在有理数集中无解的问题，人们把有理数集扩充到了实数集．数集扩充后，在实数集中规定的加法运算、乘法运算，与原来在有理数集中规定的加法运算、乘法运算协调一致，并且加法和乘法都满足交换律和结合律，乘法对加法满足分配律．

依照这种思想，为了解决 𝑥 2 +1 =0 x 2+1=0 这样的方程在实数系中无解的问题，我们设想引入一个新数 i i，使得 𝑥 =i x=i 是方程 𝑥 2 +1 =0 x 2+1=0 的解，即使得 i 2 = −1 i 2=−1．

思考：把新引进的数 i i 添加到实数集中，我们希望数 i i 和实数之间仍然能像实数那样进行加法和乘法运算，并希望加法和乘法都满足交换律、结合律，以及乘法对加法满足分配律．那么，实数系经过扩充后，得到的新数系由哪些数组成呢？

依照以上设想，把实数 𝑏 b 与 i i 相乘，结果记作 𝑏 i b i；把实数 𝑎 a 与 𝑏 i b i 相加，结果记作 𝑎 +𝑏 i a+b i．注意到所有实数以及 i i 都可以写成 𝑎 +𝑏 i(𝑎,𝑏 ∈𝐑)a+b i(a,b∈R) 的形式，从而这些数都在扩充后的新数集中．

### 定义

我们定义形如 𝑎 +𝑏 i a+b i，其中 𝑎,𝑏 ∈𝐑 a,b∈R 的数叫做 复数，其中 i i 被称为 虚数单位，全体复数的集合叫做 复数集，记作 𝐂 C．

复数通常用 𝑧 z 表示，即 𝑧 =𝑎 +𝑏 i z=a+b i．这种形式被称为 复数的代数形式．其中 𝑎 a 称为复数 𝑧 z 的 实部，记作 R e⁡(𝑧)Re⁡(z)，𝑏 b 称为复数 𝑧 z 的 虚部，记作 I m⁡(𝑧)Im⁡(z)．如无特殊说明，都有 𝑎,𝑏 ∈𝐑 a,b∈R．

对于一个复数 𝑧 z，当且仅当 𝑏 =0 b=0 时，它是实数，当 𝑏 ≠0 b≠0 时，它是虚数，当 𝑎 =0 a=0 且 𝑏 ≠0 b≠0 时，它是纯虚数．

纯虚数，虚数，实数，复数的关系如下图所示．

## 性质与运算

### 几何意义

我们知道了 𝑎 +𝑏 i a+b i 这样类似的形式的数被称为复数，并且给出了定义和分类，我们还可以挖掘一下更深层的性质．

我们把所有实数都放在了数轴上，并且发现数轴上的点与实数一一对应．我们考虑对复数也这样处理．

首先我们定义 复数相等：两个复数 𝑧 1 =𝑎 +𝑏 i,𝑧 2 =𝑐 +𝑑 i z 1=a+b i,z 2=c+d i 是相等的，当且仅当 𝑎 =𝑐 a=c 且 𝑏 =𝑑 b=d．

这么定义是十分自然的，在此不做过多解释．

也就是说，我们可以用唯一的有序实数对 (𝑎,𝑏)(a,b) 表示一个复数 𝑧 =𝑎 +𝑏 i z=a+b i．这样，联想到平面直角坐标系，我们可以发现 复数集与平面直角坐标系中的点集一一对应．好了，我们找到了复数的一种几何意义．

那么这个平面直角坐标系就不再一般，因为平面直角坐标系中的点具有了特殊意义——表示一个复数，所以我们把这样的平面直角坐标系称为 复平面，𝑥 x 轴称为 实轴，𝑦 y 轴称为 虚轴．我们进一步地说：复数集与复平面内所有的点所构成的集合是一一对应的．

我们考虑到学过的平面向量的知识，发现向量的坐标表示也是一个有序实数对 (𝑎,𝑏)(a,b)，显然，复数 𝑧 =𝑎 +𝑏 i z=a+b i 对应复平面内的点 𝑍(𝑎,𝑏)Z(a,b)，那么它还对应平面向量 ⟶𝑂 𝑍 =(𝑎,𝑏)O Z→=(a,b)，于是我们又找到了复数的另一种几何意义：复数集与复平面内的向量所构成的集合是一一对应的（实数 0 0 与零向量对应）．

于是，我们由向量的知识迁移到复数上来，定义 复数的模 就是复数所对应的向量的模．复数 𝑧 =𝑎 +𝑏 i z=a+b i 的模 |𝑧| =√𝑎 2+𝑏 2|z|=a 2+b 2．

于是为了方便，我们常把复数 𝑧 =𝑎 +𝑏 i z=a+b i 称为点 𝑍 Z 或向量 ⟶𝑂 𝑍 O Z→，并规定相等的向量表示同一个复数．

并且由向量的知识我们发现，虚数不可以比较大小（但是实数是可以的）．

### 加法与减法

对复数 𝑧 1 =𝑎 +𝑏 i,𝑧 2 =𝑐 +𝑑 i z 1=a+b i,z 2=c+d i，定义加法规则如下：

𝑧 1+𝑧 2=(𝑎+𝑐)+(𝑏+𝑑)i z 1+z 2=(a+c)+(b+d)i

很明显，两个复数的和仍为复数．

考虑到向量的加法运算，我们发现复数的加法运算符合向量的加法运算法则，这同样证明了复数的几何意义的正确性．

同样可以验证，复数的加法满足 交换律 和 结合律．即：

𝑧 1+𝑧 2=𝑧 2+𝑧 1(𝑧 1+𝑧 2)+𝑧 3=𝑧 1+(𝑧 2+𝑧 3)z 1+z 2=z 2+z 1(z 1+z 2)+z 3=z 1+(z 2+z 3)

减法作为加法的逆运算，我们可以通过加法法则与复数相等的定义来推导出减法法则：

𝑧 1−𝑧 2=(𝑎−𝑐)+(𝑏−𝑑)i z 1−z 2=(a−c)+(b−d)i

这同样符合向量的减法运算．

### 乘法、除法与共轭

对复数 𝑧 1 =𝑎 +𝑏 i,𝑧 2 =𝑐 +𝑑 i z 1=a+b i,z 2=c+d i，定义乘法规则如下：

𝑧 1 𝑧 2=(𝑎+𝑏 i)(𝑐+𝑑 i)=𝑎 𝑐+𝑏 𝑐 i+𝑎 𝑑 i+𝑏 𝑑 i 2=(𝑎 𝑐−𝑏 𝑑)+(𝑏 𝑐+𝑎 𝑑)i z 1 z 2=(a+b i)(c+d i)=a c+b c i+a d i+b d i 2=(a c−b d)+(b c+a d)i

可以看出，两个复数相乘类似于两个多项式相乘，只需要把 i 2 i 2 换成 −1−1，并将实部与虚部分别合并即可．

复数的乘法与向量的向量积形式类似．

易得复数乘法满足 交换律，结合律 和 对加法的分配律，即：

- 𝑧 1 𝑧 2 =𝑧 2 𝑧 1 z 1 z 2=z 2 z 1
- (𝑧 1 𝑧 2)𝑧 3 =𝑧 1(𝑧 2 𝑧 3)(z 1 z 2)z 3=z 1(z 2 z 3)
- 𝑧 1(𝑧 2 +𝑧 3) =𝑧 1 𝑧 2 +𝑧 1 𝑧 3 z 1(z 2+z 3)=z 1 z 2+z 1 z 3

由于满足运算律，我们可以发现实数域中的 乘法公式在复数域中同样适用．

除法运算是乘法运算的逆运算，我们可以推导一下：

𝑎+𝑏 i 𝑐+𝑑 i=(𝑎+𝑏 i)(𝑐−𝑑 i)(𝑐+𝑑 i)(𝑐−𝑑 i)=𝑎 𝑐+𝑏 𝑑 𝑐 2+𝑑 2+𝑏 𝑐−𝑎 𝑑 𝑐 2+𝑑 2 i(𝑐+𝑑 i≠0)a+b i c+d i=(a+b i)(c−d i)(c+d i)(c−d i)=a c+b d c 2+d 2+b c−a d c 2+d 2 i(c+d i≠0)

由于向量没有除法，这里不讨论与向量的关系．

为了分母实数化，我们乘了一个 𝑐 −𝑑 i c−d i，这个式子很有意义．

对复数 𝑧 =𝑎 +𝑏 i z=a+b i，称 𝑎 −𝑏 i a−b i 为 𝑧 z 的 共轭复数，通常记为 ¯𝑧 z¯．我们可以发现，若两个复数互为共轭复数，那么它们 关于实轴对称．

对复数 𝑧,𝑤 z,w，复数共轭有如下性质

- 𝑧 ⋅¯𝑧 =|𝑧|2 z⋅z¯=|z|2
- ――――𝑧 =𝑧 z――=z
- R e⁡(𝑧) =𝑧+¯𝑧 2 Re⁡(z)=z+z¯2，I m⁡(𝑧) =𝑧−¯𝑧 2 Im⁡(z)=z−z¯2
- ――――𝑧±𝑤 =¯𝑧 ±¯𝑤 z±w―=z¯±w¯
- ―――𝑧 𝑤 =¯𝑧¯𝑤 z w―=z¯w¯
- ―――𝑧/𝑤 =¯𝑧/¯𝑤 z/w―=z¯/w¯

### 辐角和辐角主值

如果设定实数单位 1 1 作为水平正方向，虚数单位 i i 作为竖直正方向，得到的就是直角坐标视角下的复平面．

表示复数 𝑧 z 的位置，也可以借助于极坐标 (𝑟,𝜃)(r,θ) 确定．前文已经提到了 𝑟 r 为复数 𝑧 z 的模．

从实轴正向到 非零 复数 𝑧 =𝑥 +i 𝑦 z=x+i y 对应向量的夹角 𝜃 θ 满足关系：

t a n⁡𝜃=𝑦 𝑥 tan⁡θ=y x

称为复数 𝑧 z 的 辐角，记为：

𝜃=a r g⁡𝑧 θ=arg⁡z

任一个 非零 复数 𝑧 z 有无穷多个辐角，故 a r g⁡𝑧 arg⁡z 事实上是一个集合．借助开头大写的 A r g⁡𝑧 Arg⁡z 表示 其中一个特定值，满足条件：

−𝜋<A r g⁡𝑧≤𝜋−π<Arg⁡z≤π

称 A r g⁡𝑧 Arg⁡z 为 辐角主值 或 主辐角．辐角就是辐角主值基础上加若干整数个（可以为零或负整数）2 𝑘 𝜋 2 k π，即 a r g⁡𝑧 ={A r g⁡𝑧 +2 𝑘 𝜋 ∣𝑘 ∈𝐙}arg⁡z={Arg⁡z+2 k π∣k∈Z}．

需要注意的是两个辐角主值相加后不一定还是辐角主值，而两个辐角相加一定还是合法的辐角．

称模小于 1 1 的复数，在复平面上构成的图形为 单位圆．称模等于 1 1 的复数为 单位复数，全体单位复数在复平面上构成的图形为 单位圆周．在不引起混淆的情况下，有时单位圆周也简称单位圆．

在极坐标的视角下，复数的乘除法变得很简单．复数乘法，模相乘，辐角相加．复数除法，模相除，辐角相减．

### 欧拉公式

欧拉公式（Euler's formula）1

对任意实数 𝑥 x，有

e i 𝑥=c o s⁡𝑥+i s i n⁡𝑥 e i x=cos⁡x+i sin⁡x

在补充 复指数函数与复三角函数 的定义后，该公式可推广至全体复数．

### 指数函数与三角函数

对于复数 𝑧 =𝑥 +i 𝑦 z=x+i y，函数 𝑓(𝑧) =e 𝑥(c o s⁡𝑦 +i s i n⁡𝑦)f(z)=e x(cos⁡y+i sin⁡y) 满足 𝑓(𝑧 1 +𝑧 2) =𝑓(𝑧 1)𝑓(𝑧 2)f(z 1+z 2)=f(z 1)f(z 2)．由此给出 复指数函数 的定义：

e x p⁡𝑧=e 𝑥(c o s⁡𝑦+i s i n⁡𝑦)exp⁡z=e x(cos⁡y+i sin⁡y)

复指数函数在实数集上与实指数函数的定义完全一致．在复平面上拥有性质：

- 模恒正：|e x p⁡𝑧| =e x p⁡𝑥 >0|exp⁡z|=exp⁡x>0．
- 辐角：a r g⁡(e x p⁡𝑧) ={𝑦 +2 𝑘 𝜋 ∣𝑘 ∈𝐙}arg⁡(exp⁡z)={y+2 k π∣k∈Z}．
- 加法定理：e x p⁡(𝑧 1+𝑧 2) =e x p⁡(𝑧 1)e x p⁡(𝑧 2)exp⁡(z 1+z 2)=exp⁡(z 1)exp⁡(z 2)．
- 周期性：e x p⁡𝑧 exp⁡z 是以 2 𝜋 i 2 π i 为基本周期的周期函数．如果一个函数 𝑓(𝑧)f(z) 的周期是某一周期的整倍数，称该周期为 基本周期．

复三角函数（也简称 三角函数）的定义如下：

c o s⁡𝑧=e x p⁡(i 𝑧)+e x p⁡(−i 𝑧)2 cos⁡z=exp⁡(i z)+exp⁡(−i z)2 s i n⁡𝑧=e x p⁡(i 𝑧)−e x p⁡(−i 𝑧)2 i sin⁡z=exp⁡(i z)−exp⁡(−i z)2 i

若取 𝑧 ∈𝐑 z∈R，则由 欧拉公式 有：

c o s⁡𝑧=R e⁡(e i 𝑧)cos⁡z=Re⁡(e i z)s i n⁡𝑧=I m⁡(e i 𝑧)sin⁡z=Im⁡(e i z)

复三角函数在实数集上与实三角函数的定义完全一致．在复平面上拥有性质：

- 奇偶性：正弦函数是奇函数，余弦函数是偶函数．
- 三角恒等式：通常的三角恒等式都成立，例如平方和为 1 1，或者角的和差公式等．
- 周期性：正弦与余弦函数以 2 𝜋 2 π 为基本周期．
- 零点：实正弦与实余弦函数的全体零点，构成了复正弦与复余弦函数的全体零点．这个推广没有引进新的零点．
- 模的无界性：复正弦与复余弦函数，模长可以大于任意给定的正数，不再像实正弦与实余弦函数一样被限制在 1 1 的范围内．

## 复数的三种形式

借助直角坐标系的视角以及极坐标系的视角，可以写出复数的三种形式．

复数的 代数形式 用于表示任意复数．

𝑧=𝑥+𝑦 i z=x+y i

代数形式用于计算复数的加减乘除四个运算比较方便．

复数的 三角形式 和 指数形式，用于表示非零复数．

𝑧=𝑟(c o s⁡𝜃+i s i n⁡𝜃)=𝑟 e x p⁡(i 𝜃)z=r(cos⁡θ+i sin⁡θ)=r exp⁡(i θ)

这两种形式用于计算复数的乘除两个运算以及后面的运算较为方便．如果只用高中见过的函数，可以使用三角形式．如果引入了复指数函数，写成等价的指数形式会更加方便．

## 单位根

考察方程 𝑥 𝑛 =1 x n=1 在复数意义下的解．显然，这样的解有 𝑛 n 个，称这 𝑛 n 个解都是 𝑛 n 次单位（复）根（𝑛 n-th root of unity）．根据复平面的知识，𝑛 n 次单位根把单位圆 𝑛 n 等分．

设 𝜔 𝑛 =e x p⁡2 𝜋 i 𝑛 ω n=exp⁡2 π i n（即幅角为 2 𝜋/𝑛 2 π/n 的单位复数），则 𝑥 𝑛 =1 x n=1 的解集表示为 {𝜔 𝑘 𝑛 ∣𝑘 =0,1⋯,𝑛 −1}{ω n k∣k=0,1⋯,n−1}，其中，

𝑤 𝑘 𝑛=e x p⁡2 𝜋 𝑘 i 𝑛=c o s⁡2 𝜋 𝑘 𝑛+i s i n⁡2 𝜋 𝑘 𝑛.w n k=exp⁡2 π k i n=cos⁡2 π k n+i sin⁡2 π k n.

如果不加说明，一般叙述中的 𝑛 n 次单位根，是指从 1 1 开始逆时针方向的第一个解，即上述 𝜔 𝑛 ω n，其它解均可以用 𝜔 𝑛 ω n 的幂表示．

为什么通常提到 𝑛 n 次单位根，总是特指第一个？

主要是为了应用时方便．所有 𝑛 n 次单位根都可以表示为第一个 𝑛 n 次单位根 𝜔 𝑛 ω n 的幂次；而且，对于任意 𝑘 <𝑛 k<n，复数 𝜔 𝑛 ω n 都不是 𝑘 k 次单位根．

### 本原单位根

事实上，𝑛 n 次单位根中满足类似性质的不止 𝜔 𝑛 ω n 一个．称集合

{𝜔 𝑘 𝑛∣0≤𝑘<𝑛, g c d(𝑛,𝑘)=1}{ω n k∣0≤k<n, gcd(n,k)=1}

中的元素为 𝑛 n 次本原单位根（𝑛 n-th primitive root of unity）．根据上述表达式可知，全体 𝑛 n 次本原单位根共有 𝜑(𝑛)φ(n) 个，其中，𝜑(𝑛)φ(n) 为 欧拉函数．

任意一个本原单位根 𝜔 ω，都与上述 𝜔 𝑛 ω n 具有相同的性质：对于任意的 0 <𝑘 <𝑛 0<k<n，𝜔 ω 的 𝑘 k 次幂不为 1 1，也就是说，𝜔 ω 不是 𝑘 k 次单位根．因此，借助任意一个本原单位根，都可以生成全体单位根．

为了理解 𝑛 n 次本原单位根的结构，需要考虑单位根的如下性质：

性质

对于整数 𝑛 n 和 𝑘 k，设 𝑑 =g c d(𝑛,𝑘)d=gcd(n,k)，有 𝜔 𝑘 𝑛 =𝜔 𝑘/𝑑 𝑛/𝑑 ω n k=ω n/d k/d．

证明

直接计算可知

𝑤 𝑘 𝑛=e x p⁡2 𝜋 𝑘 i 𝑛=e x p⁡2 𝜋(𝑘/𝑑)i 𝑛/𝑑=𝜔 𝑘/𝑑 𝑛/𝑑.w n k=exp⁡2 π k i n=exp⁡2 π(k/d)i n/d=ω n/d k/d.

这说明，只要 g c d(𝑛,𝑘) ≠1 gcd(n,k)≠1，那么，𝜔 𝑘 𝑛 ω n k 就一定是 𝑛 g c d(𝑛,𝑘)n gcd(n,k) 次（本原）单位根．因此，满足前述性质的单位根 𝜔 𝑘 𝑛 ω n k 一定是满足 g c d(𝑛,𝑘) =1 gcd(n,k)=1．这正是本原单位根具有上述定义的原因．

另外，作为这些分析的简单推论，有：

定理

当 𝑘 k 遍历 𝑛 n 的因数，所有 𝑘 k 次本原单位根恰构成 𝑛 n 次单位根的一个划分．而且，对于 ℓ ⟂𝑛 ℓ⟂n，映射 𝑥 ↦𝑥 ℓ x↦x ℓ 给出 𝑛 n 次单位根之间的双射，且保持上述划分不变：它将 𝑘 ∣𝑛 k∣n 次本原单位根仍然映射到 𝑘 k 次本原单位根．

尽管本原单位根有很多选择，但是由于第一个根 𝜔 𝑛 ω n 形式最为简单，算法竞赛中还是 𝜔 𝑛 ω n 最为常用．对于部分场景，为提高计算效率，还可以考虑用某一模数下的 本原单位根 代替复数域中的 𝜔 𝑛 ω n．

## 编程语言中的复数

### C 中的复数

在 C99 标准中，有 `<complex.h>` 头文件．

在 `<complex.h>` 头文件中，提供了 `double complex`、`float complex` 和 `long double complex` 三种类型．

算术运算符'+'、'-'、'*'和'/'，可以用于浮点数和复数的任意混合．当表达式两端有一个为复数时，计算结果为复数．

头文件 `<complex.h>` 提供了虚数单位 `I`，引入此头文件时，大写字母 `I` 不可以作为变量名使用．

对于单个复数，`<complex.h>` 提供了若干操作：`creal` 函数用于提取实部，`cimag` 函数用于提取虚部，`cabs` 函数用于计算模，`carg` 函数用于计算辐角主值．

所有的函数根据类型不同，都有三个．例如 `creal` 函数有 `creal`、`crealf`、`creall` 三个，用于处理对应的 `double`、`float` 和 `long double` 三种类型．末尾什么都不带的默认处理 `double` 类型．以下所有函数均遵从此规律，不再特别说明．

这些函数返回值都是一般的浮点数．可以将普通浮点数直接赋值给复数，但是不可以将复数直接赋值给浮点数，而是需要使用上述提取操作．

函数 `conj` 用于计算共轭复数，返回值是复数．

函数 `cexp` 计算复指数，`clog` 计算对数主值，`csin` 计算正弦，`ccos` 计算余弦，`ctan` 计算正切．

函数 `cpow` 计算幂函数，`csqrt` 计算平方根，`casin` 计算反正弦，`cacos` 计算反余弦，`catan` 计算反正切．这部分函数计算的全部都是多值函数的主值．

### C++ 中的复数

在 C 里面的 `<ctype.h>`，到 C++ 会变成 `<cctype>`，几乎所有的头文件遵从这个命名规律．

但是，`<complex.h>` 不遵守，C++ 没有 `<ccomplex>` 头文件．C++ 的复数直接是 `<complex>`，并且装的东西和 C 完全不一样．

很有趣．这是因为，在 C++ 的第一个版本 C++98，即已经有了 `<complex>`，而 C 语言在 C99 才添加．

在 C++ 中，复数类型定义使用 `complex<float>`、`complex<double>` 和 `complex<long double>`．由于面向对象的多态性，下面函数的名字都是唯一的，无需 f 或 l 的后缀．

一个复数对象拥有成员函数 `real` 和 `imag`，可以访问实部和虚部．

一个复数对象拥有非成员函数 `real`、`imag`、`abs`、`arg`，返回实部、虚部、模和辐角．

一个复数对象还拥有非成员函数：`norm` 为模的平方，`conj` 为共轭复数．

一个复数对象还拥有非成员函数 `exp`、`log`（底为 e e 的对数主值）、`log10`（底为 10 的对数主值，C 中没有）、`pow`、`sqrt`、`sin`、`cos`、`tan`，含义与 C 中的含义相同．

在 C++14 及以后的版本中，定义了 字面量运算符 `std::literals::complex_literals::""if, ""i, ""il`．例如输入 `100if`、`100i` 和 `100il`，三者将分别返回 `std::complex<float>{0.0f, 100.0f}`、`std::complex<double>{0.0, 100.0}` 以及 `std::complex<long double>{0.0l, 100.0l}`．这使得我们可以方便地书写形如 `auto z = 4.0 + 3i` 的复数声明．

## 参考资料与链接

- Complex number - Wikipedia
- Euler's formula - Wikipedia
- Complex number arithmetic - cppreference.com
- std::complex - cppreference.com

1. 有关欧拉公式的更多介绍，可以参考两个视频：欧拉公式与初等群论、微分方程概论 - 第五章：在 3.14 分钟内理解 e i 𝜋 e i π． ↩

> 本页面最近更新：2026/1/7 08:56:54，更新历史
> 发现错误？想一起完善？ 在 GitHub 上编辑此页！
> 本页面贡献者：Ir1d, Tiphereth-A, HeRaNO, Enter-tainer, Great-designer, MegaOwIer, Xeonacid, c-forrest, sshwy, CCXXXI, CharlesWuQiushi, chinggg, iamtwz, mcendu, megakite, ouuan, r-value, StudyingFather, TSStudio
> 本页面的全部内容在 CC BY-SA 4.0 和 SATA 协议之条款下提供，附加条款亦可能应用