复数
复数由实部和虚部组成,虚部用 i(−1 的平方根)表示。本页介绍如何书写复数、用复数进行运算、把复数分解为模和辐角、求负数的平方根,以及接受复数值的数学函数。
一元二次方程没有实数根、处理交流电路或信号,或者核对复分析课程作业时,都可以参考本页。
书写复数
2 + 3i 结果为 2 + 3icomplex(3, -4) 结果为 3 - 4ii^2 结果为 -1把 i 紧跟在数字后面表示虚部,如 3i 或 1.5i,也可以单独使用 i。complex(real, imaginary) 用两个部分构建同样的值,当两个部分是名称时很方便:complex(电阻, 电抗)。两个部分都必须是不带单位的普通数字。
只有当笔记中没有其他东西叫 i 时,i 才表示虚数单位。一旦你定义了名为 i 的名称或自定义单位,它就会取而代之:
i = 52 + 3i 结果为 17complex(2, 3) 结果为 2 + 3i这里 3i 变成了 3 × 5,这一行得到 17。名称会在一条笔记的各个计算块之间延续,所以笔记前面任何位置的 i = … 都有同样的效果。在使用复数的笔记中,请避免用 i 作为名称。complex(2, 3) 不使用这个名称,因此仍然有效。
运算
(2 + 3i) + (1 - 5i) 结果为 3 - 2i(1 + 2i) * (3 - i) 结果为 5 + 5i(2 + 3i) * (2 - 3i) 结果为 1310 / (3 + 4i) 结果为 1.2 - 1.6i(1 + i)^8 结果为 16加法、减法、乘法、除法和整数次幂都是精确计算。当结果的虚部为零时(如 (2 + 3i) * (2 - 3i)),结果显示为普通数字。做乘除法时,请给每个复数加上括号,这样 (2 + 3i) * (2 - 3i) 就不会被读作 2 + (3i * 2) - 3i。
复数的各个部分
z = 3 + 4ireal(z) 结果为 3imag(z) 结果为 4conj(z) 结果为 3 - 4iabs(z) 结果为 5arg(1 + i) 结果为 0.7853981634arg(1 + i) rad in degrees 结果为 45°| 函数 | 给出 |
|---|---|
real(z) |
实部 |
imag(z) |
虚部,以普通数字表示 |
conj(z) |
共轭复数:实部相同,虚部符号相反 |
abs(z) |
模:到零点的距离 |
arg(z) |
辐角:与正实轴之间的夹角,以弧度表示 |
arg 返回一个介于 −π 和 π 之间、以弧度为单位的普通数字。要以度显示,请像最后一行那样把它标记为弧度再换算。要反过来从模和角度得到复数,请使用 exp:2 * exp(i * pi / 3) 是 1 + 1.7320508076i。
负数的平方根
普通负数的平方根属于实数计算,所以 sqrt(-16) 会显示一条错误,告诉你应该怎么写:Error: imaginary number. For a complex answer, write sqrt(-16 + 0i)。要求复数根,请把这个数写成复数:加上 0i,或者使用 complex(…, 0):
sqrt(-16 + 0i) 结果为 4isqrt(complex(-16, 0)) 结果为 4isqrt(3 + 4i) 结果为 2 + isqrt(2i) 结果为 1 + isqrt 返回主根,即实部为正的那个根(对于负数,则是虚部为正的那个)。另一个平方根是它的相反数。
你写成复数的值会一直保持为复数,即使虚部为零也是如此。你可以先把它存进名称,或者继续用它计算:执行 x = -16 + 0i 后,sqrt(x) 是 4i,尽管 x 显示为 -16。
这样,求根公式就适用于任何一元二次方程:
# x^2 + 2x + 5 = 0 的根a = 1b = 2c = 5判别式 = b^2 - 4*a*c 结果为 -16(-b + sqrt(判别式 + 0i)) / (2*a) 结果为 -1 + 2i(-b - sqrt(判别式 + 0i)) / (2*a) 结果为 -1 - 2i立方根遵循同样的主根规则,对负数使用时结果可能出乎你的意料:
cbrt(-8) 结果为 -2cbrt(-8 + 0i) 结果为 1 + 1.7320508076i两者都是 −8 的立方根。实数版本给出实数根;复数版本给出复数主根。
复变函数
exp(i * pi) 结果为 -1ln(-1 + 0i) 结果为 3.1415926536ii^i 结果为 0.2078795764cos(i) 结果为 1.5430806348sinh(i) 结果为 0.8414709848i2^i 结果为 0.7692389014 + 0.6389612763i以下函数接受复数值:
sin、cos、tan及其反函数asin、acos、atansinh、cosh、tanh及其反函数asinh、acosh、atanhexp、ln、log(或log10)、log2、sqrt和cbrt- 指数为小数或复数的幂,如
i^0.5或2^i
它们使用二进制浮点运算,所以结果是非常接近的近似值。小到可以忽略的舍入残差会显示为 0,所以 exp(i * pi) 显示为 −1,与教科书中的答案一致。存储的值保留了全部位数,所以比较这类结果时,请检查差值是否极小,如 abs(exp(i * pi) + 1) < 1e-9,而不要使用 ==。
每个函数只给出一个结果,取自其主值分支。一个复数有无穷多个对数和多个根,你得到的是标准的那一个。与 sqrt 一样,实数输入会保持为实数:ln(-1) 和 log(-100) 会显示虚数错误,并给出可以尝试的复数写法,而 ln(-1 + 0i) 得到 πi。零的对数会报错。
只对实数有意义的函数(如 floor 和 round)不接受复数值。
比较复数
2 + 3i == complex(2, 3) 结果为 true2 + 3i != 2 - 3i 结果为 truecomplex(3, 0) >= 3 结果为 trueabs(3 + 4i) > abs(1 + 2i) 结果为 true== 和 != 适用于任何复数值。<、<=、> 和 >= 只有在两边的虚部都为零时才有效,因为复数没有自然的大小顺序:i < 2 会报错。要比较大小,请像最后一行那样用 abs 比较模。复数无法排序。
完整规则请参阅高等数学:功能与限制参考页。
综合运用
下面核对一道交流电路题:一个 30 Ω 的电阻与一个电抗为 40 Ω 的电感串联,接在 10 V 电源上:
# 串联电路:30 Ω 电阻,40 Ω 电抗,10 V 电源电阻 = 30电抗 = 40z = complex(电阻, 电抗) 结果为 30 + 40iabs(z) 结果为 50电流 = 10 / z 结果为 0.12 - 0.16iabs(电流) 结果为 0.2arg(z) rad in degrees to 1 dp 结果为 53.1°阻抗为 30 + 40i,大小为 50 Ω,所以电流为 0.2 A,相位比电压滞后约 53.1°。工程师通常用 j 表示虚数单位;在 Varlig 中则始终是 i。欧姆、伏特和安培都写在注释里,因为复数的各个部分不能带单位。