cmath
--- 複數的數學函式¶
本模組提供一些適用於複數的數學函式。本模組中的函式接受整數、浮點數或複數作為引數。它們也接受任何具有__complex__()
或__float__()
方法的 Python 物件:這些方法分別用於將物件轉換為複數或浮點數,然後再將函式應用於轉換後的結果。
備註
對於涉及分枝切割 (branch cut) 的函式,我們面臨的問題是決定如何定義在切割本身上的這些函式。遵循 Kahan 的論文 "Branch cuts for complex elementary functions",以及 C99 的附錄 G 和後來的 C 標準,我們使用零符號來區分分枝切割的兩側:對於沿著(一部分)實數軸的分枝切割,我們查看虛部的符號,而對於沿虛軸的分枝切割,我們則查看實部的符號。
例如cmath.sqrt()
函式具有一條沿負實軸的分枝切割。 引數complex(-2.0,-0.0)
被視為位於分枝切割下方 處理,因此給出的結果在負虛軸上:
>>>cmath.sqrt(complex(-2.0,-0.0))-1.4142135623730951j
但是引數complex(-2.0,0.0)
會被當成位於分枝切割上方處理:
>>>cmath.sqrt(complex(-2.0,0.0))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 的雙曲正切值。 | |
分類函數 | |
Check if all components ofz are finite | |
Check if any component ofz is infinite | |
Check if any component ofz is a NaN | |
檢查a 和b 的值是否接近 | |
常數 | |
π = 3.141592... | |
e = 2.718281... | |
τ = 2π = 6.283185... | |
Positive infinity | |
Pure imaginary infinity | |
"Not a number" (NaN) | |
Pure imaginary NaN |
轉換到極座標和從極座標做轉換¶
Python 複數z
是用直角坐標 或笛卡爾坐標 儲存在內部的。它完全是由其實部z.real
和虛部z.imag
所決定。
極座標 提供了另一種表示複數的方法。在極座標中,複數z 由絕對值 (modulus)r 和相位角 (phase)phi 定義。絕對值r 是從z 到原點的距離,而相位角phi 是從正 x 軸到連接原點到z 的線段的逆時針角度(以弧度為單位)。
以下的函式可用於原始直角座標與極座標之間的相互轉換。
- cmath.phase(z)¶
以浮點數的形式回傳z 的相位角(也稱為z 的引數 )。
phase(z)
等價於math.atan2(z.imag,z.real)
。結果將位於 [-π,π] 的範圍內,且此操作的分枝切割將位於負實軸上。結果的符號會與z.imag
的符號相同,即使z.imag
為零:>>>phase(complex(-1.0,0.0))3.141592653589793>>>phase(complex(-1.0,-0.0))-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
。兩數是否足夠接近取決於給定的絕對及相對容許偏差 (tolerance)。如果沒有錯誤發生,結果將為:
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 is the absolute tolerance; it defaults to
0.0
and it must benonnegative. When comparingx
to0.0
,isclose(x,0)
is computedasabs(x)<=rel_tol *abs(x)
, which isFalse
for anyx
andrel_tol less than1.0
. So add an appropriate positive abs_tol argumentto the call.定義於 IEEE 754 浮點標準中的特殊值
NaN
、inf
和-inf
會根據該標準處理。更明確地說,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.nan¶
浮點「非數字」 (NaN) 值。相當於
float('nan')
。在 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 aboutnothing's sign bit. In Iserles, A., and Powell, M. (eds.), The state of the artin numerical analysis. Clarendon Press (1987) pp165--211.