cmath --- 複數的數學函式¶
本模組提供一些適用於複數的數學函式。本模組中的函式接受整數、浮點數或複數作為引數。它們也接受任何具有__complex__() 或__float__() 方法的 Python 物件:這些方法分別用於將物件轉換為複數或浮點數,然後再將函式應用於轉換後的結果。
備註
對於涉及分枝切割 (branch cut) 的函式,我們面臨的問題是決定如何定義在切割本身上的這些函式。遵循 Kahan 的論文 "Branch cuts for complex elementary functions",以及 C99 的附錄 G 和後來的 C 標準,我們使用零符號來區分分枝切割的兩側:對於沿著(一部分)實數軸的分枝切割,我們查看虛部的符號,而對於沿虛軸的分枝切割,我們則查看實部的符號。
例如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 的雙曲正切值。 | |
分類函數 | |
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(-1+0j)3.141592653589793>>>phase(-1-0j)-3.141592653589793
備註
The modulus (absolute value) of a complex numberz can becomputed using the built-inabs() function. There is noseparatecmath module function for this operation.
- 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.0and it must benonnegative. When comparingxto0.0,isclose(x,0)is computedasabs(x)<=rel_tol *abs(x), which isFalsefor anyxandrel_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.nanj¶
實部為零和虛部為 NaN 的複數。相當於
complex(0.0,float('nan'))。在 3.6 版被加入.
Note that the selection of functions is similar, but not identical, to that inmodulemath. The reason for having two modules is that some users aren'tinterested in complex numbers, and perhaps don't even know what they are. Theywould rather havemath.sqrt(-1) raise an exception than return a complexnumber. Also note that the functions defined incmath always return acomplex number, even if the answer can be expressed as a real number (in whichcase the complex number has an imaginary part of zero).
關於分枝切割的註釋:它們是沿著給定的不連續函式的曲線。它們是許多複變函數的必要特徵。假設你需要使用複變函數進行計算,你將會了解分枝切割的概念。請參閱幾乎所有關於複變函數的(不是太初級的)書籍以獲得啟發。對於如何正確地基於數值目的選擇分枝切割的相關訊息,以下內容應該是一個很好的參考:
也參考
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.