モンテカルロ法を用いた円周率のことで質問です

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
子コッと

モンテカルロ法を用いた円周率のことで質問です

#1

投稿記事 by 子コッと » 15年前

まず最初に下にプログラムを載せるのですが、簡単に説明をします。


半径1の円を四分割し、その中の一つを直径1の正方形で囲んだとする。

その一つの正方形の中にN個の点を打ち、その中で円の中にある点をnとし、
N個の点の数をプログラム中ではmaxとしています。

円の面積はS(つまりπ)、正方形の面積は1となるので次式で

max:n=1:S

S=max/n

となる。点の比によって円周率を求めるプログラムになっています。

私がわからない部分ですが、円の中に点があるかどうか判断する部分です。
これはどういった公式を使っているのでしょうか?

プログラム中ではこの部分です。下に全体のプログラムを載せます。

if((x*x+y*y)<=1.0)     
n++;



全体のプログラムを載せます。
//モンテカルロ法を用いた円周率の計算

#include<stdio.h>
#include<stdlib.h>
#include<math.h>

int main(void)
{
    double i,n=0.0,max=100.0;
    double x,y,pai;
    
    for(i=0;i<=max;i++){
        
        x=rand()/(RAND_MAX+1.0);
        y=rand()/(RAND_MAX+1.0);
        
        if((x*x+y*y)<=1.0)    ←この部分
            n++;
            
    }
    
    pai=n/max*4.0;
    
    fprintf(stdout,"%.10f\n",pai);
    fprintf(stdout,"%.10f\n",M_PI);
    return 0;
}




それではよろしくお願いします。

子コッと

Re:モンテカルロ法を用いた円周率のことで質問です

#2

投稿記事 by 子コッと » 15年前

すいません。少し間違えました。

円の面積ですが上ではπと書いてますが、
正確には

S=π/4

でした。プログラム中でもそうしています。

すみませんでした。

たかぎ

Re:モンテカルロ法を用いた円周率のことで質問です

#3

投稿記事 by たかぎ » 15年前

> これはどういった公式を使っているのでしょうか?

どんな答えを期待しているのかよくわかりませんが、三平方の定理とか、円の方程式とかです。

子コッと

Re:モンテカルロ法を用いた円周率のことで質問です

#4

投稿記事 by 子コッと » 15年前

たかぎさんありがとうございます。

それとすみません。私の質問の仕方が悪かったです。申し訳ありませんでした。


分からない所なのですが、どうしてこの式で円の中に点があるかどうかを
判断できるのかがわかりません。

if((x*x+y*y)<=1.0)     
n++;


再度よろしくお願いします。

たいちう

Re:モンテカルロ法を用いた円周率のことで質問です

#5

投稿記事 by たいちう » 15年前

プログラムで√という記号は使えませんが、
if (√(x*x+y*y) <= 1.0) だったら意味は理解できますか?
三平方の定理により、原点Oと点P(x, y)の距離ですので、
これが1以下ならばPは円の内部と判断できます。

xとyが実数の時、条件√(x*x+y*y) <= 1.0 と、
条件(x*x+y*y) <= 1.0は、同値ですので、
√の計算は不要です。

子コッと

Re:モンテカルロ法を用いた円周率のことで質問です

#6

投稿記事 by 子コッと » 15年前

たいちうさんありがとうございます。

理解できました。

閉鎖

“C言語何でも質問掲示板” へ戻る