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

與極座標之間的轉換

phase(z)

返回 z 的相位

polar(z)

返回 z 在極座標中的表示

rect(r, phi)

返回極座標為 rphi 的複數 z

冪函式和對數函式

exp(z)

返回 ez 次冪

log(z[, base])

返回 z 以給定 base 為底的對數(預設為 e

log10(z)

返回 z 以 10 為底的對數

sqrt(z)

返回 z 的平方根

三角函式

acos(z)

返回 z 的反餘弦

asin(z)

返回 z 的反正弦

atan(z)

返回 z 的反正切

cos(z)

返回 z 的餘弦

sin(z)

返回 z 的正弦

tan(z)

返回 z 的正切

雙曲函式

acosh(z)

返回 z 的反雙曲餘弦

asinh(z)

返回 z 的反雙曲正弦

atanh(z)

返回 z 的反雙曲正切

cosh(z)

返回 z 的雙曲餘弦

sinh(z)

返回 z 的雙曲正弦

tanh(z)

返回 z 的雙曲正切

分類函式

isfinite(z)

檢查 z 的所有分量是否都為有限值

isinf(z)

檢查 z 的任一分量是否為無窮大

isnan(z)

檢查 z 的任一分量是否為 NaN

isclose(a, b, *, rel_tol, abs_tol)

檢查值 ab 是否彼此接近

常量

pi

π = 3.141592…

e

e = 2.718281…

tau

τ = 2π = 6.283185…

inf

正無窮大

infj

純虛數無窮大

nan

“非數值”(NaN)

nanj

純虛數 NaN

與極座標之間的轉換

一個 Python 複數 z 在內部是使用*直角座標*或*笛卡爾座標*來儲存的。 它完全由它的*實部* z.real 和*虛部* z.imag 來確定。

極座標提供了表示複數的另一種方式。 在極座標中,一個複數 z 由模 r 和相位角 phi 定義。 模 rz 到原點的距離,而相位 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

備註

複數 z 的模(絕對值)可以使用內建的 abs() 函式計算。 cmath 模組中沒有單獨的函式用於此操作。

cmath.polar(z)

返回 z 在極座標中的表示。 返回一個數對 (r, phi),其中 rz 的模,phiz 的相位。 polar(z) 等價於 (abs(z), phase(z))

cmath.rect(r, phi)

返回極座標為 rphi 的複數 z。 等價於 complex(r * math.cos(phi), r * math.sin(phi))

冪函式與對數函式

cmath.exp(z)

返回 ez 次冪,其中 e 是自然對數的底。

cmath.log(z[, base])

返回 z 以給定 base 為底的對數。 如果未指定 base,則返回 z 的自然對數。 有一個分支切割,從 0 沿負實軸到 -∞。

cmath.log10(z)

返回 z 以 10 為底的對數。 它具有與 log() 相同的分支切割。

cmath.sqrt(z)

返回 z 的平方根。 它具有與 log() 相同的分支切割。

三角函式

cmath.acos(z)

返回 z 的反餘弦。 有兩個分支切割:一個從 1 沿實軸向右延伸到 ∞。 另一個從 -1 沿實軸向左延伸到 -∞。

cmath.asin(z)

返回 z 的反正弦。 它具有與 acos() 相同的分支切割。

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)

如果 ab 的值彼此接近,則返回 True,否則返回 False

兩個值是否被視為接近,是根據給定的絕對和相對容差來確定的。 如果沒有發生錯誤,結果將是: abs(a-b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol)

rel_tol 是相對容差 -- 它是 ab 之間允許的最大差值,相對於 ab 的較大絕對值。例如,要設定 5% 的容差,請傳遞 rel_tol=0.05。預設容差為 1e-09,可確保兩個值在大約 9 位十進位制數字內相同。rel_tol 必須為非負數且小於 1.0

abs_tol 是絕對容差;它預設為 0.0 並且必須為非負數。 當將 x0.0 比較時,isclose(x, 0) 計算為 abs(x) <= rel_tol  * abs(x),對於任何 x 和小於 1.0 的 rel_tol,結果為 False。因此,請在呼叫中新增一個適當的正 abs_tol 引數。

IEEE 754 特殊值 NaNinf-inf 將根據 IEEE 規則進行處理。 具體來說,NaN 不被認為接近任何其他值,包括 NaNinf-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')。 另請參閱 math.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 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.