通过Python实现蒙特卡洛算法

1.蒙特卡洛方法

蒙特卡罗(Monte Carlo)方法,又称随机抽样统计试验方法,是通过使用随机数(或更常见的伪随机数)来解决很多计算问题的方法,将所求解的问题同一定的概率模型相联系,用计算机实现统计模拟或抽样,以获得问题的近似解。

蒙特卡罗算法的基本步骤
蒙特卡罗算法一般分为三个步骤,包括构造随机的概率的过程,从构造随机概率分布中抽样,求解估计量。

2.案例引入:π的计算

正方形内部有一个相切的圆,假设圆形的半径为r,那么正方形的边长则为2r,因此,圆形和正方形的面积之比为:
                                   
在正方形内部,随机产生一系列的点,计算他们与中心点的距离,从而判断是否落在圆的内部,从而:   

                                    

3.计算 

蒙特卡洛算法求解积分问题
对被积分函数的变量在某一区间内进行随机均匀抽样,然后对抽样点的函数值求平均,从而可以得到函数积分的近似值。此种方法的理论基础是概率论的中心极限定理,其不随积分维数的改变而改变。  

实例:

 思路分析:

(1)被积分函数表示的几何意义即函数在积分区域上的面积,带入x=0&x=1,可知函数的大致范围图像,根据被积分函数的图像可知:其图像面积小于1(可以看作在被积函数在面积为1的正方形内)

(2)构造随机的概率,设有足够多的随机点,即随机点将落在面积为1的正方形里(总点数)和被积函数的图像里(有随机性)

(3)求出估计量

代码

import numpy as np
import random
m = 100000
n = 0
#定义函数
def func(x):
    return np.log(1+x)/(1+x**2)

for i in range(m): #产生随机点
    x = random.random() 

    y = random.random()
    
    if func(x)>y:#保证在积分区域内
        n = n+1 
ans = n/m #比值即为面积
print(ans)

代码运行结果

 

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python实现蒙特卡洛抽样的方法如下: 首先,需要导入random模块,以生成随机数。然后,定义一个函数来进行蒙特卡洛抽样的模拟实验。在这个函数中,可以使用random.random()函数来生成(0,1)上的均匀分布的随机数,作为抽样的基本工具。根据需要,可以进行多次实验,每次实验都生成一组随机数,并根据所求问题的概率模型进行计算和统计。最后,根据实验结果,可以得到问题的近似解,即无偏估计。 以下是一个简单的Python代码示例,用于实现蒙特卡洛抽样: ```python import random def monte_carlo_sampling(num_samples): count = 0 for _ in range(num_samples): x = random.random() y = random.random() if x**2 + y**2 <= 1: count += 1 pi_approximation = 4 * count / num_samples return pi_approximation # 示例:使用蒙特卡洛抽样估计圆周率π num_samples = 1000000 pi_estimate = monte_carlo_sampling(num_samples) print("使用蒙特卡洛抽样估计的圆周率π为:", pi_estimate) ``` 在这个示例中,我们使用蒙特卡洛抽样来估计圆周率π。通过生成大量的随机点,判断这些点是否落在单位圆内,然后根据落在单位圆内的点的比例来估计圆周率π。最后,输出估计的圆周率π的值。 请注意,这只是一个简单的示例,实际应用中可能需要根据具体问题进行适当的修改和调整。 #### 引用[.reference_title] - *1* *3* [蒙特卡罗法(Python实现)](https://blog.csdn.net/Zsusan7/article/details/122268525)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Python实现蒙特卡洛模拟](https://blog.csdn.net/m0_64492647/article/details/123990105)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值