【python】用蒙塔卡罗方法的重要性采样估计定积分

前几天在用蒙特卡洛方法估计定积分的时候,发现中文网站上这方面的资料很少,即使有也没有说的很详细,所以这里专门写一篇博文记录自己的学习,仅供大家参考。欢迎指点。

蒙特卡洛方法

蒙特卡罗方法(Monte Carlo method),也称统计模拟方法,是二十世纪四十年代中期由于科学技术的发展和电子计算机的发明,而被提出的一种以概率统计理论为指导的一类非常重要的数值计算方法。简单来说,MCM就是一种使用随机数(或伪随机数)来解决计算问题的方法。

举个例子,用“投针实验”的方法求圆周率就属于用蒙特卡洛方法解决问题。所谓“投针试验”就是我们在一个1*1的正方形区域内随机采样若干次,这些点中到原点(任一顶点)的距离在1以为的概率就是四分之一π,即四分之一圆的面积。就像我们在这个正方形区域内随机的扔一些“针”,他们落在四分之一圆内的概率就是四分之一圆的面积与正方形面积的比值,即π/4 。

 

求解定积分

蒙特卡洛方法一个很强大的应用,就是求解定积分,尤其是那些难以直接求出数值解的问题。

推导过程如下所示:

一言以蔽之:如果我们用均匀分布来估计,那么其实就相当于对区间[a, b]内的被积函数值进行随机均匀采样,然后求平均值作为纵轴长度的期望,接着乘以横轴上的长度即 (b-a) 就可以得到区间内曲线下面积的期望。

rocks in a box

但是有时候,因为被积函数值在不同的位置相差较大,那么此时在值较小的地方采样就不是很有必要,所以就需要用一个更符合被积函数值波动的分布来采样,从而在同样的采样次数下达到更精确的值,即上面推导过程中提到的f_X(x)。而f_X(x)要满足相应两个条件,其中最主要的就是要保证在积分区间内分布的概率和为1。

比如对于求解方程g(x)=x^3在区间[0, 1]之间的定积分值,显然正态分布的左半边和函数值的变化趋势很相似,所以如果我们用正态分布采样而不是均匀分布,那么就能够在更小的采样次数内得到更精确的估计值。也许有人会问,为什么不用直接用符合g(x)=x^3的分布来采样ÿ

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值