利用概率统计方法计算三重积分
一、蒙特卡罗尔平均值法
考虑K重积分
I
=
∭
Ω
.
.
∫
f
(
x
1
,
x
2
,
.
.
.
,
x
k
)
d
x
1
d
x
2
.
.
d
x
k
I=\iiint\limits_Ω..\int f(x_1,x_2,...,x_k)dx_1dx_2..dx_k
I=Ω∭..∫f(x1,x2,...,xk)dx1dx2..dxk ,选取Ω范围内概率密度函数
g
(
x
1
,
x
2
,
x
3
,
.
.
.
,
x
k
)
g(x_1,x_2,x_3,...,x_k)
g(x1,x2,x3,...,xk),则
I
I
I 可以进行以下转换:
I
=
∭
Ω
.
.
∫
f
(
x
1
,
x
2
,
x
3
,
.
.
.
,
x
k
)
g
(
x
1
,
x
2
,
x
3
,
.
.
.
,
x
k
)
g
(
x
1
,
x
2
,
x
3
,
.
.
.
,
x
k
)
d
x
1
d
x
2
d
x
3
.
.
.
d
x
k
=
E
(
f
(
x
1
,
x
2
,
x
3
,
.
.
.
,
x
k
)
g
(
x
1
,
x
2
,
x
3
,
.
.
.
,
x
k
)
)
\begin{aligned} I&=\iiint\limits_Ω..\int \dfrac{f(x_1,x_2,x_3,...,x_k)}{g(x_1,x_2,x_3,...,x_k)}g(x_1,x_2,x_3,...,x_k)dx_1dx_2dx_3...dx_k \\ &=E(\dfrac{f(x_1,x_2,x_3,...,x_k)}{g(x_1,x_2,x_3,...,x_k)}) \end{aligned}
I=Ω∭..∫g(x1,x2,x3,...,xk)f(x1,x2,x3,...,xk)g(x1,x2,x3,...,xk)dx1dx2dx3...dxk=E(g(x1,x2,x3,...,xk)f(x1,x2,x3,...,xk))令
F
(
x
1
,
x
2
,
x
3
,
.
.
.
,
x
k
)
=
f
(
x
1
,
x
2
,
x
3
,
.
.
.
,
x
k
)
g
(
x
1
,
x
2
,
x
3
,
.
.
.
,
x
k
)
F(x_1,x_2,x_3,...,x_k)=\dfrac{f(x_1,x_2,x_3,...,x_k)}{g(x_1,x_2,x_3,...,x_k)}
F(x1,x2,x3,...,xk)=g(x1,x2,x3,...,xk)f(x1,x2,x3,...,xk) ,则
I
=
E
(
F
(
x
1
,
x
2
,
x
3
,
.
.
.
,
x
k
)
)
I= E(F(x_1,x_2,x_3,...,x_k))
I=E(F(x1,x2,x3,...,xk))
根据辛钦大数定律,设随机变量X1,X2,X3…Xk,相互独立服从同一分布,且具有数学期望 E ( X k ) = μ ( k = 1 , 2 , 3... ) E(X_k)=μ(k=1,2,3...) E(Xk)=μ(k=1,2,3...),则对于任何正数 ε \varepsilon ε,有: lim n → ∞ P { ∣ 1 n ∑ k = 1 n X k − μ ∣ < ε } = 1 \lim\limits_{n\to ∞}P\{|\dfrac{1}{n}\sum\limits_{k=1}^{n}X_k-μ|<\varepsilon\}=1 n→∞limP{∣n1k=1∑nXk−μ∣<ε}=1
所以
I
=
E
(
F
(
x
1
,
x
2
.
.
,
x
k
)
)
=
1
n
∑
i
=
1
n
F
(
x
1
i
,
x
2
i
.
.
.
,
x
k
i
)
I=E(F(x_1,x_2..,x_k))=\dfrac{1}{n}\sum\limits_{i=1}^nF(x_{1i},x_{2i}...,x_{ki})
I=E(F(x1,x2..,xk))=n1i=1∑nF(x1i,x2i...,xki)
简化: 取
g
(
x
1
,
x
2
,
x
3
,
.
.
.
,
x
k
)
=
1
V
Ω
,
(
x
1
,
x
2
,
.
.
.
,
x
k
)
ϵ
Ω
g(x_1,x_2,x_3,...,x_k)=\dfrac{1}{V_Ω},(x_1,x_2,...,x_k)\epsilonΩ
g(x1,x2,x3,...,xk)=VΩ1,(x1,x2,...,xk)ϵΩ 服从K维均匀分布,则:
I
=
E
(
F
(
x
1
,
x
2
,
x
3
,
.
.
.
,
x
k
)
)
=
E
(
f
(
x
1
,
x
2
,
x
3
,
.
.
.
,
x
k
)
g
(
x
1
,
x
2
,
x
3
,
.
.
.
,
x
k
)
=
V
Ω
n
∑
i
=
1
n
f
(
x
1
i
,
x
2
i
,
x
3
i
.
.
.
,
x
k
i
)
\begin{aligned} I&=E(F(x_1,x_2,x_3,...,x_k)) \\ &=E(\dfrac{f(x_1,x_2,x_3,...,x_k)}{g(x_1,x_2,x_3,...,x_k)} \\ &=\dfrac{V_Ω}{n}\sum\limits_{i=1}^nf(x_{1i},x_{2i},x_{3i}...,x_{ki}) \end{aligned}
I=E(F(x1,x2,x3,...,xk))=E(g(x1,x2,x3,...,xk)f(x1,x2,x3,...,xk)=nVΩi=1∑nf(x1i,x2i,x3i...,xki)
二、R语言代码实践
题目: 请使用概率统计知识求解以下积分的近似值
∫
1
3
∫
2
4
∫
3
6
(
x
e
−
y
2
+
z
2
+
x
y
z
)
d
x
d
y
d
z
≈
324
±
2.9
∗
1
0
−
7
\int_1^3\int_2^4\int_3^6(xe^{-{y^2+z^2}}+xyz)dxdydz\approx324\pm2.9*10^{-7}
∫13∫24∫36(xe−y2+z2+xyz)dxdydz≈324±2.9∗10−7
#---------代码块---------
f=function(x,y,z) x*exp(-(y^2+z^2))+x*y*z
arr=array(1:1000) #创建一维数组,长度1000
x1=3;x2=6
y1=2;y2=4
z1=1;z2=3
v=(x2-x1)*(y2-y1)*(z2-z1) #空间体积
for(i in 1:1000) #循环运算结果1000次,存入数组
{
r1=runif(10^5,min=x1,max=x2) #生成均匀分布随机数 x
r2=runif(10^5,min=y1,max=y2) #生成均匀分布随机数 y
r3=runif(10^5,min=z1,max=z2) #生成均匀分布随机数 z
h=f(r1,r2,r3)
out=v*mean(h) #计算得到的积分值
arr[i]=out #将积分值存入数组
}
print(mean(arr)) #输出计算1000次积分值后的平均值
#---------运行结果---------
[1] 324.0016
下面给出通用代码模板
fun=function(x) x[1]*exp(-x[2]^2-x[3]^2)+x[1]*x[2]*x[3]
start=c(1,2,3);end=c(3,4,6);n=10^5 #分别存放各个变量的起始值和结束值
simulation=function(fun,start,end,n)
{
V=prod(end-start); #(3-1)*(4-2)*(6-4)=12 求体积
mat=matrix(0,nrow=n,ncol=length(start)) #n行3列矩阵,初值各元素为0
for(i in 1:length(start)) #为每一列既3个变量生成随机数
mat[,i]=runif(n,min=start[i],max=end[i])
mean(apply(mat,1,fun))*V #将矩阵的n行值代入fun中计算后取平均值最后乘以体积
}
simulation(fun,start,end,n)