蒙特卡洛算法
1.引入
通过向矩形上撒大量小米,通过小米数量的比值来确定圆的面积。我们把小米均匀的分布在矩形上,并且数一数圆内小米的数量 Nc和全部小米Ns的数量,矩形面积Ss和圆面积Sc就有如下的比例关系:
2.引例应用到求定积分
数学上定积分的几何意义就是求面积,设定求任意的可积函数f(x),在任意的积分区间[a,b]上的定积分,可以沿用撒小米的方式得到函数的积分值。对于稍微复杂的积分,找到解析解就会困难,采用蒙特卡洛算法就能够以任意精度的方式逼近这个积分值。
例子:
思路:代码:
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)
运行结果:
3.三扇门问题
三门问题_百度百科
有三扇门,一扇门的后面是汽车,另两扇门后面是山羊。当参赛者选定了一扇门,但未去开启它的时候,节目主持人开启剩下两扇门的其中一扇,露出其中一只山羊。主持人其后会问参赛者要不要换另一扇仍然关上的门。问题是:换另一扇门是否会增加参赛者赢得汽车的机率。如果严格按照上述的条件,那么答案是会。不换门的话,赢得汽车的几率是1/3。换门的话,赢得汽车的几率是2/3。
思路:
代码:
import math
import random
N = 1000000def play(change):prize = random.randint(0,2) #门后是汽车的编号first = random.randint(0,2) #首次选择的编号#True代表中奖 False表示不中奖if first == prize:if change:return Falseelse:return Trueelse:if change:return Trueelse:return Falsedef probability(change, N):s = 0 #中奖次数统计for i in range(N): #循环产生随机数进行判断if(play(change)):s += 1print("中奖的概率为{}".format(s / N)) #计算概率print("换门的中奖概率:")
probability(True,N)
print("不换门的中奖概率:")
probability(False,N)
运行结果:
本文发布于:2024-01-28 09:36:51,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/17064058176492.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |