どう書く?org : 2次元ランダムウォーク
original page : http://ja.doukaku.org/193/
2次元ランダムウォークをつくってみてください。
******
元は3本建てにしようかと思ったけど、上の一本に絞りました。おまけとして、3本とも下に補足しておきます。作れるようでしたら作ってみてください。
1.一次元のランダムウォークを作ってください。
1.1 データファイルに残してください。 フォーマット:時間 位置
おまけ)
可視化が簡単な処理系・プログラミング言語でしたら実際に可視化してみてください。フォーマットしたファイルをスプレッドシートやplotutilitiesなどの可視化ソフトを使って、実際に動きをかくにんしてみましょう。:-)
2.同じように2次元のランダムウォークを作ってください。
2.1 1.1と同じようにしてください。
フォーマット:時間 x位置 y位置
3.凝りたければ、アニメーションにするもよし、3次元の動きをとるもよし、自分の想像力がいかせるところまでやってみてください。
分からないというヒトへの分かりにくいヒント:
今の位置から次の時間の位置が決まるのですが、決まりかたが、乱数で一歩後退するか一歩先にいくか?ということをやればよいです。
#6871
original page : http://ja.doukaku.org/comment/6871/
本職ではありませんが・・・
simecolというライブラリーに、ランダムウォークを実装するためのフレームワークが用意されています。
もちろんアニメーションもします。
library(simecol) size <- 50 obj <- rwalkModel( parms = list(size=size, area=c(0, size, 0, size)), init = data.frame(time=0, x=size/2, y=size/2), times = c(from=0, to=100, by=1), main = function(time, init, parms) { r <- 2 * pi * runif(1) data.frame(time=time, x=((init$x + cos(r)) %% parms$size), y=((init$y + sin(r)) %% parms$size)) } ) sim(obj, animate=T)
#6897
original page : http://ja.doukaku.org/comment/6897/
もっといえば、1〜4の乱数が欲しいようなときはrunif()ではなくsample()を使った方がRっぽいかもです。
plot(cumsum(data.frame(x=c(1,-1,0,0), y=c(0,0,1,-1))[sample(4, t, replace=T),]), type="b")