2016-07-07 27 views
0

In R, wie simuliert man einen diskreten Biased Random Walk, in dem es eine Reihe von Punkten gibt, auf die der Agent hingezogen wird?2D-verzerrten Zufallsspaziergang simulieren in R

Die Antwort würde vorzugsweise einen Ausdruck einschließen, um die Diffusivität des Teilchens zu steuern.

Danke!

Antwort

0

Anpassung des Codes von https://stat.ethz.ch/pipermail/r-help/2010-December/261947.html

können Sie dann eine bedingte Funktion Schleife durch das Array hinzufügen. Wenn die Partikelposition innerhalb eines Radius (oder eines Quadrats für den Zweck dieses Beispiels) liegt, können Sie ein zweites zufälliges Ereignis hinzufügen. Wenn dies wahr ist, erhält das Partikel einen zusätzlichen Schritt in diese Richtung, wenn falsch - nicht.

RW2D<-function(N) { i<-0 xdir<-0 ydir<-0 xpos<-vector() xpos[1]<-xdir ypos<-vector() ypos[1]<-ydir for (i in 1:N-1) 



     attraction_points <- my.array <- array(1:24, dim=c(2)) 



    { 
     r<-runif(1) 
     if(r<=0.25) {xdir<-xdir+1} 
     if(r>0.25 && r<=0.5) {xdir<-xdir-1} 
     if(r>0.5 && r<=0.75) {ydir<-ydir +1} 
     if(r>0.75) {ydir<-ydir-1} 




     for (j in 1:24){ 
     if (abs(attraction_points[j,0]-xpos) < 4){ 
      if (abs(attraction_points[j,1]-ypos) < 4){ 
       if(runif(1)<=0.5) {xdir<-xdir+ 1*sign(attraction_points[j,0]-xpos)} 
       if(runif(1)<=0.5) {ydir<-ydir+ 1*sign(attraction_points[j,1]-ypos)} 
      } 
    } 
}   



     xpos[i+1]<-xdir 
     ypos[i+1]<-ydir 


    } return(cbind(xpos,ypos)) } rw<-RW2D(10000) 

xmin<-min(rw[,1]) xmax<-max(rw[,1]) ymin<-min(rw[,2]) ymax<-max(rw[,2]) 

plot(rw[,1],rw[,2],type="l",xlab="x",ylab="y",main="Random Walk Simulation In Two Dimensions",col="green4",xlim=range(xmin:xmax),ylim=range(ymin:ymax)) 

end<-cbind(rw[10000,1],rw[10000,2]) start<-cbind(0,0) 

points(start,pch=4,col="red") points(end,pch=4,col="red") 

NB Ich habe laufen nicht den Code selbst, aber das sollte die Idee veranschaulichen, und Sie sollten yoruself irgendwelche Fehler beheben können.