在 R 中使用 montecarlo 将 0 积分到 pi/2

gre*_*0rn -1 r integral montecarlo calculus

尝试使用蒙特卡洛方法求 x^2 cosx 的积分(o 到 pi/2)。这是我第一次,所以需要一些指导。要生成随机数,我应该将积分的极限变换为 (0,1) 还是可以生成具有给定极限(0 到 pi/2)的随机数?

像这样的东西?

将积分从 (o 到 pi/2) 转换为 (0to 1),从而将函数转换为 1/x^2 sinx 生成随机数 rnorm(10000,0,1)

或者有没有办法生成像这样的随机数 rnorm(10000,0,1)*pi/2 而不必转换积分的极限

mri*_*rip 5

您可以在任何您想要的区间内均匀地生成随机数,例如runif(1000,0,pi/2)将生成大小为 1000 的样本,均匀分布在 [0,π/2] 上。你肯定不想rnorm在这里使用——rnorm生成正态分布的数据,而不是均匀分布的数据。

你可以像这样进行蒙特卡罗模拟:

> f<-function(x) x^2 * cos(x)
> mean(f(runif(100000,0,pi/2)))*(pi/2)
[1] 0.4672985
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用 R 进行集成integrate

> integrate(f,0,pi/2)
0.4674011 with absolute error < 5.2e-15
Run Code Online (Sandbox Code Playgroud)

  • 正态分布的数据会给区间的某些部分赋予比其他部分更大的权重。均匀分布的数据将给出相同的权重,这正是计算积分时所需要的。 (2认同)