cmath
— 复数的数学函数¶
此模块提供了对复数的数学函数的访问。此模块中的函数接受整数、浮点数或复数作为参数。它们还接受任何具有 __complex__()
或 __float__()
方法的 Python 对象:这些方法分别用于将对象转换为复数或浮点数,然后将函数应用于转换的结果。
注意
对于涉及分支切割的函数,我们面临着如何定义切割本身上的函数的问题。根据 Kahan 的“复数基本函数的分支切割”论文,以及 C99 及更高版本 C 标准的附录 G,我们使用零的符号来区分分支切割的一侧和另一侧:对于沿着(一部分)实轴的分支切割,我们查看虚部的符号,而对于沿着虚轴的分支切割,我们查看实部的符号。
例如,cmath.sqrt()
函数沿着负实轴有一个分支切割。complex(-2.0, -0.0)
的参数被视为位于分支切割的*下方*,因此在负虚轴上给出一个结果
>>> cmath.sqrt(complex(-2.0, -0.0))
-1.4142135623730951j
但是 complex(-2.0, 0.0)
的参数被视为位于分支切割的*上方*
>>> cmath.sqrt(complex(-2.0, 0.0))
1.4142135623730951j
极坐标的转换¶
Python 复数 z
在内部使用*直角*坐标或*笛卡尔*坐标存储。它完全由其*实部* z.real
和*虚部* z.imag
确定。
*极坐标*提供了另一种表示复数的方法。在极坐标中,复数*z*由模数*r*和相位角*phi*定义。模数*r*是从*z*到原点的距离,而相位*phi*是从正 x 轴到连接原点和*z*的线段的逆时针角度,以弧度为单位。
以下函数可用于在本机直角坐标和极坐标之间进行转换。
- cmath.phase(x)¶
以浮点数形式返回*x*的相位(也称为*x*的*辐角*)。
phase(x)
等价于math.atan2(x.imag, x.real)
。结果位于 [-*π*, *π*] 范围内,并且此操作的分支切割位于负实轴上。结果的符号与x.imag
的符号相同,即使x.imag
为零>>> phase(complex(-1.0, 0.0)) 3.141592653589793 >>> phase(complex(-1.0, -0.0)) -3.141592653589793
- cmath.polar(x)¶
以极坐标形式返回*x*的表示。返回一个对
(r, phi)
,其中*r*是*x*的模数,*phi*是*x*的相位。polar(x)
等价于(abs(x), phase(x))
。
- cmath.rect(r, phi)¶
返回极坐标为*r*和*phi*的复数*x*。等价于
complex(r * math.cos(phi), r * math.sin(phi))
。
幂函数和对数函数¶
- cmath.exp(x)¶
返回*e*的*x*次幂,其中*e*是自然对数的底数。
- cmath.log(x[, base])¶
返回*x*以给定*base*为底的对数。如果未指定*base*,则返回*x*的自然对数。有一个分支切割,从 0 沿着负实轴到 -∞。
三角函数¶
- cmath.acos(x)¶
返回*x*的反余弦。有两个分支切割:一个从 1 沿着实轴向右延伸到 ∞。另一个从 -1 沿着实轴向左延伸到 -∞。
- cmath.atan(x)¶
返回*x*的反正切。有两个分支切割:一个从
1j
沿着虚轴延伸到∞j
。另一个从-1j
沿着虚轴延伸到-∞j
。
- cmath.cos(x)¶
返回 x 的余弦。
- cmath.sin(x)¶
返回 x 的正弦。
- cmath.tan(x)¶
返回 x 的正切。
双曲函数¶
- cmath.acosh(x)¶
返回 x 的反双曲余弦。 存在一个分支切口,沿着实轴从 1 向左延伸到 -∞。
- cmath.asinh(x)¶
返回 x 的反双曲正弦。 存在两个分支切口:一个从
1j
沿着虚轴延伸到∞j
。 另一个从-1j
沿着虚轴延伸到-∞j
。
- cmath.atanh(x)¶
返回 x 的反双曲正切。 存在两个分支切口:一个从
1
沿着实轴延伸到∞
。 另一个从-1
沿着实轴延伸到-∞
。
- cmath.cosh(x)¶
返回 x 的双曲余弦。
- cmath.sinh(x)¶
返回 x 的双曲正弦。
- cmath.tanh(x)¶
返回 x 的双曲正切。
分类函数¶
- cmath.isfinite(x)¶
如果 x 的实部和虚部都是有限的,则返回
True
,否则返回False
。在 3.2 版中添加。
- cmath.isinf(x)¶
如果 x 的实部或虚部是无穷大,则返回
True
,否则返回False
。
- cmath.isnan(x)¶
如果 x 的实部或虚部是 NaN,则返回
True
,否则返回False
。
- cmath.isclose(a, b, *, rel_tol=1e-09, abs_tol=0.0)¶
如果值 a 和 b 相互接近,则返回
True
,否则返回False
。根据给定的绝对和相对容差确定两个值是否被认为是接近的。
rel_tol 是相对容差 – 它是 a 和 b 之间允许的最大差值,相对于 a 或 b 的较大绝对值。 例如,要设置 5% 的容差,请传递
rel_tol=0.05
。 默认容差为1e-09
,这确保了这两个值在约 9 位小数内相同。 rel_tol 必须大于零。abs_tol 是最小绝对容差 – 对于接近零的比较很有用。 abs_tol 必须至少为零。
如果没有错误发生,结果将是:
abs(a-b) <= max(rel_tol * max(abs(a), abs(b)), 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.nan¶
一个浮点“非数字”(NaN)值。等价于
float('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.