cmath --- 复数数学函数


此模块提供了对复数数学函数的访问。 此模块中的函数接受整数、浮点数或复数作为参数。 它们也接受任何具有 __complex__()__float__() 方法的 Python 对象:这些方法分别用于将对象转换为复数或浮点数,然后将函数应用于转换结果。

备注

对于涉及分支切割的函数,我们需要决定如何在切割本身上定义这些函数。 遵循 Kahan 的论文 “Branch cuts for complex elementary functions” 以及 C99 及更高 C 标准的附录 G,我们使用零的符号来区分分支切割的一侧与另一侧:对于沿(部分)实轴的分支切割,我们看虚部的符号;而对于沿虚轴的分支切割,我们看实部的符号。

例如,cmath.sqrt() 函数有一个沿负实轴的分支切割。 参数 -2-0j 被视为位于分支切割的*下方*,因此结果位于负虚轴上

>>> cmath.sqrt(-2-0j)
-1.4142135623730951j

但参数 -2+0j 被视为位于分支切割的上方

>>> cmath.sqrt(-2+0j)
1.4142135623730951j

与极坐标之间的转换

phase(z)

返回 z 的相位

polar(z)

返回 z 在极坐标中的表示

rect(r, phi)

返回极坐标为 rphi 的复数 z

幂函数和对数函数

exp(z)

返回 ez 次幂

log(z[, base])

