(模拟重复一亿次)
三门问题(Monty Hall problem)亦称为蒙提霍尔问题、蒙特霍问题或蒙提霍尔悖论,大致出自美国的电视游戏节目Let's Make a Deal。问题名字来自该节目的主持人蒙提·霍尔(Monty Hall)。参赛者会看见三扇关闭了的门,其中一扇的后面有一辆汽车,选中后面有车的那扇门可赢得该汽车,另外两扇门后面则各藏有一只山羊。当参赛者选定了一扇门,但未去开启它的时候,节目主持人开启剩下两扇门的其中一扇,露出其中一只山羊。主持人其后会问参赛者要不要换另一扇仍然关上的门。问题是:换另一扇门是否会增加参赛者赢得汽车的机率。如果严格按照上述的条件,那么答案是会。不换门的话,赢得汽车的几率是1/3。换门的话,赢得汽车的几率是2/3。
(来源于百度百科)
(1)预备知识
% randi([a,b],m,n)函数可在指定区间[a,b]内随机取出大小为m*n的整数矩阵
% randi([1,5]) %在区间[1,5]内随机取出1个整数
% 字符串的连接方式:(1)['字符串1','字符串2'] (2)strcat('字符串1','字符串2')
% num2str函数:将数值转换为字符串,通常方便输出
disp([num2str(111),'你好'])
%假设改变主意是随机的
(2)蒙特卡罗用于模拟三门问题
n = 100000000; % n代表蒙特卡罗模拟重复一亿次
a = 0; % 不改变主意时能赢得汽车的次数
b = 0; % 改变主意时能赢得汽车的次数
c = 0; % 没有获奖的次数
for i= 1 : n
x = randi([1,3]); % 随机生成一个1-3之间的整数x表示汽车出现在第x扇门后
y = randi([1,3]); % 随机生成一个1-3之间的整数y表示自己选的门
change = randi([0, 1]); % change =0 不改变主意,change = 1 改变主意
% 下面分为两种情况讨论:x=y和x~=y
if x == y % 如果x和y相同,那么我们只有不改变主意时才能赢
if change == 0 % 不改变主意
a = a + 1;
else % 改变了主意
c= c+1;
end
else % x ~= y ,如果x和y不同,那么我们只有改变主意时才能赢
if change == 0 %不改变主意
c = c + 1;
else % 改变了主意
b= b + 1;
end
end
end
disp(['蒙特卡罗方法得到的不改变主意时的获奖概率为:', num2str(a/n)]);
disp(['蒙特卡罗方法得到的改变主意时的获奖概率为:', num2str(b/n)]);
disp(['蒙特卡罗方法得到的没有获奖的概率为:', num2str(c/n)]);
输出:
111你好
蒙特卡罗方法得到的不改变主意时的获奖概率为:0.1667
蒙特卡罗方法得到的改变主意时的获奖概率为:0.33333
蒙特卡罗方法得到的没有获奖的概率为:0.49997
可以看到,已经开了一个门,剩下两个们至少有一个们是大奖 所以获大奖概率为1/2,模拟结果符合实际,至于在获奖的前提下改变注意和不改变主意的获奖比例也是2:1也符合实际。