[VBA] モンテカルロ法による定積分の近似計算

モンテカルロ法による定積分の計算

 関数 $f(x)=x^2$ の定積分
 
\[I=\int_{0}^{a}x^2dx\]
モンテカルロ法 とよばれる手法で計算してみます。

 VBAモンテカルロ法による定積分

 図にある面積 $a\times a^2=a^3$ の長方形の中にランダムな点 $(x,\:y)$ を $N$ 個発生させて、そのうち黄色の網掛け部分、すなわち
 
\[y\leq f(x)\]
に入った回数が $n$ 回であったとすると、
 
\[I=\int_{0}^{a}x^2dx\simeq\frac{n}{N}a^3\]
というように近似計算できます。

 'モンテカルロ法による定積分の計算

 Sub MonteCarloIntegral()

 Dim x As Double, y As Double
 Dim a As Double, itg As Double
 Dim n As Long, k As Long, ct As Long

 '積分の上限値
 a = 3

 Randomize

 '試行回数の設定
 n = 1000

 For k = 1 To n

 '無作為な点 (x, y) を1つ発生させます
 x = a * RND
 y = a ^ 2 * RND

 'y < f(x) ならば
 If y < x ^ 2 Then

 'カウント数に 1 を加えます
 ct = ct + 1

 End If

 Next k

 '積分近似値を計算します
 itg = ct * a ^ 3 / n

 Debug.Print itg

 End Sub

 真値 (9) と比較しやすいように、上限を $a=3$ としてあります。試行回数は $N=10^3$ です。マクロを実行すると 9 の近傍値が現れるはずです。$N$ の値を大きくするほど精度は上がりますが、そのぶん処理に時間がかかります。$N=10^5$ でも 3 桁ほどの精度しかないので、定積分をわざわざこの手法で行うメリットはありませんが(シンプソンの公式など他にいくらでも有用な方法があります)、モンテカルロ法は色々な分野のシミュレーションに応用がきくので、そのアルゴリズムを知っておいて損はありません。

 ≫ VBA 数値計算トップページ

スポンサーリンク
末尾広告
末尾広告

コメントをどうぞ

メールアドレスが公開されることはありません。