题目:
1.A、B两国元首准备某天在禄口机场交换件重要文件,如果A国专机先到,会在机场等上一个小时,而如果B国专机先到会等上两个小时,两国专机只能在20点到24点降落在机场,且降落时间服从均匀分布,问两国能顺利交换文件的概率是多少。(假如交换文件不需要时间)
2.假如有了一个从自然数中随机取一个数的函数rand(7)——从0到7中随机取一个自然数出来,问如何用这个函数构造rand(10)——随机从0到10中取一个自然数出来。(提示:需要注意函数的分布,也可以用蒙特卡洛的方法)
解决思路:
第一题解决思路,均匀分布可以先进行坐标平移,便于画坐标轴。整个事件平移到X轴0~4,Y轴0~4的坐标轴上,根据题目给出的条件,画出函数。
字体有点草,大家可以自己试着做下。
第二题有人问为什么不直接取两个rand加运算,然后去除多出的部分,因为这样取的话得到的结果就不是均匀分布了。
我是用matlab验证了下,因为matlab对数值处理比较强大,所以比较直观,先用上诉方法写个函数:
function rs = rand_ten()
while i < 10
j=1;
a1(j) = randi([0 7]); %8进制高位
a2(j) = randi([0 7]); %8进制低位
rand_all(j) = a1(j)*8+a2(j);
if rand_all(j)<55
rs = rem(rand_all(j),11); %0~10d的自然数,包含0和10
break
end
j=j+1;
end
根据蒙特卡洛方法,取一万个数值验证概率分布情况。
b(1:8)=0;
for i =1:100000
a(i)=randi([0 7]);
for j = 0:7
if a(i) == j
b(j+1) = b(j+1)+1;
end
end
end
disp('rand(7)取值次数:')
b %rand函数服从均匀分布
ten_num(1:11) = 0;
for i =1:100000
test(i)=rand_ten();
for j = 0:10
if test(i) == j
ten_num(j+1) = ten_num(j+1)+1;
end
end
end
disp('rand(10)取值次数:')
ten_num %验证函数是否服从均匀分布
运行后得到如下结果:
图片可以看出matlab自带的rand函数是均匀分布的,通过rand函数构造的随机取0到10的函数也是均匀分布的。