十進BASIC 第2掲示板 過去ログ
モンテカルロ法による数値積分
投稿者:
山中和義
投稿日: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
戻る
モンテカルロ法による数値積分
投稿者:山中和義 投稿日:2008年10月28日(火)11時14分32秒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