编写大数组合的matlab程序

编写大数组合的matlab程序,matlab,combinations,Matlab,Combinations,因为对于matlab回复NaN时的大数组合,任务是编写一个程序来计算每次90个对象的200个对象的组合。一旦这起作用,我们将把它变成一个函数y=comb(n,k) 这是我到目前为止所做的,基于一个例子,我们给出了一个班级中两个人生日相同的概率 例如: nMax = 70; %maximum number of people in classroom nArray = 1:nMax; prevPnot = 1; %initialize probability for iN = 1:nM

因为对于matlab回复
NaN
时的大数组合,任务是编写一个程序来计算每次90个对象的
200个对象的组合。一旦这起作用,我们将把它变成一个函数
y=comb(n,k

这是我到目前为止所做的,基于一个例子,我们给出了一个班级中两个人生日相同的概率

例如:

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
我写的循环的要点是分开每个术语 i、 e.
n/k*(n-k)
,times
(n-counter)/(k-counter)*(n-k-counter)
,等等。
我也不完全确定如何将循环保存为matlab中的函数。

要计算每次获取
k
n
对象的组合数,可以使用计算阶乘的对数,以避免溢出:

result = exp(gammaln(n+1)-gammaln(k+1)-gammaln(n-k+1));
另一种方法是删除将取消的项,然后计算结果:

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

难道你不能先用matlab的
阶乘函数看看你是否得到了正确的答案,然后用你自己的阶乘函数代替它吗。