本文共 2400 字,大约阅读时间需要 8 分钟。
1,电梯问题
Matlab代码:clc;clear all;close all;y=0;m=1000; %模拟次数r=10; %人数n=7; %层数for i=1:m u=rand(1,r); %产生r个0-1的均匀随机数 x=floor(u*n+1); %floor函数,向负无穷大方向取整 y(i)=length(unique(x)); %unique函数是去除相同的元素endrt=mean(y)
运行结果:
rt =5.7350
知识点:(1)Matlab中随机数的产生
rand()
生成(0,1)区间上均匀分布的随机变量。基本语法:
rand([M,N,P ...])
生成排列成MNP... 多维向量的随机数。如果只写M,则生成M*M矩阵;如果参数为[M,N]可以省略掉方括号。一些例子:
randn()
生成服从标准正态分布(均值为0,方差为1)的随机数。基本语法和rand()类似。
randn([M,N,P ...])
生成排列成MNP... 多维向量的随机数。如果只写M,则生成M*M矩阵;如果参数为[M,N]可以省略掉方括号。一些例子:
更详细的随机数的产生在http://blog.sina.com.cn/s/blog_7e7409e30100w6n9.html
(2)取整函数
fix-向零方向取整。round-向最近的方向取整。floor-向负无穷大方向取整ceil-向正无穷大方向取整。2,蒲丰投针实验
Matlab代码%蒲丰投针实验a=1; %平行直线间隔的一半l=0.8; %针长的一半n=100000; %模拟次数m=0; %针落在区域内的次数for i=1:n y(i)=rand(1); theta(i)=pi*rand(1); if(y(i)<=l*sin(theta(i))) m=m+1; endendp=m/n
运行结果
p =0.5074
3,练习题
Matlab代码%假设一年有365天,假设现场球迷年龄在18,80岁以内PeopleNumber=22; %采访了22个人Times=10000; %模拟次数EqualNum=0; %正好两个人生日相同的次数for i=1:TimesYear=2018-floor(rand(1,PeopleNumber)*(80-18))+18; %22个个人的出生年份Day=floor(rand(1,PeopleNumber)*364)+1; %22个人出生在哪一天N=365*Year+Day;Unequal=length(unique(N));%生日不相同的人数if(PeopleNumber-Unequal==1)%正好两个人生日相同的次数 EqualNum=EqualNum+1;endendP=EqualNum/Times
运行结果
采访22人时:P = 0.0092采访40人时:P = 0.0338采访50人时:P = 0.0494采访64人时:P = 0.08004,练习题
Matlab代码第一问Times=10000;%模拟次数RightTimes=0;%符合要求的次数N0=[0,0,0,1,1,1,1,1,1,1,1,1];%0为用过的,1为新的for i=1:Times Gain1=floor(rand(1,3)*11)+1;%第一次从框中拿球 Num1=N0(Gain1(1))+N0(Gain1(2))+N0(Gain1(3)); %第一次拿到新球的数量 N1=[0,0,0,1,1,1,1,1,1,1,1,1]; for j=4:4+Num1-1 N1(j)=0; %将用过的球置零 end Gain2=floor(rand(1,3)*11)+1;%第二次从框中拿球 Num2=N1(Gain2(1))+N1(Gain2(2))+N1(Gain2(3)); %第二次拿到新球的数量 if(Num2==3) RightTimes=RightTimes+1; endendP=RightTimes/Times
运行结果:
P =0.1508
第二问
Times=10000;%模拟次数RightTimes=0;%符合要求的次数N0=[0,0,0,1,1,1,1,1,1,1,1,1];%0为用过的,1为新的for i=1:Times Gain1=floor(rand(1,3)*11)+1;%第一次从框中拿球 Num1=N0(Gain1(1))+N0(Gain1(2))+N0(Gain1(3)); %第一次拿到新球的数量 N1=[0,0,0,1,1,1,1,1,1,1,1,1]; for j=4:4+Num1-1 N1(j)=0; %将用过的球置零 end Gain2=floor(rand(1,3)*11)+1;%第二次从框中拿球 Num2=N1(Gain2(1))+N1(Gain2(2))+N1(Gain2(3)); %第二次拿到新球的数量 if(Num2==3&&Num1==3) %第二次三个新球且第一次三个新球 RightTimes=RightTimes+1; endendP=RightTimes/Times
运行结果
P =
0.0344
转载于:https://blog.51cto.com/12568495/2136852