9.3. cmath — 复数的数学函数 — Python 文档
9.3. 数学 — 复数的数学函数
该模块始终可用。 它提供对复数数学函数的访问。 该模块中的函数接受整数、浮点数或复数作为参数。 它们还将接受任何具有 __complex__()
或 __float__()
方法的 Python 对象:这些方法分别用于将对象转换为复数或浮点数,函数是然后应用于转换的结果。
笔记
在硬件和系统级支持带符号零的平台上,涉及分支切割的函数在分支切割的 两侧 上是连续的:零的符号将分支切割的一侧与另一侧区分开来。 在不支持有符号零的平台上,连续性如下所述。
9.3.1. 与极坐标的转换
Python 复数 z
使用 rectangular 或 Cartesian 坐标在内部存储。 它完全由它的实部z.real
和它的虚部z.imag
决定。 换句话说:
z == z.real + z.imag*1j
极坐标 提供了一种表示复数的替代方法。 在极坐标中,复数 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。 相当于
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)
如果值 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)
。NaN
、inf
和-inf
的 IEEE 754 特殊值将根据 IEEE 规则进行处理。 具体来说,NaN
不被认为接近任何其他值,包括NaN
。inf
和-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。