メモ Ruby対数正規分布の乱数
(2017/11/16)あああタイトル間違ってましたぁ・・更新前に見た方申し訳ないです・・
合っているかは自信ないです・・
ゲームの乱数くらいにお使いください。
require "random_bell" # http://pmsl.planet.sci.kobe-u.ac.jp/~seto/?page_id=316 # をRubyに移植 def lognormal mu, sigma return Float::NAN if (mu <= 0) bell = RandomBell.new( mu: Math.log(mu*mu) - Math.log(mu*mu + sigma*sigma) / 2.0, sigma: Math.sqrt(Math.log(1 + (sigma / mu) * (sigma / mu))), range: -10..10) Math.exp(bell.rand) end
分布確認用
require"./lognormal" puts (1..10000).to_a.map{|n|lognormal(平均,分布).to_i}.inject({}){|r,n|r[n]||=0;r[n]+=1;r}.sort_by{|n,v|n}.map{|n,v|"#{n} #{"*"*v}"}
C++(標準ライブラリ)にもPython(NumPy)にもC#(Math.net)にもあるのに
Rubyにはない悲しみ
gem install random_bell
random_bellを使用しています。
random_bell (0.1.1)
ruby 2.3.3p222 (2016-11-21 revision 56859) [x64-mingw32]