mysimulation<-function(n) { count<-0 #カウンタを初期化する. for (i in 1:n) { x<-runif(1) if (x<=1/2) coin<-1 else coin<-0 if (coin==1) count<- count+1 } return(count) 次はモンテカルロシミュレーションの基礎の基礎です.
#------コイン投げのサンプル------ coin<-function(){ x<-runif(1) if (x<=1/2) men<-1 else men<-0 return(men) }
#------モンテカルロシミュレーションの単純な例1------ #------表がでる確率がどうなるか?------ mymontecarlo<-function(n){ count<-0 for (i in 1:n){ count<-count+coin() } return(count/n) }
#------モンテカルロシミュレーションの単純な例2------ #------10回コインを投げた平均の平均---------- mycointoss<-function(n){ count<-0 for (i in 1:n) { x<-coin() if (x==1) count<-count+1 } return(count) } coin.montecarlo<-function(n){ count<-0 for (i in 1:n) { count<-count+mycointoss(10) } return(count/n) } 次は,円周率を求めるサンプルです.こんなことも出来るんですね. 恥ずかしながら,今頃知りました…(汗).
#------モンテカルロシミュレーションの単純な例4------ #------円周率を求める------------- #------1/4円を対象としている------------- pi.montecarlo<-function(n){ count<-0 for (i in 1 : n){ suna<-runif(2) if (sqrt(suna[1]^2+suna[2]^2)<1) { count<-count+1 } } return(4*count/n) } モンテカルロシミュレーション,サンプルプログラムの続きです. 今度は,以下の二つです. ・円周率を求める.全部の円を対象として. ・二つの円(重なり有)の面積の割合を求める.
pi.montecarlo2<-function(n){ count<-0 for (i in 1:n){ suna<-runif(2,min=-1,max=1) if (sqrt(suna[1]^2+suna[2]^2)<1){ count<-count+1 } } return(4*count/n) }
#------モンテカルロシミュレーションの単純な例5------ #------二つの円(1部重なり有)の面積を求める------ circle.montecarlo<-function(n){ count<-0 for (i in 1:n){ suna<-runif(2) pi=sqrt((suna[1]-0.3)^2 + (suna[2]-0.3)^2) if (pi<0.3) count<-count+1