• ベストアンサー

擬似乱数の規則性をプロット図から読み取る

コンピュータの作る擬似乱数(RND関数など)に規則性があることを表現するために、3次元プロットした図をあげて、規則的な濃淡が現れていることが分かるようになっている書籍を見たことがあります。(書名失念) 自分で再現したくなっていろいろ試したのですが、うまくいきませんでした。同じような結果を出すにはどのようなアルゴリズムでプロットすればいいでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • UKY
  • ベストアンサー率50% (604/1207)
回答No.1

例えばこういうやつですかね? http://www.soi.wide.ad.jp/class/20010000/slides/03/6.html http://www.soi.wide.ad.jp/class/20010000/slides/03/7.html 基本的には、その擬似乱数がどのようなアルゴリズムで作られているかによって効果的なプロットの仕方も変わってくると思います。 例えば単純な線形合同法で乱数を生成する場合の欠点(の一つ)は、「a の次に b が出た場合、今度 a が出たときもまたその次に b が出る」というものなので、出てきた乱数の値を二つずつ組にして、それを座標としてプロットしてみるなどすればよいかと思います。 (上に挙げた URL では三つずつ組にして三次元でプロットしていますね)

baihu
質問者

お礼

ありがとうございます。 ご指摘のページの通りです! これはメルセンヌ・ツイスターという乱数発生法が優れていることを示しているわけですね。 試してみたのは MS Excel と 十進BASIC なのですが、それぞれの使用している乱数発生関数のアルゴリズムが分からないこともあるのでしょう、2次元/3次元のどちらを描いても、規則性が視認できませんでした。もしかすると結構優秀な乱数だということになるわけでしょうか。 周期が特定できれば、乱数をいくつごとにプロットさせるかを調整して、同じようなグラフが書けるんですね。

その他の回答 (2)

  • Jirorian
  • ベストアンサー率58% (7/12)
回答No.3

>long rand() { x=x*1103515245+12345; return x&2147483647; } C言語です BASIC的に書くならば x = x=x*1103515245+12345 x = x & 2147483647 です 二行目の&は32ビットにするためにマスクしているだけです (0x7FFF FFFF) drand48はコインテストをすれば乱数の悪さがわかります 参考URLをどうぞ

参考URL:
http://www001.upp.so-net.ne.jp/isaku/rand.html
  • Jirorian
  • ベストアンサー率58% (7/12)
回答No.2

古典的randなら2次元でも絶対に出ると思います long rand() { x=x*1103515245+12345; return x&2147483647; } で試してください 信じられないくらいの乱数の悪さを見ることが出来ます rand48なんかは周期が長いのでかなり大きいグラフにプロットする必要があるのではと思います

baihu
質問者

お礼

ご回答ありがとうございます。 > long rand() { x=x*1103515245+12345; return x&2147483647; } すみません、記載いただいた言語が読めなくて(^^; 後学のために、何て言語で、どういう式なのか、教えていただければ幸いです。 で、締め切らずにいた間、十進BASICのrnd関数で再現できました! 倍率を100倍にしたら、連続する2数の規則性が視認できました。

関連するQ&A