9.3. cmath — 复数的数学函数 — Python 文档

来自菜鸟教程
Python/docs/3.6/library/cmath
跳转至:导航、​搜索

9.3. 数学 — 复数的数学函数


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

笔记

在硬件和系统级支持带符号零的平台上,涉及分支切割的函数在分支切割的 两侧 上是连续的:零的符号将分支切割的一侧与另一侧区分开来。 在不支持有符号零的平台上,连续性如下所述。


9.3.1. 与极坐标的转换

Python 复数 z 使用 rectangularCartesian 坐标在内部存储。 它完全由它的实部z.real和它的虚部z.imag决定。 换句话说:

z == z.real + z.imag*1j

极坐标 提供了一种表示复数的替代方法。 在极坐标中,复数 z 由模数 r 和相位角 phi 定义。 模数 rz 到原点的距离,而相位 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

笔记

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


cmath.polar(x)
返回 x 在极坐标中的表示。 返回一对 (r, phi),其中 rx 的模数,phi 是 x 的相位。 polar(x) 相当于 (abs(x), phase(x))
cmath.rect(r, phi)
返回具有极坐标 rphi 的复数 x。 相当于 r * (math.cos(phi) + math.sin(phi)*1j)


9.3.2. 幂函数和对数函数

cmath.exp(x)
返回指数值 e**x
cmath.log(x[, base])
返回 x 到给定 的对数。 如果未指定 base,则返回 x 的自然对数。 有一个分支切割,从 0 沿负实轴到 -∞,从上方连续。
cmath.log10(x)
返回 x 的以 10 为底的对数。 这与 log() 具有相同的分支切割。
cmath.sqrt(x)
返回 x 的平方根。 这与 log() 具有相同的分支切割。


9.3.3. 三角函数

cmath.acos(x)
返回 x 的反余弦值。 有两种分支切割:一种是从 1 沿实轴向右延伸到 ∞,从下方连续。 另一个沿实轴从 -1 向左延伸到 -∞,从上方连续。
cmath.asin(x)
返回 x 的反正弦。 这与 acos() 具有相同的分支切割。
cmath.atan(x)
返回 x 的反正切。 有两种分支切割:一种是从 1j 沿虚轴延伸到 ∞j,从右侧连续。 另一个从 -1j 沿虚轴延伸到 -∞j,从左侧连续。
cmath.cos(x)
返回 x 的余弦。
cmath.sin(x)
返回 x 的正弦值。
cmath.tan(x)
返回 x 的切线。


9.3.4. 双曲函数

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 的双曲正切值。


9.3.5. 分类功能

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)

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

根据给定的绝对和相对容差确定两个值是否接近。

rel_tol 是相对容差 - 它是 ab 之间的最大允许差值,相对于 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)

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

3.5 版中的新功能。

也可以看看

PEP 485 – 测试近似相等的函数


9.3.6. 常数

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:复杂初等函数的分支切割; 或者,无所事事的符号位。 在 Iserles, A. 和 Powell, M. (eds.), 数值分析的最新技术。 克拉伦登出版社 (1987) pp165–211。