蒙特卡洛算法之蒲丰实验

文章介绍了蒙特卡洛算法的基本思想,它基于概率统计理论和随机抽样。通过蒲丰实验的例子,展示了如何使用蒙特卡洛算法求解问题,以及Python代码实现。文中提到,实验次数(M)对结果精度的影响,更多的实验通常带来更精确的结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

蒙特卡洛算法的基本思想是:为了求解问题,首先建立一个概率模型或随机过程,使它的参数或数字特征等于问题的解:然后通过对模型或过程的观察或抽样试验来计算这些参数或数字特征,最后给出所求解的近似值。解的精确度用估计值的标准误差来表示。蒙特卡洛算法的主要理论基础是概率统计理论,主要手段是随机抽样、统计试验。用蒙特卡洛算法求解实际问题的基本步骤为:

(1)根据实际问题的特点.构造简单而又便于实现的概率统计模型.使所求的解恰好是所求问题的概率分布或数学期望;

(2)给出模型中各种不同分布随机变量的抽样方法;

(3)统计处理模拟结果,给出问题解的统计估计值和精度估计值。

蒙特卡洛算法的起源是著名的蒲丰实验。

蒲丰实验是用抛针的方法求圆周率的一个实验,其所蕴含的科学思想非常经典。

桌上有一组平行线,相邻两条间距为l,现有大量长为a(a<=l)的细针,抛掷于桌上。设其与桌上某一平行线相交的概率为P。进行实验,投掷M根细针后有N根与平行线相(M很大),于是可以用频率替代概率,即P=N/M。接下来从数学模型上分析P的值。

这样就完成了蒲丰实验。以大量重复实验中的频率代替数学或者统计学意义上的概率,是蒙特卡洛算法的核心。下面附上对蒲丰实验的代码实现:

from math import *
import random
l=float(input())
a=float(input())
s=0
N=0
M=int(input())
while s<=M:
    x=random.uniform(0,l/2)
    Phi=random.uniform(0,pi)
    if x<=1/2*a*sin(Phi):
        N+=1
    s+=1
p=2*a*M/l/N
print(p)

平行线间距和针长可以自选,针的数量M要适中:M太小精度差别太大,M太大计算时间太长,一般来说M越大,与pi的真实值相差就越小。下面是三组数据:

 

 

 但是为什么这个4000000的数据似乎没有1000000的数据精准呢?于是我又做了一遍:

这一次更精准了,前面那一次或许是随机数导致的小概率事件吧!

希望这篇文章对你有所帮助!~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值