-1

モンテカルロ法を使用して x^2 cosx の積分 (o から pi/2) を見つけようとしています。これは私の初めてなので、いくつかの指示が必要です。乱数を生成するには、積分の制限を (0,1) に変換する必要がありますか、または指定された制限 (0 から pi/2) で乱数を生成できますか?

このようなもの ?

積分を (o から pi/2) から (0 から 1) に変換し、関数を 1/x^2 sinx に変換します 乱数 rnorm(10000,0,1) を生成します

または、積分の極限を変換することなく、この rnorm(10000,0,1)*pi/2 のような乱数を生成する方法はありますか

4

2 に答える 2

4

任意の間隔で一様に乱数を生成できます。たとえば、runif(1000,0,pi/2)[0,π/2] に一様に分布するサイズ 1000 のサンプルを生成します。rnormここでは絶対に使用したくない-rnorm均一に分散されたデータではなく、正規に分散されたデータを生成します。

次のようにモンテカルロ シミュレーションを実行できます。

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

または、次を使用して R に統合を行わせることができますintegrate

> integrate(f,0,pi/2)
0.4674011 with absolute error < 5.2e-15
于 2013-10-13T22:20:27.580 に答える
0

私の最初の撮影:

mc.integral = function(FUN, n.iter = 1000, interval){

  # take a sample using 'runif'
  x = runif(n.iter, interval[1], interval[2])

  # apply the user-defined function
  y = FUN(x)

  # calculate
  mean(y)*(interval[2] - interval[1])
}

FUN = function(x){x^2 * cos(x)}
integ = mc.integral(FUN, interval = c(0, pi/2))
print(integ)

[1] 0.4693398
于 2013-10-13T22:19:43.860 に答える