基于蒙特卡洛方法求解数值积分的一个小例子

对随机变量X的概率密度函数f(x)做积分运算,我们就可以通过

E(g(X))=+g(x)f(x)dx

这样的积分形式来表示指定函数g在参数X时函数值的期望值。

基于蒙特卡洛方法的数值积分正好是这种方法的逆推。如果我们需要计算某个定积分的值,只要将其变换为某一随机变量的期望的形式,再借用蒙特卡洛方法即可。

例如,如果需要计算

c=abh(x)dx

我们应令X遵从[a,b]上的均匀分布,且g(x)=(b-a)h(x),对g(x)施加蒙特卡洛方法,就可以得到E(g(X))=c。之后,只要将生成的伪随机数序列x1,x2....xn来模拟[a,b]上的均匀分布,就可以通过计算(b-a)(h(x1)+....h(xn))/n来得到c的估计值。

下面通过例子来用蒙特卡洛方法来计算

02x2dx

g(x)=2x2

已知c的理论解是8/3

python代码:

import numpy as np
n=100000  #随机数的数量
x=2*np.random.rand(n) #在[0,2]上的n个随机数
c=np.sum(2*x**2)/n

image-20210126142627165

可见,用蒙特卡洛法求得的积分值与理论解非常接近。

附:md编辑公式 https://www.cnblogs.com/daizongqi/p/11525397.html

posted @   JohnYang819  阅读(851)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示