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

来源:百度知道 编辑:UC知道 时间:2024/05/03 00:10:10

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

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

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

看我的。
******************************************************
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%左右,与概率论计算结果是符合的。

function p=property(n)
a=1;
for i=0:n-1
a=a*(365-i)/365