leapflog
shuyoさんに負けたけど、自分もリープフロッグのやつpythonで書いてみた。
rのガウス分布からのリサンプリングは知らないけど。
#! -*- coding: utf-8 -*- from pylab import plot, hist, show from random import gauss z = 0 r = 1.0 epsilon = 0.1 sigma = 2.0 # ここではE = z^2/sigma, roE/roz = 2z/sigma def leapflog( z, r, eps, sigma ): r_tmp = r - eps * z / sigma z = z + eps * r_tmp r = r_tmp - eps * z / sigma return z, r zlist = [] for n in xrange(1000): for i in xrange(100): z, r = leapflog( z, r, epsilon, sigma) zlist.append(z) r = gauss(1.0,1.0) print "%d, z: %f, r: %f" % (n, z, r) hist(zlist, 50, normed=1, facecolor='green', alpha=0.75) show()
r = gauss(1.0, 1.0)をコメントアウトすると、残念な分布になる。あとepsilonを1にするとおんなじとこばかり移動してとっても残念なことになる。