R提供了多种分布的随机数函数,如runif(n)产生n个标准均匀分布随机数, rnorm(n)产生n个标准正态分布随机数。
随机数在计算积分上的应用
(1)若要计算积分
θ
=
∫
a
b
g
(
x
)
d
x
\theta = \int_{a}^{b}g(x) dx
θ=∫abg(x)dx
可以利用变换
y
=
x
−
a
b
−
a
y = \frac{x-a}{b-a}
y=b−ax−a,
d
y
=
d
x
b
−
a
dy=\frac{dx}{b-a}
dy=b−adx得到:
θ
=
∫
0
1
g
(
a
+
(
b
−
a
)
y
)
(
b
−
a
)
d
y
=
∫
0
1
h
(
y
)
d
y
\theta = \int_{0}^{1} g(a+(b-a)y)(b-a)dy = \int_{0}^{1} h(y)dy
θ=∫01g(a+(b−a)y)(b−a)dy=∫01h(y)dy
其中, h ( y ) = g ( a + ( b − a ) y ) ( b − a ) . h(y)= g(a+(b-a)y)(b-a). h(y)=g(a+(b−a)y)(b−a). 因此,我们连续地产生随机数并将h在这些随机数上的取值取平均,就能得到近似值 θ \theta θ.
例3.1:
估计积分 : ∫ − 2 2 e x + x 2 d x . \int_{-2}^{2}e ^{x + x ^ 2} dx. ∫−22ex+x2dx. (1.1)
#实现计算上述积分的R代码:
f1 <- function(n,a,b,g){
x <- runif(n)
sum((b - a) * g(a + (b-a) * x)) / n
}
#估计积分(1.1)
#******方法1************
#先定义函数g(x)
g <- function(x)exp(x + x^2)
#调用函数f1
f1(100,-2,2,g)
#******方法2************
#直接使用R的内嵌积分函数(绝对误差小于0.00062)
integrate(g,-2,2)
(2)若要计算积分
θ
=
∫
0
∞
g
(
x
)
d
x
\theta = \int_{0}^{\infty }g(x) dx
θ=∫0∞g(x)dx
可以利用变换
y
=
1
x
+
1
y = \frac{1}{x+1}
y=x+11,
d
y
=
−
d
x
(
x
+
1
)
2
dy=-\frac{dx}{(x+1)^2}
dy=−(x+1)2dx 得到:
θ
=
∫
0
1
g
(
1
y
−
1
)
y
2
d
y
=
∫
0
1
h
(
y
)
d
y
\theta = \int_{0}^{1} \frac{g(\frac{1}{y}-1)}{y^2}dy = \int_{0}^{1} h(y)dy
θ=∫01y2g(y1−1)dy=∫01h(y)dy
其中, h ( y ) = g ( 1 y − 1 ) y 2 . h(y)= \frac{g(\frac{1}{y}-1)}{y^2}. h(y)=y2g(y1−1). 因此,我们连续地产生随机数并将h在这些随机数上的取值取平均,就能得到近似值 θ \theta θ.
(3)计算多元积分:
例3.2 代码:
X <- runif(100)
Y <- runif(100)
f <- function(X,y)exp((x+y)^2)
sum(f(X,Y)) / 100