2014-07-17 49 views
1

我想找到下面簡單的組合公式在Matlab如何在Matlab中計算大型組合函數?

(nchoosek(n,j) * nchoosek(j,k) * nchoose(n-j,i-k))/(nchoose(n,i)*nchoose(n,j)) 

但我的參數是大Matlab的返回天道酬勤的結果。有沒有人知道可以爲我計算這個公式的函數或工具?

回答

1

對於每一個組合數,說

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)出現在分子和分母中。