CubicLouve

Spring_MTの技術ブログ

線形合同法(Linear congruential method)のスペクトル検定による可視化

線形合同法擬似乱数生成器の一つ

\displaystyle{
X_{n+1} = (A \times X_{n} + C)  \bmod M
}

ここでのA(乗数) C(増分) M(法)は定数で、AとCはMより小さい数を選ぶ。

このA C Mの選び方によって周期性は変わる。

どういう選び方すればをいいかは下記本を参照ください。

線形合同法で生成された数列がどれくらい乱雑かを判定する方法の一つにスペクトル検定がある。

今回は三次元でこれをグラフにしてみた。

Rubyのrandはメルセンヌ・ツイスタなので、それと線形合同法で生成した乱数の分布を比べてみる。

docs.ruby-lang.org

docs.ruby-lang.org

適当なスクリプトを書いて可視化した結果が下記の図となる。

可視化にはGR.rbを利用している。

github.com

  • 線形合同法(A(乗数)を137、C(増分)を187、M(法)を256にしているので規則性がわざと出やすくしている)

こう見ても今回のパラメータの線形合同法の結果は乱雑さがない感じがする。

参考資料

ja.wikipedia.org

http://www.math.sci.hiroshima-u.ac.jp/m-mat/TEACH/ichimura-sho-koen.pdf

tsujimotter.hatenablog.com