モンテカルロ法で円周率の推定値を計算することを最近習ったのですが、定積分でもそれが可能なのを知り、どうやってプログラムを組めばいいのか分からず、困っています。
例えば、定積分∫[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
No.2ベストアンサー
- 回答日時:
質問のソースはカテゴリ違いですが、
アルゴリズムに関する質問だと思いますので、
言語に依存しない部分で回答します。
f(x) = x*x の関数を、0~1の区間で積分ですね。
まず、y 軸の範囲を考えます。
グラフを書けば分かりやすいと思います。
f(0) = 0 から始まり、xが増加すれば f(x) も増加。
f(1) = 1 で終わりなので、y 軸の範囲は 0~1 とします。
---------------------------------
ループ回数 n の入力
カウント sumin を初期化
ループ開始(n 回ループ)
x に 0~1の乱数を代入(積分区間)
y に 0~1の乱数を代入(上記で計算した範囲)
ポイント(x, y) が求める面に入っていればカウントする
つまり、y < x*x の場合はカウント sumin に 1 を加算
ループ終了
結果は、(乱数範囲の面積) × (カウント) ÷ (ループ回数)
つまり、 1 * 1 * sumin / n
---------------------------------
円周率の場合とほとんど変わらないと思います。
このアルゴリズムを、お使いのBASICで記述して下さい。
そのBASICでの記述方法が分からないと言うのなら、
「その他(プログラミング)」の方が良いかも。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 順列をランダムに発生するプログラム 1 2022/11/16 12:16
- Visual Basic(VBA) VBAで時間(00:00形式)を積算(足し算)したい 1 2022/11/15 17:04
- 数学 広義積分 3 2022/12/07 12:29
- 統計学 連続型の確率変数について 6 2023/08/25 08:44
- その他(プログラミング・Web制作) 大学一年でVBAのプログラミングを勉強しているものです。来週の情報の授業で以下の問題のプログラムを勉 4 2023/01/19 16:15
- C言語・C++・C# C言語 3 2022/10/04 15:07
- 数学 「f(z)=1/(z^2-1)に関して ローラン展開を使う場合、マクローリン展開を使う場合、テイラー 3 2022/08/27 19:56
- 数学 重積分、累次積分の問題です。 範囲の書き換えがわかりません。 グラフを書いてみるとこのような範囲にな 4 2023/01/09 16:05
- Visual Basic(VBA) vba 等間隔の列に対しての計算 6 2022/05/17 20:15
- 数学 写真について質問なのですが、 ①の図の面積Sを求めるとき、②と③の図の面積、つまりS=S2+S3で求 4 2023/04/27 17:20
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
どなたかこのプログラミングを...
-
VBA for i=1 to lastrow
-
画面を強制的に再描画させる方法
-
vb.netからエクセル関数書き込み
-
vb.netです。2次元配列の要素を...
-
プログラミングについて。 1つ...
-
DoEventsが必要な理由について
-
流れ図(フローチャート)が分か...
-
VBAでの一時停止と再開の方法
-
Escキーを押すと、中断する時と...
-
範囲指定したセルを1つずつ飛...
-
GIFアニメをループさせたくない
-
ループ内での条件処理
-
vbscriptでIE自動入力(途中で...
-
javaのループ処理の結果を足し...
-
スレッド起動したフォームを正...
-
VB2010でCSVファイルの読み込み
-
UWSCの終了の仕方
-
イベントの発生を待つ
-
DOSコマンドのループ内のTIMEコ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
画面を強制的に再描画させる方法
-
VBAで3秒だけ時間を止めたい
-
VBAでの一時停止と再開の方法
-
どなたかこのプログラミングを...
-
Escキーを押すと、中断する時と...
-
UWSCの終了の仕方
-
エクセルの当番表を作っていま...
-
VBA for i=1 to lastrow
-
「偶数・奇数の和」のフローチ...
-
アクティブセルから、A列最終行...
-
DoEventsが必要な理由について
-
vb.netからエクセル関数書き込み
-
GIFアニメをループさせたくない
-
DOSコマンドのループ内のTIMEコ...
-
範囲指定したセルを1つずつ飛...
-
流れ図(フローチャート)が分か...
-
乱数の桁数指定、または範囲指定。
-
テキストボックスの名前に変数...
-
CSVファイルの特定の行だけを読...
-
vbscriptでIE自動入力(途中で...
おすすめ情報