蒙特卡洛(Monte-Carlo)计算定积分【Python】

本文通过投点法介绍了如何使用Python进行蒙特卡洛计算定积分,包括一重积分和二重积分的求解过程。通过在积分区域上随机投点,统计落在函数图像下方的点比例来估算积分值。

1、蒙特卡洛计算定积分【投点法】:

以求解第一小题(一重积分)为例,如下图所示,蓝色曲线为被积函数f(x)在[0, π/2]区间上的图像,若要求其定积分,其实就是求曲线下方的面积。这时我们可以用一个比较容易算得面积的矩型罩在函数的积分区间上(假设其面积为S)。然后随机地向这个矩形框里面投点,统计出蓝色曲线下方的点的数量占所有点(红框内)数量的比例为R,那么就可以据此估算出被积函数从0到π/2的定积分为S×R。

以求解第二小题(**二重积分**)为例如下图所示,红色点为被积函数f(x)在积分区间上的图像,若要求其定积分,其实就是求红色点围成的曲面(投影在XOY面是单位圆)下方的体积。这时我们可以用一个比较容易算得体积的圆柱体(绿色点围成的边界)罩在函数的积分区间上(假设其体积为V)。然后随机地向这个圆柱体里面投点,统计出红色曲面下方的蓝色点的数量占所有蓝色点数量的比例为R,那么就可以据此估算出被积函数在积分区间上的二重定积分为V×R。

2、计算第一小题【一重积分】:

#!/usr/bin/env python
# -*- coding:utf-8 -*- 
# Author: Hren

#-------------------------------------------------#
# 一重积分计算结果约为1
# 一次实验:样本为100000时,蒙特卡洛计算结果约为0.99908(ratio=0.40264)
# 实验重复10次, 均方差约为0.0000134
#-------------------------------------------------#

import numpy as np
import math
import  matplotlib.pyplot as plt

def first():
    num = 1000

    x = np.arange(0, math.pi/2, 1/num * math.pi/2)
    y = x*np.sin(x)
    plt.plot(x, y)
    plt.plot(x, [max(y)]*num, 'r')
    plt.plot([max(x)]*num, y, 'r')
    plt.plot(x, [0]*num, 'r')
    plt.plot([0]*num,
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值