Python 有一個處理複數的標準類型,即 COMPLEX 類型。如果只是做簡單的計算,不需要導入任何模塊,但是如果導入標準庫cmath,還可以使用複數對應的數學函數(指數、對數、三角等)。
下面的內容在這裡用示例代碼來解釋。
- 生成複雜變量
- 獲得實部和虛部:
real
,imag
屬性 - 獲得共軛複數:
conjugate()
方法 - 獲取絕對值(幅度):
abs()
功能(例如數學、編程、編程) - 獲得偏角(相位):
math
,cmath
模塊 - 極坐標變換(極坐標形式表示):
math
,cmath
模塊 - 複數的計算(求積、冪、平方根)
生成複雜變量
用 j 表示虛數單位並寫下以下內容,注意它不是 i。
c = 3 + 4j
print(c)
print(type(c))
# (3+4j)
# <class 'complex'>
如果虛部是 1,省略它會導致 NameError。如果首先定義了名為 j 的變量,則認為它是該變量。
1j
應以這種方式明確說明。
# c = 3 + j
# NameError: name 'j' is not defined
c = 3 + 1j
print(c)
# (3+1j)
如果實部為 0,則可以省略。
c = 3j
print(c)
# 3j
如果要將虛部為 0 的值定義為複复類型,請顯式寫入 0。如下所述,可以在復數類型和整數類型或浮點類型之間執行操作。
c = 3 + 0j
print(c)
# (3+0j)
實部和虛部可以指定為浮點浮點類型。指數符號也是可以接受的。
c = 1.2e3 + 3j
print(c)
# (1200+3j)
它也可以由“complex”類型的構造函數生成,如“complex(real part, imaginary part)”。
c = complex(3, 4)
print(c)
print(type(c))
# (3+4j)
# <class 'complex'>
獲取複數的實部和虛部:real,imag屬性
複數複數類型的實部和虛部可以分別用 real 和 imag 屬性獲得。兩者都是浮點浮點類型。
c = 3 + 4j
print(c.real)
print(type(c.real))
# 3.0
# <class 'float'>
print(c.imag)
print(type(c.imag))
# 4.0
# <class 'float'>
它是只讀的,不能更改。
# c.real = 5.5
# AttributeError: readonly attribute
獲得共軛複數:conjugate()
要獲得共軛複數,請使用 conjugate() 方法。
c = 3 + 4j
print(c.conjugate())
# (3-4j)
獲取複數的絕對值(大小):abs()
要獲得複數的絕對值(大小),請使用內置函數 abs()。
c = 3 + 4j
print(abs(c))
# 5.0
c = 1 + 1j
print(abs(c))
# 1.4142135623730951
獲得複數的偏角(相位):math,cmath模塊
要獲得複數的偏角(相位),請使用 math 或 cmath 模塊。
cmath 模塊是複數的數學函數模塊。
它可以使用定義的反正切函數 math.atan2() 來計算,或者使用 cmath.phase(),它返回偏角(相位)。
import cmath
import math
c = 1 + 1j
print(math.atan2(c.imag, c.real))
# 0.7853981633974483
print(cmath.phase(c))
# 0.7853981633974483
print(cmath.phase(c) == math.atan2(c.imag, c.real))
# True
在這兩種情況下,可以獲得的角度單位都是弧度。要轉換為度數,請使用 math.degrees()。
print(math.degrees(cmath.phase(c)))
# 45.0
複數的極坐標變換(極坐標形式表示):math,cmath模塊
如上所述,可以得到復數的絕對值(幅度)和偏角(相位),但是使用 cmath.polar() 可以將它們一起作為(絕對值,偏角)元組獲得。
c = 1 + 1j
print(cmath.polar(c))
print(type(cmath.polar(c)))
# (1.4142135623730951, 0.7853981633974483)
# <class 'tuple'>
print(cmath.polar(c)[0] == abs(c))
# True
print(cmath.polar(c)[1] == cmath.phase(c))
# True
使用 cmath.rect() 完成從極坐標到笛卡爾坐標的轉換。 cmath.rect(absolute value, deviation) 和類似的參數可用於獲取等價的 complex complex 類型的值。
print(cmath.rect(1, 1))
# (0.5403023058681398+0.8414709848078965j)
print(cmath.rect(1, 0))
# (1+0j)
print(cmath.rect(cmath.polar(c)[0], cmath.polar(c)[1]))
# (1.0000000000000002+1j)
實部和虛部等價於 cosine math.cos() 和 sine math.sin() 從絕對值和偏角計算的結果。
r = 2
ph = math.pi
print(cmath.rect(r, ph).real == r * math.cos(ph))
# True
print(cmath.rect(r, ph).imag == r * math.sin(ph))
# True
複數的計算(求積、冪、平方根)
可以使用通常的算術運算符執行四種算術運算和冪計算。
c1 = 3 + 4j
c2 = 2 - 1j
print(c1 + c2)
# (5+3j)
print(c1 - c2)
# (1+5j)
print(c1 * c2)
# (10+5j)
print(c1 / c2)
# (0.4+2.2j)
print(c1 ** 3)
# (-117+44j)
平方根可以用 **0.5 計算,但會引入誤差。 cmath.sqrt() 可用於計算精確值。
print((-3 + 4j) ** 0.5)
# (1.0000000000000002+2j)
print((-1) ** 0.5)
# (6.123233995736766e-17+1j)
print(cmath.sqrt(-3 + 4j))
# (1+2j)
print(cmath.sqrt(-1))
# 1j
它還可以執行複雜類型、int 類型和 float 類型的算術運算。
print(c1 + 3)
# (6+4j)
print(c1 * 0.5)
# (1.5+2j)