factorialk#
- scipy.special.factorialk(n, k, exact=False, extend='zero')[source]#
n 階 multifactorial,n(!!…!).
這是跳過 k 值的 n 階 multifactorial。例如,
factorialk(17, 4) = 17!!!! = 17 * 13 * 9 * 5 * 1
特別是,對於任何整數
n
,我們有factorialk(n, 1) = factorial(n)
factorialk(n, 2) = factorial2(n)
- 參數:
- nint 或 float 或 complex(或 array_like)
multifactorial 的輸入值。非整數值需要
extend='complex'
。預設情況下,n < 0
的回傳值為 0。- nint 或 float 或 complex(或 array_like)
multifactorial 的階數。非整數值需要
extend='complex'
。- exactbool,optional
如果
exact
設定為 True,則使用整數算術精確計算答案,否則使用近似值(較快,但會產生浮點數而不是整數)。預設值為 False。- extendstring,optional
可以是
'zero'
或'complex'
;這決定如何處理n<0
的值 - 預設情況下它們是 0,但可以選擇加入 multifactorial 的複數擴展。這使得不僅可以傳遞複數值給n
,也可以傳遞給k
。警告
使用
'complex'
擴展也會更改整數n != 1 (mod k)
處的 multifactorial 值,更改的因子取決於k
和n % k
,請參閱下方或 [1]。
- 回傳:
- nfint 或 float 或 complex 或 ndarray
n 的 multifactorial(階數
k
),以整數、浮點數或複數形式回傳(取決於exact
和extend
)。陣列輸入會以陣列形式回傳。
註解
雖然不如雙階乘那麼直接,但可以通過研究給定餘數
r < k
的n
(因此n = m * k + r
,或r = n % k
),來計算n!(k)
的通用近似公式,這可以組合在一起成為對所有整數值n >= 0
和k > 0
都有效的方法n!(k) = k ** ((n - r)/k) * gamma(n/k + 1) / gamma(r/k + 1) * max(r, 1)
這是當
exact=False
時近似值的基礎。原則上,任何固定的
r
選擇(忽略其與n
的關係r = n%k
)都會提供從整數n
到複數z
的合適解析延拓(不僅滿足函數方程,而且是對數凸函數,參見 Bohr-Mollerup 定理)——事實上,上面r
的選擇只會將函數更改一個常數因子。確定規範延拓的最終約束是f(1) = 1
,這迫使r = 1
(另請參閱 [1])。z!(k) = k ** ((z - 1)/k) * gamma(z/k + 1) / gamma(1/k + 1)
參考文獻
[1]multifactorial 的複數擴展 https://en.wikipedia.org/wiki/Double_factorial#Alternative_extension_of_the_multifactorial
範例
>>> from scipy.special import factorialk >>> factorialk(5, k=1, exact=True) 120 >>> factorialk(5, k=3, exact=True) 10 >>> factorialk([5, 7, 9], k=3, exact=True) array([ 10, 28, 162]) >>> factorialk([5, 7, 9], k=3, exact=False) array([ 10., 28., 162.])