重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

Mersenne Twisterを使って2次元の乱数を下記のように
生成しています。

1. 乱数を取得. x座標の値とする。
2. 1)で用いた乱数生成を利用して乱数を取得. y座標の値とする。

こうした作成したx,y座標のデータを見ますと、一様性が
あまりないように見えます。

これは、2次元の乱数の扱いが間違っているのでしょうか?
あるいは、周期が非常に長い乱数でも、2次元的に一様性を
保つためには、凖乱数を使うのがいいのでしょうか。

A 回答 (3件)

>​

http://phi.med.gunma-u.ac.jp/swtips/Rsim/
>作成したグラフは上記ページの二つめの図(の2次元版)
>のようになります。

2つ目の図は「ほぼ均一にプロットされているように見える。」と書いてあるとおり、
うまくいった例ですから、このぐらい均一なら問題ないのでは?
これ以上、均一な分布が欲しいのなら、格子にしてしまうか、
超一様分布(集中講義で聞いた覚えがありますが、用途は主に数値積分か。ただし、本当に一様分布より均一なのかは不明。生成アルゴリズムも不明。)
ぐらいしかないと思います。
    • good
    • 0
この回答へのお礼

何度も御手数おかけします。


現在まさに数値積分(またたは収束の早い平均値の計算)を
目指しています。

1) Monte Carloでできるだけ精度を上げた計算 (MT使用)
2) Quasi-Monte Carloを用いた計算

の二通りを進めており、1)の計算方法に問題がないかが
心配する部分でした。やりとりの間で、極端に間違った
ことをしていないということがわかり少し安心です。

2)の方法もプログラムができており、比較した一様性は
No.2のお礼の所で書きました図と同様の結果がえられています。


色々ありがとうございました。

お礼日時:2007/09/21 19:44

こちらの環境はC++(OSはlinux)です。


再度やってみました。
やはりほとんど一様に見えます。

具体的にどのように偏っているのでしょうか?
例えば、原点付近にあまり点がないとか、ムラが大きいとか。
できれば、一様性の検定して「ほーらやっぱり一様でない」と
確認できれば一番いいのですが、それは面倒ですかね・・・

>同じ乱数生成器grnd()をxとyに同時に使用している点

それは問題ないはずです。
    • good
    • 0
この回答へのお礼

ご確認ありがとうございます。

一様性の計算の仕方は勉強不足のためすぐにできそう
にはありません。


また、画像が貼れないため、かわりにwebページで似たような
結果を探しました。

http://phi.med.gunma-u.ac.jp/swtips/Rsim/


作成したグラフは上記ページの二つめの図(の2次元版)
のようになります。

確かに変な周期性は見えないのですが、必ずしも均質な
分布でないように思えます。黒が濃く見える部分と薄く
見える部分ができています。

Monte Carlo+MTとQuasi-Monte Carloの2次元プロットにて
計算した結果では、下記ページにある左と右の図のように
明確な違いが見えます。

http://public.lanl.gov/kmh/uncertainty/meetings/ …


Monte Carlo+MTを間違って使って、悪い分布になってしまって
いるということでないかを知りたかったのですが、ここまで
の所では問題はなさそうなのですね。

お礼日時:2007/09/21 17:51

問題ないはずです。


「メルセンヌツイスタによって生成された2つの乱数を
2次元プロットしてみた」ということでよいと思いますが、
それは以前やってみたことがあります。

よければ、プログラムを見せてください。
だめなら、「1)で用いた乱数生成を利用して」の部分を
もう少し詳しく説明してください。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。


プログラム(Fortran)は単純に下記のようにしています。ここで
grnd()がMTから乱数を読み取る部分です。


do i=1,10000
x = grnd()
y = grnd()
print *, x,y
end do

同じ乱数生成器grnd()をxとyに同時に使用している点
など問題ないでしょうか?

お礼日時:2007/09/21 15:49

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!