为大数字组合编写matlab程序

时间:2014-02-14 02:05:01

标签: matlab combinations

因为对于matlab回复NaN的大数组合,分配是编写一个程序来计算200 objects taken 90 at a time的组合。一旦这个工作,我们将把它变成一个函数y = comb(n,k)。

这是我到目前为止基于一个例子,我们得到了一个班级中2个人有相同生日的可能性。

这是一个例子:

nMax     = 70; %maximum number of people in classroom
nArray   = 1:nMax;
prevPnot = 1; %initialize probability
for iN = 1:nMax
    Pnot     = prevPnot*(365-iN+1)/365; %probability that no birthdays are the same
    P(iN)    = 1-Pnot; %probability that at least two birthdays are the same
    prevPnot = Pnot;
end
plot(nArray, P, '.-')
xlabel('nb. of people')
ylabel('prob. that at least two have same birthday')
grid on

此时我遇到了麻烦,因为我对java比较熟悉。这就是我到目前为止所做的,而且根本就没有出来。

k = 90;
n = 200;
nArray = 1:k;
prevPnot = 1;
for counter = 1:k
Pnot = (n-counter+1)/(prevPnot*(n-k-counter+1);
P(iN) = Pnot;
prevPnot = Pnot;
end

我写的循环的要点是将每个术语分开 即n/k*(n-k),时间(n-counter)/(k-counter)*(n-k-counter),等等。 我也不完全确定如何将循环保存为matlab中的函数。

1 个答案:

答案 0 :(得分:1)

要计算一次nk个对象的组合数,可以使用gammaln来计算阶乘的对数,以避免溢出:

result = exp(gammaln(n+1)-gammaln(k+1)-gammaln(n-k+1));

另一种方法是删除将取消然后计算结果的术语:

result = prod((n-k+1:n)./(1:k));