Python复数和cmath模块
示例
该cmath模块类似于该math模块,但是为复杂平面定义了适当的功能。
首先,复数是一种数字类型,它是Python语言本身的一部分,而不是由库类提供。因此,我们不需要import cmath使用普通的算术表达式。
请注意,我们使用j(或J)而不是i。
z = 1 + 3j
我们必须使用1j因为j它将是变量的名称而不是数字文字。
1j * 1jOut: (-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 cmathcmath.sqrt(-1)
# 出:1j
自然sqrt,复数和实数的行为是不同的。在非复数中math,负数的平方根会引发异常:
import mathmath.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.5cmath.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.5z = cmath.rect(*cmath.polar(1+1j))z
# 输出:(1.0000000000000002 + 1.0000000000000002j)
cmath.isclose(z, 1+1j)
# 真正
以上是 Python复数和cmath模块 的全部内容, 来源链接: utcz.com/z/321284.html