%% (2)代码部分(在成功的条件下的概率) n = 100000; % n代表蒙特卡罗模拟重复次数 a = 0; % a表示不改变主意时能赢得汽车的次数 b = 0; % b表示改变主意时能赢得汽车的次数 fori= 1 : n % 开始模拟n次 x = randi([1,3]); % 随机生成一个1-3之间的整数x表示汽车出现在第x扇门后 y = randi([1,3]); % 随机生成一个1-3之间的整数y表示自己选的门 % 下面分为两种情况讨论:x=y和x~=y if x == y % 如果x和y相同,那么我们只有不改变主意时才能赢 a = a + 1; b = b + 0; else% x ~= y ,如果x和y不同,那么我们只有改变主意时才能赢 a = a + 0; b = b +1; end end disp(['蒙特卡罗方法得到的不改变主意时的获奖概率为:', num2str(a/n)]); disp(['蒙特卡罗方法得到的改变主意时的获奖概率为:', num2str(b/n)]);
%% (3)考虑失败情况的代码(无条件概率) n = 100000; % n代表蒙特卡罗模拟重复次数 a = 0; % a表示不改变主意时能赢得汽车的次数 b = 0; % b表示改变主意时能赢得汽车的次数 c = 0; % c表示没有获奖的次数 fori= 1 : n % 开始模拟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)]);