参考资料:概率论与数理统计教程第二版(茆诗松)4.3
定积分线性变换(换元法)
对于一般区间[a,b]上的定积分:
可以作线性变换y=(x-a)/(b-a),转化为[0,1]区间上的积分:
若,
令
则,此时:
其中,,
蒙特卡罗模拟
随机投点法(伯努利大数定律)
设二维随机变量(X,Y)服从上的均匀分布且独立。
记事件,其概率为:
用蒙特卡罗方法随机投点,将(X,Y)看成正方形内以均匀分布随机投的点,计算随机点落在区域A中的频率(即发生的次数占比),当n很大时,该频率作为的近似概率值(伯努利大数定律)。
例如,计算
a=2
b=3
g=function(x){
t=x**2
return(t)
}
c=g(a)
d=g(b)
f=function(y){
t=1/(d-c)*(g(a+(b-a)*y)-c)
return(t)
}
n=100000
m=function(n){
m1=runif(n)
m2=runif(n)
s=0
for(i in 1:n){
if(m2[i]<=f(m1[i])){
s=s+1
}
}
p=s/n
s0=(b-a)*(d-c)
J=s0*p+c*(b-a)
return(J)
}
m(n)
结果为:6.34315 6.3347 6.33895 6.3346等
平均值法(辛钦大数定理)
设随机变量X服从(0,1)上的均匀分布,则f(x)的数学期望为:
由辛钦大数定理,可以用f(x)观察值的平均值去估计数学期望。使用蒙特卡罗模拟,先生成n个(0,1)上的均匀分布随机数(n足够大),再由这些随机数确定f(x)观察值的平均值:
例如,计算
a=2
b=3
g=function(x){
t=x**2
return(t)
}
c=g(a)
d=g(b)
f=function(y){
t=1/(d-c)*(g(a+(b-a)*y)-c)
return(t)
}
n=100000
m=function(n){
m1=runif(n)
p=f(m1[1])
for(i in 2:n){
p=(p+f(m1[i]))/2
}
s0=(b-a)*(d-c)
J=s0*p+c*(b-a)
return(J)
}
m(n)
结果为:6.350545 5.169826 7.269659 6.478476等文章来源:https://www.toymoban.com/news/detail-565216.html
注:平均值容易受极端值影响,误差可能较大。文章来源地址https://www.toymoban.com/news/detail-565216.html
到了这里,关于蒙特卡罗模拟计算定积分(R)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!