蒙特卡洛方法——玩具例子(2)定积分

蒙特卡洛方法可以计算任意一个积分的值。

这里写图片描述

下面以求 10x2dx 的定积分,定义域为[0,1], x2 的值域为[0,1]。 在坐标区域 0x1 ; 0y1 内撒点,用纵坐标j小于等于 i2 的所有点 (i,j) 占总点数的比例近似估计定积分的值。


# -*- coding:utf8 -*-

import numpy as np
import matplotlib.pyplot as plt

def interplote_exp(up, down, N):
    x = np.random.uniform(up, down, (N,))
    y = np.random.uniform(up, down, (N,))
    incircle = np.sum(y - np.power(x, 2) <= 0.0)
    error = 1.0/3 - incircle * 1.0/N
    ######################################
    fx = np.linspace(0.0, 1.2, 3600)
    fy = np.power(fx, 2)
    ######################################
    plt.fill_betweenx(fy, 1.0, fx, where=fx <= 1.0, facecolor='red')
    rx = np.asarray([0.0, 1.0, 1.0, 0.0, 0.0], dtype = np.float)
    ry = np.asarray([0.0, 0.0, 1.0, 1.0, 0.0], dtype = np.float)
    plt.plot(rx,ry, color="g")
    plt.plot([0.0, 1.2],[0.0, 0.0], color="b")
    plt.plot([0.0, 0.0],[0.0, 1.2], color="b")
    plt.plot(fx,fy, color="b")
    cl = ["b" if j - i**2 <= 0.0 else "r" for i, j in zip(x,y)]
    plt.scatter(x, y, c=cl)
    plt.text(0.2, 1.4, s = r"$\int_{0}^{1} x^2 dx=\frac{1}{3}$") 
    plt.text(0.2, 1.2, s = "error={error}, N={N}".format(N=N, error=error))
    plt.show()

if __name__ == "__main__":
    interplote_exp(0.0, 1.0, 10000)
    pass

输出的图示为:

这里写图片描述

参考:http://www.ruanyifeng.com/blog/2015/07/monte-carlo-method.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值