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
与极坐标之间的转换 |
|
返回 z 的相位 |
|
返回 z 在极坐标中的表示 |
|
返回极坐标为 r 和 phi 的复数 z |
|
幂函数和对数函数 |
|
返回 e 的 z 次幂 |
|
返回 z 以给定 base 为底的对数(默认为 e) |
|
返回 z 以 10 为底的对数 |
|
返回 z 的平方根 |
|
三角函数 |
|
返回 z 的反余弦 |
|
返回 z 的反正弦 |
|
返回 z 的反正切 |
|
返回 z 的余弦 |
|
返回 z 的正弦 |
|
返回 z 的正切 |
|
双曲函数 |
|
返回 z 的反双曲余弦 |
|
返回 z 的反双曲正弦 |
|
返回 z 的反双曲正切 |
|
返回 z 的双曲余弦 |
|
返回 z 的双曲正弦 |
|
返回 z 的双曲正切 |
|
分类函数 |
|
检查 z 的所有分量是否都为有限值 |
|
检查 z 的任一分量是否为无穷大 |
|
检查 z 的任一分量是否为 NaN |
|
检查值 a 和 b 是否彼此接近 |
|
常量 |
|
π = 3.141592… |
|
e = 2.718281… |
|
τ = 2π = 6.283185… |
|
正无穷大 |
|
纯虚数无穷大 |
|
“非数值”(NaN) |
|
纯虚数 NaN |
与极坐标之间的转换¶
一个 Python 复数 z
在内部是使用*直角坐标*或*笛卡尔坐标*来存储的。 它完全由它的*实部* z.real
和*虚部* z.imag
来确定。
极坐标提供了表示复数的另一种方式。 在极坐标中,一个复数 z 由模 r 和相位角 phi 定义。 模 r 是 z 到原点的距离,而相位 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
- cmath.polar(z)¶
返回 z 在极坐标中的表示。 返回一个数对
(r, phi)
,其中 r 是 z 的模,phi 是 z 的相位。polar(z)
等价于(abs(z), phase(z))
。
- cmath.rect(r, phi)¶
返回极坐标为 r 和 phi 的复数 z。 等价于
complex(r * math.cos(phi), r * math.sin(phi))
。
幂函数与对数函数¶
- cmath.exp(z)¶
返回 e 的 z 次幂,其中 e 是自然对数的底。
- cmath.log(z[, base])¶
返回 z 以给定 base 为底的对数。 如果未指定 base,则返回 z 的自然对数。 有一个分支切割,从 0 沿负实轴到 -∞。
三角函数¶
- cmath.acos(z)¶
返回 z 的反余弦。 有两个分支切割:一个从 1 沿实轴向右延伸到 ∞。 另一个从 -1 沿实轴向左延伸到 -∞。
- 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)¶
如果 a 和 b 的值彼此接近,则返回
True
,否则返回False
。两个值是否被视为接近,是根据给定的绝对和相对容差来确定的。 如果没有发生错误,结果将是:
abs(a-b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol)
。rel_tol 是相对容差 -- 它是 a 和 b 之间允许的最大差值,相对于 a 或 b 的较大绝对值。例如,要设置 5% 的容差,请传递
rel_tol=0.05
。默认容差为1e-09
,可确保两个值在大约 9 位十进制数字内相同。rel_tol 必须为非负数且小于1.0
。abs_tol 是绝对容差;它默认为
0.0
并且必须为非负数。 当将x
与0.0
比较时,isclose(x, 0)
计算为abs(x) <= rel_tol * abs(x)
,对于任何x
和小于1.0
的 rel_tol,结果为False
。因此,请在调用中添加一个适当的正 abs_tol 参数。IEEE 754 特殊值
NaN
、inf
和-inf
将根据 IEEE 规则进行处理。 具体来说,NaN
不被认为接近任何其他值,包括NaN
。inf
和-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.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.