1
我想找到下面簡單的組合公式在Matlab如何在Matlab中計算大型組合函數?
(nchoosek(n,j) * nchoosek(j,k) * nchoose(n-j,i-k))/(nchoose(n,i)*nchoose(n,j))
但我的參數是大Matlab的返回天道酬勤的結果。有沒有人知道可以爲我計算這個公式的函數或工具?
我想找到下面簡單的組合公式在Matlab如何在Matlab中計算大型組合函數?
(nchoosek(n,j) * nchoosek(j,k) * nchoose(n-j,i-k))/(nchoose(n,i)*nchoose(n,j))
但我的參數是大Matlab的返回天道酬勤的結果。有沒有人知道可以爲我計算這個公式的函數或工具?
對於每一個組合數,說
nchoosek(n,j)
使用以下代替:
exp(gammaln(n+1)-gammaln(j+1)-gammaln(n-j+1))
的想法是用對數合作,以避免溢出,並採取指數在年底。這依賴於可以通過gammaln
直接計算的因數的事實。
由於您的表達式涉及多個術語,因此最好儘可能長時間保留在對數域中,並且最後只能使用exp
一次。例如,
nchoosek(n,j) * nchoosek(j,k)
將成爲
exp(gammaln(n+1)-gammaln(j+1)-gammaln(n-j+1) ...
+ gammaln(j+1)-gammaln(k+1)-gammaln(j-k+1))
作爲一個方面說明,在特定情況下,你可以申請一些簡化。例如,nchoosek(n,j)
出現在分子和分母中。