【原创】matlab模拟N个人生日相同的概率
纯粹是小程序,顺带熟悉几个matlab的函数。让各位见笑了。背景:已知某次舞会有30人参加,请问这30人中存在生日相同(仅指月份,不考虑年份)的概率有多大。
matlab模拟程序:用随机数模拟出birthday数组,数组中若存在相同元素,则表示这30人存在生日相同的情况。
count=0; %总共进行1000次试验, count用来计数存在生日相同情况的数目。
for i=1:1000
birthday=round(365*rand(1,30));
if length(unique(birthday))<30 %用unique函数来判断是否存在相同元素
count=count+1;
end
end
理论解:根据概率论的知识,这30人存在生日相同的情况的概率=1-(365!/(365-30)!)/(365^30)=0.7左右
如果直接用 factorial(365)/(factorial(335)*365^30),由于计算中牵扯的数字太大,在matlab中算不出来。其实
(365!/(365-30)!)/(365^30)=(365/365)*(364/365)*(363/365)*....*(336/365)
等式右边可以用matlab计算
p=1;
for i=1:29
p=p*(365-i)/365;
end
p=1-p;
上述计算结果可看出,p=0.7左右,跟试验模拟的结果很接近。
页:
[1]