跳到主要内容
Varlig 指南
Varlig 首页

复数

复数由实部和虚部组成,虚部用 i(−1 的平方根)表示。本页介绍如何书写复数、用复数进行运算、把复数分解为模和辐角、求负数的平方根,以及接受复数值的数学函数。

一元二次方程没有实数根、处理交流电路或信号,或者核对复分析课程作业时,都可以参考本页。

书写复数

calc
2 + 3i 结果为 2 + 3i
complex(3, -4) 结果为 3 - 4i
i^2 结果为 -1

i 紧跟在数字后面表示虚部,如 3i1.5i,也可以单独使用 icomplex(real, imaginary) 用两个部分构建同样的值,当两个部分是名称时很方便:complex(电阻, 电抗)。两个部分都必须是不带单位的普通数字。

只有当笔记中没有其他东西叫 i 时,i 才表示虚数单位。一旦你定义了名为 i 的名称或自定义单位,它就会取而代之:

calc
i = 5
2 + 3i 结果为 17
complex(2, 3) 结果为 2 + 3i

这里 3i 变成了 3 × 5,这一行得到 17。名称会在一条笔记的各个计算块之间延续,所以笔记前面任何位置的 i = … 都有同样的效果。在使用复数的笔记中,请避免用 i 作为名称。complex(2, 3) 不使用这个名称,因此仍然有效。

运算

calc
(2 + 3i) + (1 - 5i) 结果为 3 - 2i
(1 + 2i) * (3 - i) 结果为 5 + 5i
(2 + 3i) * (2 - 3i) 结果为 13
10 / (3 + 4i) 结果为 1.2 - 1.6i
(1 + i)^8 结果为 16

加法、减法、乘法、除法和整数次幂都是精确计算。当结果的虚部为零时(如 (2 + 3i) * (2 - 3i)),结果显示为普通数字。做乘除法时,请给每个复数加上括号,这样 (2 + 3i) * (2 - 3i) 就不会被读作 2 + (3i * 2) - 3i

复数的各个部分

calc
z = 3 + 4i
real(z) 结果为 3
imag(z) 结果为 4
conj(z) 结果为 3 - 4i
abs(z) 结果为 5
arg(1 + i) 结果为 0.7853981634
arg(1 + i) rad in degrees 结果为 45°
函数 给出
real(z) 实部
imag(z) 虚部,以普通数字表示
conj(z) 共轭复数:实部相同,虚部符号相反
abs(z) 模:到零点的距离
arg(z) 辐角:与正实轴之间的夹角,以弧度表示

arg 返回一个介于 −π 和 π 之间、以弧度为单位的普通数字。要以度显示,请像最后一行那样把它标记为弧度再换算。要反过来从模和角度得到复数,请使用 exp2 * exp(i * pi / 3)1 + 1.7320508076i

负数的平方根

普通负数的平方根属于实数计算,所以 sqrt(-16) 会显示一条错误,告诉你应该怎么写:Error: imaginary number. For a complex answer, write sqrt(-16 + 0i)。要求复数根,请把这个数写成复数:加上 0i,或者使用 complex(…, 0)

calc
sqrt(-16 + 0i) 结果为 4i
sqrt(complex(-16, 0)) 结果为 4i
sqrt(3 + 4i) 结果为 2 + i
sqrt(2i) 结果为 1 + i

sqrt 返回主根,即实部为正的那个根(对于负数,则是虚部为正的那个)。另一个平方根是它的相反数。

你写成复数的值会一直保持为复数,即使虚部为零也是如此。你可以先把它存进名称,或者继续用它计算:执行 x = -16 + 0i 后,sqrt(x)4i,尽管 x 显示为 -16

这样,求根公式就适用于任何一元二次方程:

calc
# x^2 + 2x + 5 = 0 的根
a = 1
b = 2
c = 5
判别式 = b^2 - 4*a*c 结果为 -16
(-b + sqrt(判别式 + 0i)) / (2*a) 结果为 -1 + 2i
(-b - sqrt(判别式 + 0i)) / (2*a) 结果为 -1 - 2i

立方根遵循同样的主根规则,对负数使用时结果可能出乎你的意料:

calc
cbrt(-8) 结果为 -2
cbrt(-8 + 0i) 结果为 1 + 1.7320508076i

两者都是 −8 的立方根。实数版本给出实数根;复数版本给出复数主根。

复变函数

calc
exp(i * pi) 结果为 -1
ln(-1 + 0i) 结果为 3.1415926536i
i^i 结果为 0.2078795764
cos(i) 结果为 1.5430806348
sinh(i) 结果为 0.8414709848i
2^i 结果为 0.7692389014 + 0.6389612763i

以下函数接受复数值:

  • sincostan 及其反函数 asinacosatan
  • sinhcoshtanh 及其反函数 asinhacoshatanh
  • explnlog(或 log10)、log2sqrtcbrt
  • 指数为小数或复数的幂,如 i^0.52^i

它们使用二进制浮点运算,所以结果是非常接近的近似值。小到可以忽略的舍入残差会显示为 0,所以 exp(i * pi) 显示为 −1,与教科书中的答案一致。存储的值保留了全部位数,所以比较这类结果时,请检查差值是否极小,如 abs(exp(i * pi) + 1) < 1e-9,而不要使用 ==

每个函数只给出一个结果,取自其主值分支。一个复数有无穷多个对数和多个根,你得到的是标准的那一个。与 sqrt 一样,实数输入会保持为实数:ln(-1)log(-100) 会显示虚数错误,并给出可以尝试的复数写法,而 ln(-1 + 0i) 得到 πi。零的对数会报错。

只对实数有意义的函数(如 floorround)不接受复数值。

比较复数

calc
2 + 3i == complex(2, 3) 结果为 true
2 + 3i != 2 - 3i 结果为 true
complex(3, 0) >= 3 结果为 true
abs(3 + 4i) > abs(1 + 2i) 结果为 true

==!= 适用于任何复数值。<<=>>= 只有在两边的虚部都为零时才有效,因为复数没有自然的大小顺序:i < 2 会报错。要比较大小,请像最后一行那样用 abs 比较模。复数无法排序。

完整规则请参阅高等数学:功能与限制参考页。

综合运用

下面核对一道交流电路题:一个 30 Ω 的电阻与一个电抗为 40 Ω 的电感串联,接在 10 V 电源上:

calc
# 串联电路:30 Ω 电阻,40 Ω 电抗,10 V 电源
电阻 = 30
电抗 = 40
z = complex(电阻, 电抗) 结果为 30 + 40i
abs(z) 结果为 50
电流 = 10 / z 结果为 0.12 - 0.16i
abs(电流) 结果为 0.2
arg(z) rad in degrees to 1 dp 结果为 53.1°

阻抗为 30 + 40i,大小为 50 Ω,所以电流为 0.2 A,相位比电压滞后约 53.1°。工程师通常用 j 表示虚数单位;在 Varlig 中则始终是 i。欧姆、伏特和安培都写在注释里,因为复数的各个部分不能带单位。