cmath
--- 複數數學函式¶
此模組提供了對複數數學函式的訪問。 此模組中的函式接受整數、浮點數或複數作為引數。 它們也接受任何具有 __complex__()
或 __float__()
方法的 Python 物件:這些方法分別用於將物件轉換為複數或浮點數,然後將函式應用於轉換結果。
備註
對於涉及分支切割的函式,我們需要決定如何在切割本身上定義這些函式。 遵循 Kahan 的論文 “Branch cuts for complex elementary functions” 以及 C99 及更高 C 標準的附錄 G,我們使用零的符號來區分分支切割的一側與另一側:對於沿(部分)實軸的分支切割,我們看虛部的符號;而對於沿虛軸的分支切割,我們看實部的符號。
例如,cmath.sqrt()
函式有一個沿負實軸的分支切割。 引數 -2-0j
被視為位於分支切割的*下方*,因此結果位於負虛軸上
>>> cmath.sqrt(-2-0j)
-1.4142135623730951j
但引數 -2+0j
被視為位於分支切割的上方
>>> cmath.sqrt(-2+0j)
1.4142135623730951j
與極座標之間的轉換 |
|
返回 z 的相位 |
|
返回 z 在極座標中的表示 |
|
返回極座標為 r 和 phi 的複數 z |
|
冪函式和對數函式 |
|
返回 e 的 z 次冪 |
|
返回 z 以給定 base 為底的對數(預設為 e) |
|
返回 z 以 10 為底的對數 |
|
返回 z 的平方根 |
|
三角函式 |
|
返回 z 的反餘弦 |
|
返回 z 的反正弦 |
|
返回 z 的反正切 |
|
返回 z 的餘弦 |
|
返回 z 的正弦 |
|
返回 z 的正切 |
|
雙曲函式 |
|
返回 z 的反雙曲餘弦 |
|
返回 z 的反雙曲正弦 |
|
返回 z 的反雙曲正切 |
|
返回 z 的雙曲餘弦 |
|
返回 z 的雙曲正弦 |
|
返回 z 的雙曲正切 |
|
分類函式 |
|
檢查 z 的所有分量是否都為有限值 |
|
檢查 z 的任一分量是否為無窮大 |
|
檢查 z 的任一分量是否為 NaN |
|
檢查值 a 和 b 是否彼此接近 |
|
常量 |
|
π = 3.141592… |
|
e = 2.718281… |
|
τ = 2π = 6.283185… |
|
正無窮大 |
|
純虛數無窮大 |
|
“非數值”(NaN) |
|
純虛數 NaN |
與極座標之間的轉換¶
一個 Python 複數 z
在內部是使用*直角座標*或*笛卡爾座標*來儲存的。 它完全由它的*實部* z.real
和*虛部* z.imag
來確定。
極座標提供了表示複數的另一種方式。 在極座標中,一個複數 z 由模 r 和相位角 phi 定義。 模 r 是 z 到原點的距離,而相位 phi 是從正 x 軸到連線原點和 z 的線段的逆時針角,以弧度為單位。
以下函式可用於在本機直角座標和極座標之間來回轉換。
- cmath.phase(z)¶
返回 z 的相位(也稱為 z 的*輻角*),型別為浮點數。
phase(z)
等價於math.atan2(z.imag, z.real)
。 結果的範圍在 [-π, π] 之間,此操作的分支切割沿負實軸。 結果的符號與z.imag
的符號相同,即使z.imag
為零也是如此。>>> phase(-1+0j) 3.141592653589793 >>> phase(-1-0j) -3.141592653589793
- cmath.polar(z)¶
返回 z 在極座標中的表示。 返回一個數對
(r, phi)
,其中 r 是 z 的模,phi 是 z 的相位。polar(z)
等價於(abs(z), phase(z))
。
- cmath.rect(r, phi)¶
返回極座標為 r 和 phi 的複數 z。 等價於
complex(r * math.cos(phi), r * math.sin(phi))
。
冪函式與對數函式¶
- cmath.exp(z)¶
返回 e 的 z 次冪,其中 e 是自然對數的底。
- cmath.log(z[, base])¶
返回 z 以給定 base 為底的對數。 如果未指定 base,則返回 z 的自然對數。 有一個分支切割,從 0 沿負實軸到 -∞。
三角函式¶
- cmath.acos(z)¶
返回 z 的反餘弦。 有兩個分支切割:一個從 1 沿實軸向右延伸到 ∞。 另一個從 -1 沿實軸向左延伸到 -∞。
- cmath.atan(z)¶
返回 z 的反正切。 有兩個分支切割:一個從
1j
沿虛軸延伸到∞j
。 另一個從-1j
沿虛軸延伸到-∞j
。
- cmath.cos(z)¶
返回 z 的餘弦。
- cmath.sin(z)¶
返回 z 的正弦。
- cmath.tan(z)¶
返回 z 的正切。
雙曲函式¶
- cmath.acosh(z)¶
返回 z 的反雙曲餘弦。 有一個分支切割,從 1 沿實軸向左延伸到 -∞。
- cmath.asinh(z)¶
返回 z 的反雙曲正弦。 有兩個分支切割:一個從
1j
沿虛軸延伸到∞j
。 另一個從-1j
沿虛軸延伸到-∞j
。
- cmath.atanh(z)¶
返回 z 的反雙曲正切。 有兩個分支切割:一個從
1
沿實軸延伸到∞
。 另一個從-1
沿實軸延伸到-∞
。
- cmath.cosh(z)¶
返回 z 的雙曲餘弦。
- cmath.sinh(z)¶
返回 z 的雙曲正弦。
- cmath.tanh(z)¶
返回 z 的雙曲正切。
分類函式¶
- cmath.isfinite(z)¶
如果 z 的實部和虛部都是有限的,則返回
True
,否則返回False
。在 3.2 版本加入。
- cmath.isinf(z)¶
如果 z 的實部或虛部是無窮大,則返回
True
,否則返回False
。
- cmath.isnan(z)¶
如果 z 的實部或虛部是 NaN,則返回
True
,否則返回False
。
- cmath.isclose(a, b, *, rel_tol=1e-09, abs_tol=0.0)¶
如果 a 和 b 的值彼此接近,則返回
True
,否則返回False
。兩個值是否被視為接近,是根據給定的絕對和相對容差來確定的。 如果沒有發生錯誤,結果將是:
abs(a-b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol)
。rel_tol 是相對容差 -- 它是 a 和 b 之間允許的最大差值,相對於 a 或 b 的較大絕對值。例如,要設定 5% 的容差,請傳遞
rel_tol=0.05
。預設容差為1e-09
,可確保兩個值在大約 9 位十進位制數字內相同。rel_tol 必須為非負數且小於1.0
。abs_tol 是絕對容差;它預設為
0.0
並且必須為非負數。 當將x
與0.0
比較時,isclose(x, 0)
計算為abs(x) <= rel_tol * abs(x)
,對於任何x
和小於1.0
的 rel_tol,結果為False
。因此,請在呼叫中新增一個適當的正 abs_tol 引數。IEEE 754 特殊值
NaN
、inf
和-inf
將根據 IEEE 規則進行處理。 具體來說,NaN
不被認為接近任何其他值,包括NaN
。inf
和-inf
只被認為接近它們自己。在 3.5 版本加入。
參見
PEP 485 -- 用於測試近似相等性的函式
常量¶
- cmath.pi¶
數學常數 π,型別為浮點數。
- cmath.e¶
數學常數 e,型別為浮點數。
- cmath.tau¶
數學常數 τ,型別為浮點數。
在 3.6 版本加入。
- cmath.inf¶
浮點數正無窮大。 等價於
float('inf')
。在 3.6 版本加入。
- cmath.infj¶
實部為零、虛部為正無窮大的複數。 等價於
complex(0.0, float('inf'))
。在 3.6 版本加入。
- cmath.nanj¶
實部為零、虛部為 NaN 的複數。 等價於
complex(0.0, float('nan'))
。在 3.6 版本加入。
請注意,函式的選擇與 math
模組中的函式相似,但不完全相同。 存在兩個模組的原因是,一些使用者對複數不感興趣,甚至可能不知道複數是什麼。 他們寧願讓 math.sqrt(-1)
引發異常,也不願讓它返回一個複數。 還要注意,cmath
中定義的函式總是返回一個複數,即使答案可以表示為實數(在這種情況下,複數的虛部為零)。
關於分支切割的說明:它們是給定函式不連續的曲線。 它們是許多複雜函式的必要特徵。 假定如果您需要使用複數函式進行計算,您將瞭解分支切割。 請查閱幾乎任何(不太基礎的)有關復變數的書籍以獲得啟發。 有關為數值目的正確選擇分支切割的資訊,一個好的參考應該是以下內容
參見
Kahan, W: Branch cuts for complex elementary functions; or, Much ado about nothing's sign bit. In Iserles, A., and Powell, M. (eds.), The state of the art in numerical analysis. Clarendon Press (1987) pp165–211.