« Python+NumbaでWikipediaのList of chaotic mapsを1つずつ描く(その2) Tinkerbell Map。あのティンカーベルに似ている? | トップページ | 6月19日に公開された厚生労働省の新型コロナウイルス接触確認アプリ(COCOA) をiPhoneにインストールした。 »

2020年6月19日 (金)

円内部(2次元)の一様乱数でアホなミスをする、、、球内部(3次元)のときだけ角度に気を付けると思っていた、、、半径もか、、、Pythonで図示して確認する。

ちょっとしたモンテカルロシミュレーション(ってほどでもないが)で円の内部の一様分布している乱数が必要となった。

ああ、これは3次元はヤコビアンとかで気を付けないと、2次元はそのままでよかったな、と思って

x=r cosθ

y=r sinθ

で[0,1)の一様分布する乱数u,vを使ってr=u, θ=2πvとして計算したら、、、

Circle_uniform_random1

あれ?真ん中が濃いぞ?

・・・ああ、2次元でも半径は変換しないとダメか! r dr dθ = d(r^2/2) dθなので

r=√u としないとダメだった、、、

例えばこんなところ。

https://qiita.com/aa_debdeb/items/e416ae8a018692fc07eb

変換すると、、、

Circle_uniform_random2

ちゃんと一様っぽくなった。こんなことまで忘れていてダメダメ、、、

ついでに3次元も。

http://be.nucl.ap.titech.ac.jp/~koba/cgi-bin/moin.cgi/%E7%AD%89%E6%96%B9%E7%9A%84%E3%83%93%E3%83%BC%E3%83%A0

なにも考えず

x=r cosφ sinθ

y=r sinφ sinθ

z=r cosθ

で、[0,1)の一様分布する乱数u,vを使ってr=u, φ=2πv, θ=πwとして計算したら、、

Sphere_uniform_random1

案の定、θ=0,πの方向で濃くなる。これは

sinθ dθ dφ = d(-cosθ) dφなので

φ=2πv

θ=arccos(2*w-1)

これは覚えていたのでやってみたが、

Sphere_uniform_random2

真ん中に集まる、、、のも半径の変換を忘れているから。

実際は r^2 sinθ dr dθ dφ = d(r^3/3) d(-cosθ) dφ

なので

r=∛u

φ=2πv

θ=arccos(2*w-1)

とすればようやく一様な球に。

Sphere_uniform_random3

※表示はPython+Matplotlibを使ってます。

« Python+NumbaでWikipediaのList of chaotic mapsを1つずつ描く(その2) Tinkerbell Map。あのティンカーベルに似ている? | トップページ | 6月19日に公開された厚生労働省の新型コロナウイルス接触確認アプリ(COCOA) をiPhoneにインストールした。 »

学問・資格」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

« Python+NumbaでWikipediaのList of chaotic mapsを1つずつ描く(その2) Tinkerbell Map。あのティンカーベルに似ている? | トップページ | 6月19日に公開された厚生労働省の新型コロナウイルス接触確認アプリ(COCOA) をiPhoneにインストールした。 »

最近の記事

最近のコメント

2025年1月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
フォト
無料ブログはココログ