蒙特卡洛算法 学习&整理

蒙特卡洛算法

1.引入

通过向矩形上撒大量小米,通过小米数量的比值来确定圆的面积。我们把小米均匀的分布在矩形上,并且数一数圆内小米的数量 Nc和全部小米Ns的数量,矩形面积Ss和圆面积Sc就有如下的比例关系:

a8c5d3754cf94f21a7c4ff2ffc5ccf54.jpeg

2.引例应用到求定积分

数学上定积分的几何意义就是求面积,设定求任意的可积函数f(x),在任意的积分区间[a,b]上的定积分,可以沿用撒小米的方式得到函数的积分值。对于稍微复杂的积分,找到解析解就会困难,采用蒙特卡洛算法就能够以任意精度的方式逼近这个积分值

例子:

cd3c00c8fab64681bf1de5e9dfc0dea3.png

思路:c7b23d7e092749028a7a633178824d6d.jpeg代码:

import numpy
import random
m = 100000
n = 0
for i in range(m): #循环产生随机点
    #在0<x<1,0<y<1的正方形中产生随机点
    x = random.random() #产生0~1之间的随机数
    y = random.random()
    #通过比较f(x)与y的大小关系,判断点的位置
    if numpy.log(1+x) / (1+x*x) > y:
        n = n+1 #计数点在积分区域内的
ans = n/m #比值得面积
print(ans)

运行结果:

df1c3e62d0094debbca6cca083ebd93d.png

 

 3.三扇门问题

 三门问题_百度百科

 有三扇门,一扇门的后面是汽车,另两扇门后面是山羊。当参赛者选定了一扇门,但未去开启它的时候,节目主持人开启剩下两扇门的其中一扇,露出其中一只山羊。主持人其后会问参赛者要不要换另一扇仍然关上的门。问题是:换另一扇门是否会增加参赛者赢得汽车的机率。如果严格按照上述的条件,那么答案是会。不换门的话,赢得汽车的几率是1/3。换门的话,赢得汽车的几率是2/3。

思路:

26462d391c5f419d88f4c3eec9bb7137.jpeg

 代码:

import math
import random
N = 1000000

def play(change):
    prize = random.randint(0,2) #门后是汽车的编号
    first = random.randint(0,2) #首次选择的编号
    #True代表中奖 False表示不中奖
    if first == prize:
        if change:
            return False
        else:
            return True
    else:
        if change:
            return True
        else:
            return False

def probability(change, N):
    s = 0 #中奖次数统计
    for i in range(N): #循环产生随机数进行判断
        if(play(change)):
            s += 1
    print("中奖的概率为{}".format(s / N)) #计算概率

print("换门的中奖概率:")
probability(True,N)
print("不换门的中奖概率:")
probability(False,N)

运行结果:

63bf1ac8d70f4a4a90637a6a0600d434.png

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值