• ベストアンサー

モンテカルロ法 円周率

モンテカルロ法で円周率を求めたいのですが C++でプログラムを実行までは出来るんですけど それをグラフにする方法が分かりません。 (扇形みたいなヤツです。点々が沢山付くヤツです。) あと「モンテカルロ法から演習路津が求まる原理」と 「エクセルとCプログラミングで円周率を求めた時の 比較の仕方」も教えて頂きたいのです…。 沢山聞いてしまって、本当にすいません。 なにとぞ、初心者なのでよろしくお願いします。

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

>モンテカルロ法から演習路津が求まる原理 ある面積のある部分に、適当に(一様になるように)何かを落としたとしたら、 その全体の面積の一部分に何かが落ちてくる確率は全体に落ちてくる確率(1)との比率になるけど、その比率は、その面積の部分の面積と全体の面積の比率になる ということから、逆に 1/4円とそれを包む正方形の面積の比率は、そこに適当にモノを落としてその結果から比率を求めることができるということです。

t-love-m
質問者

お礼

ありがとうございます(*´∇`*) 助かります★

その他の回答 (3)

回答No.4

学生のための応用C++Builder(長谷川洋介著、p186~)という本に、モンテカルロ法を用いた円周率のグラフィックのプログラムが載っていますので、それを参考にしてみてください。

  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.2

> それをグラフにする方法が分かりません。 x,yの組をテキストで出力して、Excelでグラフにするとか。

t-love-m
質問者

お礼

回答ありがとうございます。 テキストで出力…どうやったら出来るのでしょうか… ほんと初心者なものでスイマセン;; よかったら、出力の方法とか教えて頂きたいです。

  • keroro001
  • ベストアンサー率23% (71/304)
回答No.1

とりあえず原理だけ http://yk.i.hosei.ac.jp/seminar/javalang/exercise/exer002.html 中でプログラム書いてあるけどjavaだから、少しは流用できるかもしれません。 C言語での描画は難しいのかなぁ? ちょっとわかりません。すみません。

関連するQ&A

  • モンテカルロ法 計算精度

    モンテカルロ法で円周率をc++言語でプログラムを作成して求めたのですが、精度要因って何ですか??乱数の乱数らしさでしょうか??

  • セルフテストモンテカルロ法のプログラム

    今、モンテカルロ法の勉強をしており、いろいろ調べていったらセルフテストモンテカルロ法というものがありました。文献をいろいろ読み、原理はなんとなくわかったのですが、C言語でのプログラミングをどのようにすればよいのか思い付きません。一例で良いのでわかる方、御回答をよろしくお願い致します。

  • モンテカルロ法と線形合同法

    モンテカルロ法の円周率を求める時に点の数を増やすと精度があがりますが、線形合同法の周期性を考慮した場合どこまで精度があげられますか?

  • モンテカルロ法

    モンテカルロ法で円周率の推定値を計算することを最近習ったのですが、定積分でもそれが可能なのを知り、どうやってプログラムを組めばいいのか分からず、困っています。 例えば、定積分∫[0→1]x^2dx=1/3~0.333([0→1]というのは、積分範囲です。)をモンテカルロ法で計算すると、どういうプログラムを組めばいいのでしょうか? わかる範囲で書いてみたのですが…積分の範囲をどうやってプログラミングすればいいのか、いまいち分かりませんでした。 教えていただけると、助かります。よろしくお願いします。 RANDOMIZE INPUT n SET WINDOW -0.1, 1.1, -0.1,1.1 DRAW grid SET POINT STYLE 1 LET sumin=0 FOR i=0 TO n LET x=RND LET r=x*x SET POINT COLOR 2 ! PRINT USING "(%.####, %.####)": x,y; PLOT POINTS: x,y; NEXT i PRINT sumin;n PRINT sumin/n END

  • fortran モンテカルロ法

    モンテカルロ法により円周率πを計算するプログラムを作ったのですが、以下のプログラムでモンテカルロ法から推定された円周率piの値が実行すると大きな数字になってしまって、うまく計算できてない見たです。式に問題があるのでしょうか?教えて下さい。 rogram list1_9 implicit none real(8) x, y, pi, pi0 integer :: n, i, im = 2**20 pi0 = 2.0d0*acos(0.0d0) n = 0 do i = i, im call random_number(x) call random_number(y) if(x ** 2 + y ** 2 <= 1.0d0) n = n + 1 enddo pi = 4.0d0*dble(n)/dble(im) write(*,*) ' pi, pi0, er = ', pi, pi0, pi-pi0 end program list1_9

  • BASICでモンテカルロ法

    モンテカルロ法で円周率の推定値を計算することを最近習ったのですが、定積分でもそれが可能なのを知り、どうやってプログラムを組めばいいのか分からず、困っています。 例えば、定積分∫[0→1]x^2dx=1/3~0.333([0→1]というのは、積分範囲です。)をモンテカルロ法で計算すると、どういうプログラムを組めばいいのでしょうか? わかる範囲で書いてみたのですが…積分の範囲をどうやってプログラミングすればいいのか、いまいち分かりませんでした。 教えていただけると、助かります。よろしくお願いします。 RANDOMIZE INPUT n SET WINDOW -0.1,1.1, -0.1,1.1 DRAW GRID SET POINT STYLE 1 LET sumin=0 FOR i=0 TO n LET x=RND LET y=RND SET POINT STYLE 2 IF y<x*x THEN SET POINT COLOR 4 LET sumin=sumin+1 END IF ! PRINT USING "(%.####, %.####)": x,y PLOT POINTS: x,y NEXT i PRINT 1*1*sumin/n END

  • C言語で円周率

    大学でC言語で円周率を出すプログラムを作れと言われたのですが 一度作ってみたもののうまくできず さらに先生には 「もっと説明できるように作って来い」と言われてしまって困っています。 簡単なプログラミングで作りたいのですが どなたか教えていただけるとうれしいです!

  • C言語、円周率の値が0.000000?

    いつも大変お世話になりありがとうございます。 下記のコードを実行したところ、円周率の値が0.000000になりました。 どうしてでしょうか? アドバイスの程宜しくお願い申し上げます。 #include <stdio.h> int main(void) { double pi; printf("円周率の値はいくつですか?\n"); scanf("%1f", &pi); printf("円周率の値は%fです。\n", pi); return 0; } C:\MinGW>Sample9 円周率の値はいくつですか? 3.14 円周率の値は0.000000です。

  • モンテカルロ法ベースのオセロプログラムを作りたいのですが

    今、C言語でモンテカルロ法ベースのオセロプログラムを作っているのですが、なかなかうまくいきません。 エラー内容: ある程度書いてみたのですが、実行すると「Segmentation fault」とでてしまいます。 アルゴリズム内容: 構造体を用意して、ランダムに手を打ち勝ったら手の内容と勝ち数をカウントして、構造体に格納します。最後に一番勝ったてを指すというプログラムを書いています。 質問点: 「Segmentation fault」とでてしまいます。何故なのでしょうか? 解決方法と理由を教えてください。 プログラム内で他にも変な場所があれば、教えてください。 それと、モンテカルロ法だけだと弱いので、何かいい手はないでしょうか? 質問が多くて申し訳ございませんが、教えていただければ幸いです。 オセロのプログラムデータは添付しています。 開発環境のOSはubuntuを使用しています。Windowsの時、文字化けする可能性があります。 なにとぞよろしくお願いします。

  • 囲碁のソース

    囲碁プログラミングでモンテカルロ法とUTCを用いたC言語のソースを教えてください. 検索しても出てきません. できれば,囲碁プログラミングの知識が全くないのでコンパイルしたら動くようなものをお願いします.

専門家に質問してみよう