关于#matlab#的题目,请各位专家解答!

img

你好,考试题,请自己回答,这样更能学习进步哦

关键点: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)],'实际有相同频率');

img

img