- Python進階編程:編寫更高效、優雅的Python代碼
- 劉宇宙 謝東 劉艷
- 638字
- 2021-04-30 12:39:34
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
推薦閱讀
- jQuery Mobile Web Development Essentials(Third Edition)
- 騰訊iOS測試實踐
- Java程序員面試算法寶典
- Visual C#通用范例開發金典
- 響應式架構:消息模式Actor實現與Scala、Akka應用集成
- Python入門很輕松(微課超值版)
- Learning Splunk Web Framework
- 零基礎學C語言(升級版)
- 寫給大家看的Midjourney設計書
- Learning Concurrency in Python
- C語言程序設計與應用實驗指導書(第2版)
- Joomla!Search Engine Optimization
- 編寫高質量代碼之Java(套裝共2冊)
- 微服務設計
- ACE技術內幕:深入解析ACE架構設計與實現原理