【Excelで機械学習】モンテカルロ積分①難しい積分が誰でも簡単にExcelで解ける

2021年8月30日

高校で習った積分なんて忘れてしまったという人がほとんどだと思いますが、確率分布を実務で使うには必要です。

といっても、試験に出てきたような難しい計算は不要です。

数学が赤点の人でも、東大に合格するような人でも解けない難しい積分が解ける方法を紹介します。

(本記事に積分の記号や計算は一切出てきません)

 

積分とは刻んで足すこと

下のグラフを見て下さい。

 

青の線はy=x2のグラフです。

簡単な二次関数です。

そして、ピンクの部分の面積がy=x2積分値です。

つまり積分とは、関数とx軸で囲まれた部分の面積を求めることです。

これを求めるために、高校で難しい計算をしていたわけです。

 

でも近似解であれば、そこまでする必要はありません。

グラフを半分に切って、ザックリと計算すると次のようになります。

 

本当の面積は0.333…ですので、倍くらい違います。

それでは4つに切るとどうなるでしょう。

 

0.47ですので、だいぶ0.333…に近づきました。

ですので、刻む数を増やしていけば精度が上がることが予想できます。

 

仮に1,000個に刻んでみましょう。

すると長方形の幅は無視してよいでしょう。

幅を無視すると長方形の面積がゼロになってしまいますので、代わりに高さ(f(x)のこと)の平均を取ると、それが積分の近似値になります。

 

これをExcelでやってみましょう。

下のようにxとf(x)の列を作り、

xは0から0.001刻みで1まで

f(x)はxの二乗の計算式

を入れます。

 

そして、できた1,000個のf(x)の平均を取ると0.3335になります。

もっと多く刻むと0.3333…に限りなく近づいていきます。

 

乱数を使う方法

これと似たような方法で、乱数を使う方法もあります。

ExcelではRAND関数で0から1までの乱数を生成してくれます。

 

上の図で、R列のセルにはすべて「=RAND()」を入力していますが、0から1までの実に様々な数字が表示されています。

偏らないように満遍なく乱数が生成されているのです。

このように満遍なく生成される乱数を一様乱数といいます。

 

先ほど0から1までの間を1,000個で等間隔に刻みましたが、この一様乱数を1,000個作れば代用できます。

勿論、厳密には同じになりませんが、刻む数を増やせば(一様乱数を多く生成すれば)近似的に同じことになります。

 

試しにやってみましょう。

xに1,000個の乱数を入れて、f(x)=x2を1,000個作り、その平均を計算します。

これを10回行って平均を取ると、0.33602になりました。

 

このように、刻む代わりに一様乱数を使っても、積分の近似解が求められます。

 

複雑な関数で試してみる

この方法でどんな関数でも積分できます。

もっと複雑な関数

f(x)={sin(30x2)/x – cos(20x)/ex + √(5x)}2

で試してみましょう。

この関数をグラフにするとこうなります。

 

この積分が解ける人がいたらお目にかかりたいくらいですが、乱数を使って計算すると簡単に解けます。

 

B列に0~1の一様乱数を1,000個生成し、C列には

f(x)={sin(30x2)/x – cos(20x)/ex + √(5x)}2

の計算式をB列を参照して入力します。

そして、C1セルには1,000個のf(x)の平均値を入力します。

これを横に10個同様に作り、f(x)の平均の平均を計算すると、積分結果は8.95となりました。

 

他の方法で計算したもっと精度の良い近似値8.94と比較しても、同等の近似値が算出されました。

 

実際、高校で習ったようなやり方で解ける積分というのはほんの一部です。

解きやすい特殊な例が問題として出題されていたのです。

ですので、実務ではこのような数値計算による近似解で問題なく、このようにExcelで簡単に計算することができます。

このように積分の近似解を得る方法をモンテカルロ積分といい、名前によらず誰でも簡単に使いこなせる方法です。

 

もう少し詳しく知りたい人はこちらもどうぞ。

>> 【Excelで機械学習】モンテカルロ積分②なぜ積分区間b-aを掛けるのか?の直観的な解説

>> 【Excelで機械学習】被積分関数からサンプリングする無限区間のモンテカルロ積分をExcelで

>> 【Excelで機械学習】重点サンプリングで無限区間のモンテカルロ積分をExcelで試す