由Entailed代數基本定理是存在N個復數根為式Z ^ N = A,其中a是實數,n是正整數,和z是復數。除了復數之外,一些根也將是實數(即 a bi,其中 b=0)。
有多個實根的一個例子是 z^2=1,我們得到 z = ±sqrt(1) = ± 1。解 z = 1 是立即的。解 z = -1 由 z = sqrt(1) = sqrt(-1 * -1) = I * I = -1 得到,其中 I 是虛數單位。
在 Python/NumPy(以及許多其他編程語言和包)中,只回傳一個值。下面是 5^{1/3} 的兩個例子,它有 3 個根。
>>> 5 ** (1 / 3)
1.7099759466766968
>>> import numpy as np
>>> np.power(5, 1/3)
1.7099759466766968
對于我的用例來說,只回傳一個可能的根不是問題,但是知道在 Python 和 NumPy 的背景關系中系統地計算了“哪個”根將是有益的。也許有一個(ISO)標準說明應該回傳哪個根,或者可能有一個常用的演算法恰好回傳一個特定的根。我想象過一個等價類,例如“實值解的最大值”,但我不知道。
問題:當我在 Python 和 NumPy 中取第 n 個根時,我實際上得到了 n 個現有根中的哪一個?
uj5u.com熱心網友回復:
由于通常使用標識 x? = exp(a?log(x)) 來定義一般冪,因此您將獲得與復數對數的所選分支切割相對應的根。
關于這一點,numpy 檔案說:
對于實值輸入資料型別,log 始終回傳實數輸出。對于每個不能表示為實數或無窮大的值,它產生 nan 并設定無效浮點錯誤標志。
對于復數值輸入,log 是一個復雜的決議函式,它有一個分支切割 [-inf, 0] 并且從上面是連續的。log 將浮點負零作為無窮小的負數處理,符合 C99 標準。
例如,np.power(-1 0j, 1/3) = 0.5 0.866j = np.exp(np.log(-1 0j)/3).
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/312886.html
