首页 > 编程知识 正文

用蒙特卡洛方法求积分,蒙特卡洛动力学模拟

时间:2023-05-06 11:42:11 阅读:195143 作者:4567

我们现在想通过蒙特卡洛模拟求下面这个积分的值,这个积分比较简单,我们当然可以计算出来为4。而对于复杂的定积分我们则可以通过蒙特卡洛模拟来求对应积分值。下面我们拿这个积分举例蒙特卡洛模拟如何求积分。

文章目录 投点法求积分平均法求定积分参考链接

投点法求积分

即模拟很多点投到对应区间,如果在对应概率密度曲线下面,则计为1,否则为0,最后统计出1的比例。然后用x y对应范围组成的长方形面积S乘以这个比例即为所求积分。

import randomx_min = 0.2x_max = 1num_samples = 1000000f = lambda a : 1 / (a * a)# method1:投点法求积分n=0for i in range(num_samples): x = random.uniform(x_min, x_max) y= random.uniform(0, f(x_min)) if y<=f(x): n=n+1estimate1=(x_max-x_min)*f(x_min)*n/num_samplesprint(estimate1)

最终结果为4.01288

平均法求定积分

在[a,b]之间随机取一系列点xi时(xi满足均匀分布),把估算出来的面积取平均来作为积分估计,这样的采样点越来越多,那么估计也就越来越接近真实值

import randomx_min = 0.2x_max = 1num_samples = 1000000# method 2:平均法求积分f = lambda a : 1 / (a * a)estimate = 0pdf = 1 / (x_max - x_min)for i in range(num_samples): x = random.uniform(x_min, x_max) estimate += f(x) / pdfestimate /= num_samplesprint(estimate)

最终结果为4.001407006273299

参考链接

Monte Carlo Integration
蒙特·卡罗(Monte Carlo)法求定积分

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。