返回 z 以给定 base 为底的对数(默认为 e

log10(z)

返回 z 以 10 为底的对数

sqrt(z)

返回 z 的平方根

三角函数

acos(z)

返回 z 的反余弦

asin(z)

返回 z 的反正弦

atan(z)

返回 z 的反正切

cos(z)

返回 z 的余弦

sin(z)

返回 z 的正弦

tan(z)

返回 z 的正切

双曲函数

acosh(z)

返回 z 的反双曲余弦

asinh(z)

返回 z 的反双曲正弦

atanh(z)

返回 z 的反双曲正切

cosh(z)

返回 z 的双曲余弦

sinh(z)

返回 z 的双曲正弦

tanh(z)

返回 z 的双曲正切

分类函数

isfinite(z)

检查 z 的所有分量是否都为有限值

isinf(z)

检查 z 的任一分量是否为无穷大

isnan(z)

检查 z 的任一分量是否为 NaN

isclose(a, b, *, rel_tol, abs_tol)

检查值 ab 是否彼此接近

常量

pi

π = 3.141592…

e

e = 2.718281…

tau

τ = 2π = 6.283185…

inf

正无穷大

infj

纯虚数无穷大

nan

“非数值”(NaN)

nanj

纯虚数 NaN

与极坐标之间的转换

一个 Python 复数 z 在内部是使用*直角坐标*或*笛卡尔坐标*来存储的。 它完全由它的*实部* z.real 和*虚部* z.imag 来确定。

极坐标提供了表示复数的另一种方式。 在极坐标中,一个复数 z 由模 r 和相位角 phi 定义。 模 rz 到原点的距离,而相位 phi 是从正 x 轴到连接原点和 z 的线段的逆时针角,以弧度为单位。

以下函数可用于在本机直角坐标和极坐标之间来回转换。

cmath.phase(z)

返回 z 的相位(也称为 z 的*辐角*),类型为浮点数。 phase(z) 等价于 math.atan2(z.imag, z.real)。 结果的范围在 [-π, π] 之间,此操作的分支切割沿负实轴。 结果的符号与 z.imag 的符号相同,即使 z.imag 为零也是如此。

>>> phase(-1+0j)
3.141592653589793
>>> phase(-1-0j)
-3.141592653589793

备注

复数 z 的模(绝对值)可以使用内置的 abs() 函数计算。 cmath 模块中没有单独的函数用于此操作。

cmath.polar(z)

返回 z 在极坐标中的表示。 返回一个数对 (r, phi),其中 rz 的模,phiz 的相位。 polar(z) 等价于 (abs(z), phase(z))

cmath.rect(r, phi)

返回极坐标为 rphi 的复数 z。 等价于 complex(r * math.cos(phi), r * math.sin(phi))

幂函数与对数函数

cmath.exp(z)

返回 ez 次幂,其中 e 是自然对数的底。

cmath.log(z[, base])

返回 z 以给定 base 为底的对数。 如果未指定 base,则返回 z 的自然对数。 有一个分支切割,从 0 沿负实轴到 -∞。

cmath.log10(z)

返回 z 以 10 为底的对数。 它具有与 log() 相同的分支切割。

cmath.sqrt(z)

返回 z 的平方根。 它具有与 log() 相同的分支切割。

三角函数

cmath.acos(z)

返回 z 的反余弦。 有两个分支切割:一个从 1 沿实轴向右延伸到 ∞。 另一个从 -1 沿实轴向左延伸到 -∞。

cmath.asin(z)

返回 z 的反正弦。 它具有与 acos() 相同的分支切割。

cmath.atan(z)

返回 z 的反正切。 有两个分支切割:一个从 1j 沿虚轴延伸到 ∞j。 另一个从 -1j 沿虚轴延伸到 -∞j

cmath.cos(z)

返回 z 的余弦。

cmath.sin(z)

返回 z 的正弦。

cmath.tan(z)

返回 z 的正切。

双曲函数

cmath.acosh(z)

返回 z 的反双曲余弦。 有一个分支切割,从 1 沿实轴向左延伸到 -∞。

cmath.asinh(z)

返回 z 的反双曲正弦。 有两个分支切割:一个从 1j 沿虚轴延伸到 ∞j。 另一个从 -1j 沿虚轴延伸到 -∞j

cmath.atanh(z)

返回 z 的反双曲正切。 有两个分支切割:一个从 1 沿实轴延伸到 。 另一个从 -1 沿实轴延伸到 -∞

cmath.cosh(z)

返回 z 的双曲余弦。

cmath.sinh(z)

返回 z 的双曲正弦。

cmath.tanh(z)

返回 z 的双曲正切。

分类函数

cmath.isfinite(z)

如果 z 的实部和虚部都是有限的,则返回 True,否则返回 False

在 3.2 版本加入。

cmath.isinf(z)

如果 z 的实部或虚部是无穷大,则返回 True,否则返回 False

cmath.isnan(z)

如果 z 的实部或虚部是 NaN,则返回 True,否则返回 False

cmath.isclose(a, b, *, rel_tol=1e-09, abs_tol=0.0)

如果 ab 的值彼此接近,则返回 True,否则返回 False

两个值是否被视为接近,是根据给定的绝对和相对容差来确定的。 如果没有发生错误,结果将是: abs(a-b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol)

rel_tol 是相对容差 -- 它是 ab 之间允许的最大差值,相对于 ab 的较大绝对值。例如,要设置 5% 的容差,请传递 rel_tol=0.05。默认容差为 1e-09,可确保两个值在大约 9 位十进制数字内相同。rel_tol 必须为非负数且小于 1.0

abs_tol 是绝对容差;它默认为 0.0 并且必须为非负数。 当将 x0.0 比较时,isclose(x, 0) 计算为 abs(x) <= rel_tol  * abs(x),对于任何 x 和小于 1.0 的 rel_tol,结果为 False。因此,请在调用中添加一个适当的正 abs_tol 参数。

IEEE 754 特殊值 NaNinf-inf 将根据 IEEE 规则进行处理。 具体来说,NaN 不被认为接近任何其他值,包括 NaNinf-inf 只被认为接近它们自己。

在 3.5 版本加入。

参见

PEP 485 -- 用于测试近似相等性的函数

常量

cmath.pi

数学常数 π,类型为浮点数。

cmath.e

数学常数 e,类型为浮点数。

cmath.tau

数学常数 τ,类型为浮点数。

在 3.6 版本加入。

cmath.inf

浮点数正无穷大。 等价于 float('inf')

在 3.6 版本加入。

cmath.infj

实部为零、虚部为正无穷大的复数。 等价于 complex(0.0, float('inf'))

在 3.6 版本加入。

cmath.nan

浮点型“非数字”(NaN) 值。 等价于 float('nan')。 另请参阅 math.nan

在 3.6 版本加入。

cmath.nanj

实部为零、虚部为 NaN 的复数。 等价于 complex(0.0, float('nan'))

在 3.6 版本加入。

请注意,函数的选择与 math 模块中的函数相似,但不完全相同。 存在两个模块的原因是,一些用户对复数不感兴趣,甚至可能不知道复数是什么。 他们宁愿让 math.sqrt(-1) 引发异常,也不愿让它返回一个复数。 还要注意,cmath 中定义的函数总是返回一个复数,即使答案可以表示为实数(在这种情况下,复数的虚部为零)。

关于分支切割的说明:它们是给定函数不连续的曲线。 它们是许多复杂函数的必要特征。 假定如果您需要使用复数函数进行计算,您将了解分支切割。 请查阅几乎任何(不太基础的)有关复变量的书籍以获得启发。 有关为数值目的正确选择分支切割的信息,一个好的参考应该是以下内容

参见

Kahan, W: Branch cuts for complex elementary functions; or, Much ado about nothing's sign bit. In Iserles, A., and Powell, M. (eds.), The state of the art in numerical analysis. Clarendon Press (1987) pp165–211.