官术网_书友最值得收藏!

1.4.3 復數運算

在實際工作中,我們有時需要用復數來執行一些運算,或者使用復數空間來解決網絡認證方案遇到的難題,并且復數空間是唯一的解決辦法。

復數可以由函數complex(real,imag)或者帶有后綴j的浮點數來指定,相關代碼(complex_exp.py)示例如下:


a = complex(2, 4)
b = 3 - 5j
print(f'complex(2, 4) is: {a}')
print(f'{b}')

執行py文件,輸出結果如下:


complex(2, 4) is: (2+4j)
(3-5j)

對應的實部、虛部和共軛復數可以很容易地獲取,示例(complex_exp.py)如下:


print(f'real of {a} is: {a.real}')
print(f'imag of {a} is: {a.imag}')
print(f'conjugate of {a} is: {a.conjugate()}')

執行py文件,輸出結果如下:


real of (2+4j) is: 2.0
imag of (2+4j) is: 4.0
conjugate of (2+4j) is: (2-4j)

另外,可以進行所有常見的數學運算,示例(complex_exp.py)如下:


print(f'{a} + {b} = {a + b}')
print(f'{a} * {b} = {a * b}')
print(f'{a} / {b} = {a / b}')
print(f'abs({a}) = {abs(a)}')

執行py文件,輸出結果如下:


(2+4j) + (3-5j) = (5-1j)
(2+4j) * (3-5j) = (26+2j)
(2+4j) / (3-5j) = (-0.4117647058823529+0.6470588235294118j)
abs((2+4j)) = 4.47213595499958

如果要計算復數的正弦值、余弦值或平方根,我們可使用cmath模塊(complex_exp.py):


import cmath
print(f'cmath.sin({a}) = {cmath.sin(a)}')
print(f'cmath.cos({a}) = {cmath.cos(a)}')
print(f'cmath.exp({a}) = {cmath.exp(a)}')

執行py文件,輸出結果如下:


cmath.sin((2+4j)) = (24.83130584894638-11.356612711218174j)
cmath.cos((2+4j)) = (-11.36423470640106-24.814651485634187j)
cmath.exp((2+4j)) = (-4.829809383269385-5.5920560936409816j)

Python中大部分與數學相關的模塊都能處理復數。如使用numpy,可以很容易地構造一個復數數組并在這個數組上執行各種操作,相關代碼(complex_exp.py)示例如下:


import numpy as np
np_a = np.array([2+3j, 4+5j, 6-7j, 8+9j])
print(f'np_a object is: {np_a}')
print(f'{np_a} + 2 = {np_a + 2}')
print(f'np.sin({np_a}) = {np.sin(np_a)}')

執行py文件,輸出結果如下:


np_a object is: [2.+3.j 4.+5.j 6.-7.j 8.+9.j]
[2.+3.j 4.+5.j 6.-7.j 8.+9.j] + 2 = [ 4.+3.j  6.+5.j  8.-7.j 10.+9.j]
np.sin([2.+3.j 4.+5.j 6.-7.j 8.+9.j]) = [   9.15449915  -4.16890696j  -56.16227422 -48.50245524j-153.20827755-526.47684926j 4008.42651446-589.49948373j]

Python的標準數學函數在實際情況下并不能產生復數值,因此代碼中不會出現復數返回值,相關代碼(complex_exp.py)示例如下:


import math
print(math.sqrt(-1))

執行py文件,輸出結果如下:


Traceback (most recent call last):
  File "/Users/lyz/Desktop/python-workspace/advanced_programming/chapter3/complex_exp.py", line 32, in <module>
    print(math.sqrt(-1))
ValueError: math domain error

如果想生成一個復數返回值,必須使用cmath模塊,或者在某個支持復數的庫中聲明復數類型的使用,相關代碼(complex_exp.py)示例如下:


print(f'cmath.sqrt(-1) = {cmath.sqrt(-1)}')

執行py文件,輸出結果如下:


cmath.sqrt(-1) = 1j

主站蜘蛛池模板: 临沭县| 兴和县| 黄平县| 景洪市| 南岸区| 厦门市| SHOW| 武乡县| 长春市| 陕西省| 尼木县| 揭西县| 四平市| 冷水江市| 历史| 平安县| 玉树县| 平顶山市| 民丰县| 杭锦旗| 肥城市| 康保县| 读书| 新乡市| 潼关县| 远安县| 陆河县| 子长县| 兖州市| 蒲江县| 泸州市| 当雄县| 克东县| 平塘县| 启东市| 梅河口市| 富蕴县| 峡江县| 盐城市| 定边县| 德保县|