Python,用於處理複數的複雜類型(絕對值、偏角、極坐標變換等)

商業

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)
Copied title and URL