Python复数和cmath模块

示例

该cmath模块类似于该math模块,但是为复杂平面定义了适当的功能。

首先,复数是一种数字类型,它是Python语言本身的一部分,而不是由库类提供。因此,我们不需要import cmath使用普通的算术表达式。

请注意,我们使用j(或J)而不是i。

z = 1 + 3j

我们必须使用1j因为j它将是变量的名称而不是数字文字。

1j * 1j

Out: (-1+0j)

1j ** 1j

# Out: (0.20787957635076193+0j)     # "i to the i"  == math.e** -(math.pi/2)

我们有real一部分和imag(虚构)部分,以及复杂部分conjugate:

# 实部和虚部均为浮点型

z.real, z.imag

# 出:(1.0,3.0)

z.conjugate()

# Out: (1-3j)    # z.conjugate()== z.real-z.imag * 1j

内置的功能abs和complex也是语言本身的一部分,并且不需要任何进口:

abs(1 + 1j)

# Out: 1.4142135623730951     # 2的平方根

complex(1)

# 出:(1 + 0j)

complex(imag=1)

# 出:(1j)

complex(1, 1)

# 出:(1 + 1j)

该complex函数可以接受字符串,但不能包含空格:

complex('1+1j')

# 出:(1 + 1j)

complex('1 + 1j')

# 异常:ValueError:complex()arg是格式错误的字符串

但是对于大多数功能,我们确实需要模块,例如sqrt:

import cmath

cmath.sqrt(-1)

# 出:1j

自然sqrt,复数和实数的行为是不同的。在非复数中math,负数的平方根会引发异常:

import math

math.sqrt(-1)

# 异常:ValueError:数学域错误

提供了与极坐标之间来回转换的函数:

cmath.polar(1 + 1j)

# Out: (1.4142135623730951, 0.7853981633974483)    # ==(sqrt(1 +1),atan2(1,1))

abs(1 + 1j), cmath.phase(1 + 1j)

# Out: (1.4142135623730951, 0.7853981633974483)    # 与之前的计算相同

cmath.rect(math.sqrt(2), math.atan(1))

# 输出:(1.0000000000000002 + 1.0000000000000002j)

复杂分析的数学领域超出了本示例的范围,但是复杂平面中的许多功能通常沿实轴或虚轴具有“分支切口”。大多数现代平台都支持IEEE 754中指定的“符号零”,该功能在分支切割的两侧都提供了这些功能的连续性。以下示例来自Python文档:

cmath.phase(complex(-1.0, 0.0))

# 出:3.141592653589793

cmath.phase(complex(-1.0, -0.0))

# 出:-3.141592653589793

该cmath模块还提供许多功能,与math模块直接对应。

除了sqrt,有复杂的版本exp,log,log10,三角函数和它们的逆(sin,cos,tan,asin,acos,atan),和双曲函数及其逆(sinh,cosh,tanh,asinh,acosh,atanh)。但是请注意math.atan2,反正切的两参数形式没有复杂的对应形式。

cmath.log(1+1j)

# 出:(0.34657359027997264 + 0.7853981633974483j)

cmath.exp(1j * cmath.pi)

# Out: (-1+1.2246467991473532e-16j)   # e到i pi == -1,在舍入误差内

提供了常量pi和e。请注意,这些float不是complex。

type(cmath.pi)

# Out: <class 'float'>

该cmath模块还提供了和的复杂版本isinf(适用于Python 3.2+)isfinite。请参见“无穷大和NaN”。如果复数的实部或虚部为无穷大,则视为无穷大。

cmath.isinf(complex(float('inf'), 0.0))

# 出:真

同样,该cmath模块提供的复杂版本isnan。请参见“无穷大和NaN”。如果复数的实部或虚部为“非数字”,则视为“非数字”。

cmath.isnan(0.0, float('nan'))

# 出:真

请注意,没有cmath与math.inf和math.nan常量对应的版本(从Python 3.5及更高版本开始)

Python 3.x 3.5
cmath.isinf(complex(0.0, math.inf))

# 出:真

cmath.isnan(complex(math.nan, 0.0))

# 出:真

cmath.inf

# 异常:AttributeError:模块“ cmath”没有属性“ inf”

在Python 3.5及更高版本中,和模块isclose中都有一个方法。cmathmath

Python 3.x 3.5
z = cmath.rect(*cmath.polar(1+1j))

z

# 输出:(1.0000000000000002 + 1.0000000000000002j)

cmath.isclose(z, 1+1j)

# 真正

以上是 Python复数和cmath模块 的全部内容, 来源链接: utcz.com/z/321284.html

回到顶部