• 复数的数学运算
  • 问题:
  • 需要使用复数空间,或者需要使用复数来执行计算
  • 解决方案:
  • 复数可以使用函数 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