モンテカルロ法による数値積分

 投稿者:山中和義  投稿日:2008年10月28日(火)11時14分32秒
  !モンテカルロ法(Monte Carlo Method)による数値積分

DEF f(x)=1/(1+x) !被積分関数

!●入門的モンテカルロ法
! ∫[0,1]f(x)dx=Σ[i=1,N]f(i/N)/N=1/N*Σ[i=1,N]f(xi)
!
! x=[a,b]範囲で一様乱数で点(x,y)をN個発生させると
! ∫[a,b]f(x)dx=(b-a)/N*Σ[i=1,N]f(xi)

LET N=500000 !乱数の発生個数

LET a=0
LET b=1

LET ba=b-a
LET h=0
FOR i=1 TO N
   LET x=RND*ba+a !N個の一様乱数
   LET h=h+f(x) !Σf
NEXT i
LET S=h*ba/N

PRINT S, LOG(2)



!●「あたりはずれ」のモンテカルロ法
! x=[a,b]、y=[0,c]、0<f(x)<cの範囲で
! 一様乱数で点(x,y)をN個発生させて、y<f(x)の数をnとすると
! ∫[a,b]f(x)dx=c*(b-a)*n/N

LET N=500000 !乱数の発生個数

LET a=0
LET b=1
LET c=1

LET ba=b-a
LET hit=0
FOR i=1 TO N
   LET x=RND*ba+a !N個の一様乱数
   LET y=RND*c
   IF y<f(x) THEN LET hit=hit+1 !fより下の領域
NEXT i
LET S=c*ba * hit/N !長方形との面積比

PRINT S, LOG(2)


END
 

戻る