用matlab写出这样的函数“给出n个人(n<365)至少有两个人在同一天的概率的计算机上机模拟程序”

如题所述

这哪是什么模拟程序啊。。。

所谓模拟程序就是“计算机仿真”,就是要让计算机产生随机数作为生日,来模拟实际情况,进而统计概率。

上面两位根本就是用电脑在运算嘛,根本不是模拟啊。

看我的。
******************************************************
n = 50; %有50个人
TestTime = 1000; %总共模拟1000次,模拟次数越多,结论越准确
SamebirthdayTime = 0; %看模拟的1000次中,有几次是“有相同生日”的情况,初值先设为0

for loop = 1:TestTime %模拟开始
birthday = floor(rand(1,n)*365); %用计算机产生n个随机数,作为n个人的生日
birthday = sort(birthday); %将生日从小到大排序
for i=1:n-1
flag = birthday(i)-birthday(i+1); %看排序后相邻有没有相同的数
if flag == 0 %如果有,就说明此次模拟出现了“有相同生日”的情况
SamebirthdayTime = SamebirthdayTime + 1;
break
end
end
end

P = SamebirthdayTime/TestTime; %算出最终概率

***************************************************
楼主可以运行一下,n=50的时候,模拟出来应该是97%左右,与概率论计算结果是符合的。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-11-03
function p=property(n)
a=1;
for i=0:n-1
a=a*(365-i)/365;
end
p=1-a;

输入n,p为所求概率。

注意:n增大时,a减小,当a减小到一定值时,由于matlab的精度问题,p=1-a会取恒值1。
第2个回答  2009-11-03
>>n=365;
m=2:n;
temp=1;
for i=1:length(m)
temp=temp*(n-i)/n;
p(i)=1-temp;
end
plot(m,p)