モンテカルロ法の計算

2,296 views

モンテカルロ法は乱数を用いて数値のばらつきを人為的に発生させ、それを変数とした式の近似解を得る手法で、確率論的事象に対して用いることで推定値を求めることができます。
公差解析ソフトには実装されていますが、1方向の公差累積を計算するのであればExcelマクロの短いコードで実現できます。

 

'-------------------------------------------------
' モンテカルロ計算(デモ用)
'-------------------------------------------------
Public Sub monte_demo()
    Dim i As Long, j As Long
    Dim sn As Long
    Dim ct As Long
    Dim n As Double, r As Double
    Dim a() As Double, ak() As Double
    Dim sd As Double

    sn = 10000 ' モンテカルロ計算サンプル数
    ct = 5 ' 要因数
    ReDim a(sn), ak(ct)
    ' 公差値取得
    For i = 0 To ct - 1
        ak(i) = Range("A2").Offset(i, 0).Value
    Next i

    Randomize
    For j = 0 To (sn - 1)
        n = 0
        ' 1サンプルの計算
        For i = 0 To (ct - 1)
            r = Rnd
            ' 公差の幅で計算するため片側公差を2倍する
            n = n + 2 * ak(i) * r
        Next i
        ' 1サンプルの合計公差を順次配列に格納
        a(j) = n
    Next j

    ' 標準偏差(ワークシート関数利用)
    sd = WorksheetFunction.StDev_S(a)
    ' 3σ値にして戻す
    Range("B2").Value = sd * 3
End Sub

キーワード
正規分布,Excel,VBA,マクロ,乱数生成,Rnd関数