目录
前言
本篇我们将讲述什么是蒙特卡罗法以及其对我们后面进行非线性规划的数学建模能够提供什么帮助
一、蒙特卡罗法是什么?
定义:蒙特卡罗法又称统计模拟法,是一种随机模拟方法,以概率和统计理论方法为基础的一种计算方法,是使用随机数(或更常见伪随机数)来解决很多计算问题的方法。将所求解的问题同一定的概率模型相联系,用电子计算机实现统计模拟或抽样,以获得问题的近似解。为象征性地表明这一方法的概率统计特征,故借用都城蒙特卡罗命名。
原理:由大数定理可知,当样本容量足够大时,事件的发生频率即为其概率。
二、求解三门问题
1.题目引入
你参加一档电视节目,节目组提供了A、B、C三扇门,主持人告诉你,其中一扇门后边有辆汽车,其他两扇门后面是一头山羊,你可以选择一扇门打开获得门后的东西。假如你选择了B们,这时,主持人打开了C门,让你看到C门后是只山羊,然后问你要不要改选A门?(你想要汽车)
大家一般会想,既然已经排除了一只山羊了,那后面就只有一只山羊和一辆车了,概率应该是50%,那事实真的是这样吗?让我们一起来看一下
2.利用蒙特卡罗求解
这里我们模拟100000次选择情况,利用频率估算概率
函数介绍:
randi()函数——用来生成随机整数,这里i—integer(整数)
randi(num)/randi([1,num])——默认生成 1 ~ num之间的随机整数,区间可以改变
randi(100,3,3)/randi([1,100],3,3)——默认生成元素数位1 ~ 100之间的3X3的矩阵
%三门问题-例题
clear,clc
n = 100000;
a=0;%表示不改变主意时能赢得汽车的次数
b = 0;%%表示改变主意时能赢得汽车的次数
c = 0;%表示不能赢得汽车的次数
for i=1:100000
x = randi([1,3]); %随机生成一个1-3之间的整数x表示汽车出现在第x扇门后
y = randi([1,3]);%表示我们随机选择了一扇门
change = randi([0,1]);%1表示我们改变主意,0为不改变主意
if x==y
if change==1
c=c+1;
else
a=a+1;
end
else
if change==1
b=b+1;
else
c=c+1;
end
end
end
disp('不改变主意时能赢得汽车的概率为');disp(a/n);
disp('改变主意时能赢得汽车的概率为');disp(b/n);
disp('不能赢得汽车的概率为');disp(c/n);
最后我们得到结果如下:
总结
我们发现如果我们选择改变主意能够赢的概率差不多是不改变能赢的两倍;这里我们也可以通俗的理解一下,假如我们不改变主意能赢,只能是开始选的就是汽车,那么能赢的概率就是1/3对吧,如果我们后面选择的改变主意能赢的话,那我们开始只能是选了山羊对吧,而开始选中山羊的概率是2/3,所以这也解释了为什么是一倍的关系