你好,考试题,请自己回答,这样更能学习进步哦
关键点:1 unifrnd 产生随机矩阵 floor 取小数整数部分 所以是1到365.9999999999999而不是1到365
2 看每组相同 是 先从小到大排序 再相邻比较,并记录相同的数 ,再在未排序矩阵找到 标红
%%【6】(10分,生日问题)
% 40人的一个班至少有2人生日相同的概率模拟。
% (1)对n=40人的一个班,每次实验,产生1-365之间的整数均匀分布的随机数,如果有相
% 同的数,则标记为1,没有就标记为0:
% (2)上面图显示每次实验的40个数据,重复的数据显示为红色:
% (3)在N=40次实验中,记录标记为1的个数,就是“有生日相同”的频数:
% (4)下面的图显示理论概率(一条横线)和实际的频率(折线),观察频率的变化趋势。
% 运行结果:
%%
subplot(2,1,1);
%人数
PerN = 40;
%次数
N =40;
A = floor(unifrnd(1,365.99999999999,PerN,N));
B = sort(A);
%有相同生日
C = zeros(N,1);
C = C';
Csame = zeros(N,1);
Csame = Csame';
for i=1:1: N
for j=1:1: PerN-1
if(B(j,i)==B(j+1,i))
C(1,i) = 1;
Csame(1,i) = (B(j,i));
break;
end
end
end
plot(1:1:41,1:1:41,'wo');
hold on;
for i=1:1:40
for j=1:1:40
if(A(i,j)==Csame(j))
text(j,i,num2str(A(i,j)),'Color','red');
else
text(j,i,num2str(A(i,j)));
end
end
end
xlabel('次数');
ylabel('人编号');
%40次中为1的个数
OneCount = sum(C);
subplot(2,1,2);
%横向纵轴理论数
GaiLi = 1/365*1/365;
GaiLi = repmat(GaiLi,1,40);
plot(1:1:40,GaiLi);
hold on;
plot(1:1:40,C);
legend(['有相同理论概率: ',num2str(1/365*1/365)],'实际有相同频率');