9.3. cmath —复数的 math 函数

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

Note

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

9.3.1. 极坐标之间的转换

Python 复数z使用矩形笛卡尔坐标存储在内部。它完全由它的实部 z.real和其虚部 z.imag决定。换一种说法:

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

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

下列Function可用于从原始直角坐标转换为极坐标并返回。

  • cmath. phase(* x *)
    • 以浮点数返回* x 的相位(也称为 x argument *)。 phase(x)等效于math.atan2(x.imag, x.real)。结果位于[-π,π]范围内,此操作的分支剪切沿负实轴,从上方连续。在支持带符号零的系统(包括当前使用的大多数系统)上,这意味着即使x.imag为零,结果的符号也与x.imag的符号相同:
>>> phase(complex(-1.0, 0.0))
3.1415926535897931
>>> phase(complex(-1.0, -0.0))
-3.1415926535897931

2.6 版的新Function。

Note

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

  • cmath. polar(* x *)
    • 返回极坐标中* x 的表示形式。返回Pair(r, phi),其中 r x 的模数,phi 是 x *的相位。 polar(x)等效于(abs(x), phase(x))

2.6 版的新Function。

  • cmath. rect(* r phi *)
    • 返回带有极坐标* r phi 的复数 x *。等效于r * (math.cos(phi) + math.sin(phi)*1j)

2.6 版的新Function。

9.3.2. 幂和对数函数

  • cmath. exp(* x *)

    • 返回指数值e**x
  • cmath. log(* x * [,* base *])

    • 将* x 的对数返回给定的 base 。如果未指定 base ,则返回 x *的自然对数。从上开始,沿着负实轴从 0 到-∞有一个分支切口。

在版本 2.4 中更改:添加了* base *参数。

  • 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,从左侧开始连续。

在 2.6 版中进行了更改:上切的连续性方向颠倒了

  • 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,从左侧开始连续。

在 2.6 版中进行了更改:分支剪切已移动,以匹配 C99 标准推荐的剪切

  • cmath. atanh(* x *)
    • 返回* x *的反双曲正切值。有两个分支切口:一个从实线的1延伸到,从下方连续。另一个从-1沿实轴延伸到-∞,从上方连续。

在 2.6 版中进行了更改:右切的连续性方向相反

  • cmath. cosh(* x *)

    • 返回* x *的双曲余弦值。
  • cmath. sinh(* x *)

    • 返回* x *的双曲正弦值。
  • cmath. tanh(* x *)

    • 返回* x *的双曲正切值。

9.3.5. 分类Function

  • cmath. isinf(* x *)
    • 如果 x 的实部或虚部为正或负无穷大,则返回True

2.6 版的新Function。

  • cmath. isnan(* x *)
    • 如果 x 的实部或虚部不是数字(NaN),则返回True

2.6 版的新Function。

9.3.6. Constants

  • cmath. pi

    • math 常数π,为浮点数。
  • cmath. e

    • math 常数* e *,为浮点数。

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

关于分支切口的 Comments:它们是曲线,给定函数沿该曲线不能连续。它们是许多复杂Function的必要Function。假设如果您需要使用复杂的函数进行计算,那么您将了解分支切割。查阅几乎所有(不太基础的)有关复杂变量的书都可以得到启发。有关为数字目的正确选择分支切口的信息,请参考以下内容:

See also

Kahan,W:复杂基本Function的分支削减;或者,很多事都没有。在 A. Iserles 和 M. Powell(编辑)中,数值分析的最新技术。 Clarendon Press(1987)第 165–211 页。