一、统计实验
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函数是去除相同的元素
end
rt=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;
end
end
p=m/n
运行结果
p =
0.5074
3,练习题
Matlab代码
%假设一年有365天,假设现场球迷年龄在18,80岁以内
PeopleNumber=22; %采访了22个人
Times=10000; %模拟次数
EqualNum=0; %正好两个人生日相同的次数
for i=1:Times
Year=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;
end
end
P=EqualNum/Times
运行结果
采访22人时:P = 0.0092
采访40人时:P = 0.0338
采访50人时:P = 0.0494
采访64人时:P = 0.0800
4,练习题
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;
end
end
P=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;
end
end
P=RightTimes/Times
运行结果
P =
0.0344
转载于:https://blog.51cto.com/12568495/2136852