我们现在想通过蒙特卡洛模拟求下面这个积分的值,这个积分比较简单,我们当然可以计算出来为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满足均匀分布),把估算出来的面积取平均来作为积分估计,这样的采样点越来越多,那么估计也就越来越接近真实值
最终结果为4.001407006273299
参考链接Monte Carlo Integration
蒙特·卡罗(Monte Carlo)法求定积分