目录
前言
蒙特卡罗方法又称统计模拟法,是一种随机模拟方法,以概率和统计理论方法为基础的一种计算方法,是使用随机数(或更常见的伪随机数)来解决很多计算问题的方法。将所求解的问题同一定的概率模型相联系,用电子计算机实现统计模拟或抽样,以获得问题的近似解。为象征性地表明这一方法的概率统计特征,故借用赌城蒙特卡罗命名。
一、基础知识————matlab随机函数
1.rand(m,n)
rand(m,n)函数产生由在[0,1]之间均匀分布的随机数组成的m行n列的矩阵
rand(3) % 若只给一个输入,则会生成一个方阵
虽然rand函数只能生成0-1的数,但我们可以利用rand*a,将其变换为生成0-a上的数
2.unifrnd(a,b,m,n)
生成从a-b的一个m行n列的矩阵
3.randi([a,b],m,n)
randi([a,b],m,n)函数可在指定区间[a,b]内随机取出大小为m*n的整数矩阵
二、问题提出
你参加一档电视节目,节目组提供了ABC三扇门,主持人告诉你,其中一扇门后边有辆汽车,其它两扇门后是空的。假如你选择了B门,这时,主持人打开了C门,让你看到C门后什么都没有,然后问你要不要改选A门?
这个问题在概率论的领域是条件概率,但我们的目标就是用生成随机数的方法求出:改选与不改选成功的概率是怎么样的。
三、考虑必定成功的条件下的概率————代码实现
1.初始化变量
设置好重复次数与改变主意时的成功次数与不改变主意的成功次数
n = 100000; % n代表蒙特卡罗模拟重复次数
a = 0; % a表示不改变主意时能赢得汽车的次数
b = 0; % b表示改变主意时能赢得汽车的次数
2.生成随机数,进行循环
首先生成x与y的随机数,其是从1-3的整数,x代表选择的门,y代表有汽车的门。
在实验中,我们只需要考虑改变主意还是不改变主意,因此只需要考虑x=y或者x~=y的情况。
因此,x==y时,不改变主意,a+1。
因此,x~=y时,不改变主意,b+1。
for i= 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
3.输出结果
disp(['蒙特卡罗方法得到的不改变主意时的获奖概率为:', num2str(a/n)]);
disp(['蒙特卡罗方法得到的改变主意时的获奖概率为:', num2str(b/n)]);
四、无条件概率(考虑失败)————代码实现
1.初始化变量
只是需要多加一个变量c,表示没有获奖的次数,之后除以n可以得到概率
n = 100000; % n代表蒙特卡罗模拟重复次数
a = 0; % a表示不改变主意时能赢得汽车的次数
b = 0; % b表示改变主意时能赢得汽车的次数
c = 0; % c表示没有获奖的次数
2.生成随机数,进行循环
我们这边仍然只需要考虑whether x=y。但是在这个过程中,我们需要考虑失败的情况,因此加入了change变量,使是否改变主意确定了是否失败,记录其次数
for i= 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
3.输出结果
disp(['蒙特卡罗方法得到的不改变主意时的获奖概率为:', num2str(a/n)]);
disp(['蒙特卡罗方法得到的改变主意时的获奖概率为:', num2str(b/n)]);
disp(['蒙特卡罗方法得到的没有获奖的概率为:', num2str(c/n)]);
标签:randi,改变,生成,三门,概率,蒙特卡罗,蒙特卡洛,主意,模拟
From: https://www.cnblogs.com/dlmuwxw/p/18330289