- 复数的数学运算
- 问题:
- 需要使用复数空间,或者需要使用复数来执行计算
- 解决方案:
- 复数可以使用函数 complex(real, imag) 或者带有 j 的浮点数来指定。比如:
a = complex(2, 4) # (2+4j)
b = 3 - 5j
print(a) # (2+4j)
print(b) # (3-5j)
- 对应的实部、虚部和共轭复数可以忍容易的获取。像下面这样:
a.real # 2.0
a.imag # 4.0
a.conjugate
- 书上这里写着返回:(2-4j), 实际上在pycharm里是返回下面的信息 <built-in method conjugate of complex object at 0x0000000002393230>, 在 ipython 是返回
print(a + b) # (5-1j)
print(a*b) # (26+2j)
- 如果要执行其他的复数函数,比如正弦、余弦或平方根,使用 cmath 模块:
import cmath
print(cmath.sin(a)) # (24.83130584894638-11.356612711218174j)
print(cmath.exp(a)) # (-4.829809383269385-5.5920560936409816j)
- 讨论: Python中绝大部分与数学相关的模块都能出来复数。比如你使用 numpy ,可以很容易 构造一个复数数组并在这个数组上执行各种操作。
- (要使用 numpy 库,直接在命令行输入 pip install numpy )
import numpy as np
a = np.array([2 + 3j, 4 + 5j, 6 - 7j, 8 + 9j])
print(a) # [2.+3.j 4.+5.j 6.-7.j 8.+9.j]
print(np.sin(a))
"""
[ 9.15449915 -4.16890696j -56.16227422 -48.50245524j
-153.20827755-526.47684926j 4008.42651446-589.49948373j]
"""
- Python 的标准数学函数并不能产生复数值,因此代码中不可能出现复数返回值,比如:
import math
math.sqrt(-1) # ValueError: math domain error
- 如果想生产一个复数返回结果,必须显性(书上原话是“显示”)cmath 模块,或者在某个支持 复数的库中声明复数类型的使用。比如:
print(cmath.sqrt(-1)) # 1j