資料請求番号:SH43
Excel VBAマクロでシンプソン法を使い、積分計算を実行する。
シンプソン法は手軽に行えてかつ、精度の高い積分の計算アルゴリズムとして多くの工学系学生やエンジニアに支持されています。
本記事では、このシンプソン法をVBAマクロに実装し、積分計算を行いました。
その備忘録を、実際のソースコードと共に記します。
シンプソン法
シンプソン法は積分したい関数を二次関数の集合体と考え、二次関数の積分をm回行うことで、任意の関数の積分ができるようになる。
という思想のもと開発されました。
シンプソン法の詳細はこちら!
基本から詳しく説明しています!
今回は、ソースコードが主役なので、シンプソン法の理論に関する詳しい勉強は上のページでお願いします。
シンプソン法 例題
正規分布
ソースコード
あと、Functionプロシージャが重要な役割を果たしているんで、それについての説明のリンクも貼っておきます!
/* —-Simpson Method———- */
Public mu, sigma, pi As Double
Sub simpson()
Dim a, b As Double
Dim m As Double
Dim h As Double
Dim S As Double
Dim k As Integer
‘Calculation properties
a = Cells(1, 3)
b = Cells(2, 3)
m = Cells(3, 3)
h = (b – a) / (2 * m)
Cells(4, 3) = h
‘Constants
mu = Cells(5, 3)
sigma = Cells(6, 3)
pi = Cells(7, 3)
‘ZeroSet
S = 0
Cells(2, 5) = a
Cells(2, 6) = F1(a)
Cells(2, 7) = S * h / 3
‘*********roop*********
For k = 1 To m
‘Simpson roop
S = S + F1(a + (2 * k – 2) * h) _
+ 4 * F1(a + (2 * k – 1) * h) _
+ F1(a + 2 * k * h)
‘Graphic roop
Cells(k + 2, 5) = a + 2 * k * h
Cells(k + 2, 6) = F1(a + 2 * k * h)
Cells(k + 2, 7) = S * h / 3
‘Calculation Condition
Cells(11, 2) = k
Cells(11, 4) = m
‘Result
Cells(13, 3) = S * h / 3
Next k
‘*********roop end*********
End Sub
Function F1(ByVal x As Double) As Double
F1 = (2 * pi * sigma) ^ (-0.5) * Exp(-(x – mu) ^ 2 / (2 * sigma))
End Function
/* —————————– */
偏差値はσが1増えたら10増えるように規格化されているって話。
あと、試行回数の表示がされてバグがあったとき、わかりやすかね。
Function F1(ByVal x As Double) As Double
F1 = (2 * pi * sigma) ^ (-0.5) * Exp(-(x – mu) ^ 2 / (2 * sigma))
End Function
これで何計算しているかも一目でわかるから割といい「積分計算機」だと思うよ!
いやぁ~。これは助かるよ!ありがとう!
いえいえ~!!
このVBAのソースコードを使って、関数の積分が解けると思うから、ぜひコピペして色々試してみてね!
おまけ① 三角関数
なぁなぁ。この動画知りよるん?
出典:はなおさん 「東大生の店員に理系風に注文したら、賢すぎて返り討ちにされました。東大理三恐るべし、、、」
積分サークル主催のイベントについて。3:45あたりから。
出典:はなおさん 「YouTubeバレて阪大に呼び出されました。。。」
当たり前じゃない!このワタシがちょっと関数形変わっただけで使えなくなるプログラム書くと思う?
いずれにしろ、膨大な計算経験と積分の基礎基本がなってないとできんことやから、そこはさすが東大理Ⅲやと思うたいね。
おまけ② 友蔵の頭の体積
出典:はなおさん 「積分サークルの入部テストがヤバい。」
まとめ
今回はシンプソン法による積分の計算をVBAでやってみましたという内容の備忘録でした。
コメントを残す