モンテカルロ法 – プログラミング – Home

通知
すべてクリア

[解決済] モンテカルロ法


コタロー
 コタロー
(@コタロー)
ゲスト
結合: 19年前
投稿: 5
Topic starter  

モンテカルロ法を使ってπの近似値を求めるプログラムを教えて下さい。

・試行は20000回
・ある乱数Rが与えられたときにそれを使って新しい乱数を作り出す([0,1)間の一様乱数を発
生させる)プログラムを関数として作り、それを利用する。

というかたちにしたいのですが・・

分かる方、お願いします。


引用未解決
トピックタグ
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

0. count = 0;
1. [0,1) で二つの乱数 x, yを生成する
2. 点(x,y)が半径1の円の内部ならcount = count+1;
3. 1,2を2000回繰り返す。
4. count/20000 は半径1の4分円の面積:Π/4 に近侍しているハズ


返信引用
コタロー
 コタロー
(@コタロー)
ゲスト
結合: 19年前
投稿: 5
Topic starter  

お返事ありがとうございます。
流れは大体分かったのですがプログラムが組めません。

・乱数を関数からもってくるにはどういう戻り値にするか
・乱数をx、yにあてはめていくにはどうすればいいか

などを教えていただけるとうれしいです。
本当に初歩的な質問で申し訳ありません;


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

まず本を買ってみてください。
参考
http://www.amazon.co.jp/exec/obidos/search-handle-form/503-7666116-0127913

やはり、何事も基本を覚えてからじゃないと先へ進めない思います。


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

リンクをはれませんでした。
www.amazon.co.jpで「モンテカルロ法」を検索すると出てきます。


返信引用
コタロー
 コタロー
(@コタロー)
ゲスト
結合: 19年前
投稿: 5
Topic starter  

ご紹介ありがとうございました。

基本を覚えるのはやはり大切だと思うので、本の購入も考えてみたいと思います。
しかし、このモンテカルロ法はできればはやく教えていただきたいので、どなたか分かる方がい
ればお願いしたいのですが・・


返信引用
xyz
 xyz
(@xyz)
ゲスト
結合: 22年前
投稿: 8
 

要するに宿題か何かで、しかも自分でやる気はない、ということだな


返信引用
コタロー
 コタロー
(@コタロー)
ゲスト
結合: 19年前
投稿: 5
Topic starter  

宿題ですが、やってもできないんで教えていただきたいのです。
やはりだめでしょうか・・


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

>しかし、このモンテカルロ法はできればはやく教えていただきたいので、
そのためには、本を買って覚えましょう。
それが一番の近道です。


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

追伸、
僕は、「モンテカルロ法」は詳しくないのですが、
たとえ詳しい人が教えてもどうどうめぐりするだけだと思います。


返信引用
tetrapod
 tetrapod
(@tetrapod)
ゲスト
結合: 21年前
投稿: 830
 

[0, 1) を返す関数 drand48() が自作できたなら

for (int iter=0; iter<NNNNN; ++iter) {
// (x,y) のペアを作成
double x=drand48();
double y=drand48();
// それが円の内側であるかどうか判定
if (x*x+y*y<1.0) ++n;
}
// あとは NNNNN と n の関係からπが求められる


返信引用
kure
 kure
(@kure)
ゲスト
結合: 19年前
投稿: 48
 

επιστημηさんの説明をもう少し判りやすくしてみます。

中心角が90度の第1象限に存在する扇形を考えます。
このとき扇形の面積は半径Rを用いてR^2Π/4となります。 (4

モンテカルロ法とは乱数によって値を近似する方法全般のことを指しますが、
この場合は乱数によって正方形の面積と扇形の面積の比を近似することで
Πの近似値を取得することが出来ます。
ここでは1辺2Rの正方形の面積S=4R^2に対して半径Rの円の面積S'=R^2πを用いると
S/S'=4/πになりπ=4S'/Sになるという関係を用います。

具体的には区間[0,1)の範囲の乱数x,y(x軸、y軸)を生成し (1
座標(x,y)が区間[0,1)に含まれるかどうかをカウントします。 (2
これを十分な回数(ここでは20000回)繰り返し、
20000回のうち、円に含まれる部分の数/20000が扇形の面積/正方形の面積(S'/S)に
近似することになります。 (3
これをπ=4S'/Sに適用することでπを求めることができます。

> ・乱数を関数からもってくるにはどういう戻り値にするか
> ・乱数をx、yにあてはめていくにはどうすればいいか

これはC/C++言語の基礎の関数についての質問であり、モンテカルロ法とは
なんの関係もありませんので、教科書や書籍を読んでください。

乱数を発生させる関数がわからないのであれば、
randという関数がstdlib.hに定義されていますので
それで十分であればそれを使ってみてください。


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

宿題であれば「わかりませんでした」で済まされます。
答えだけ教えてもらって提出するより、素直にわからないと告白したほうが今後のため
でしょう。


返信引用
コタロー
 コタロー
(@コタロー)
ゲスト
結合: 19年前
投稿: 5
Topic starter  

ありがとうざいました。

宿題の質問は自分の為にならないと分かっていながらも、
どうしてもできなかったので質問させていただきました。

答えていただいた方、意見を述べていただいた方にお詫びとお礼を申し上げます。

アドバイスを参考に問題も無事解くことができました。
ほんとうにスイマセンでした;


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました