编写大数组合的matlab程序
因为对于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
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的
阶乘函数看看你是否得到了正确的答案,然后用你自己的阶乘函数代替它吗。