ガウス分布のもとでf(x)=x, f(x)=x^2の期待値を計算
モンテカルロ法を用いて、ガウス分布$${P(x)}$$のもとで$${f(x)=x, f(x)=x^2}$$の期待値を計算してみます
$${f(x)=x, f(x)=x^2}$$のときの期待値はそれぞれ0と1になるとのことなので、実際にPythonを用いて確認してみます
モンテカルロ法で期待値を得るためには、
$${\displaystyle \lim_{K\to \infty} \frac{1}{K} \sum_{k=1}^K f(x^{(k)})}$$
を計算すれば良いので、
Pythonを用いて以下のように計算できます。
import numpy as np
# 乱数の個数を指定
K=100000
# 一様乱数を生成
p = np.random.uniform(0, 1, K)
q = np.random.uniform(0, 1, K)
# ボックスミュラー法によりガウス乱数に変換
x=np.sqrt(-2*np.log(p))*np.cos(2*np.pi*q)
exp_x=np.sum(x)/K # f(x)=x として期待値を計算
# 答えは0.00280
答えはおおよそ0となります
また、$${f(x)=x^2}$$の期待値も同様に計算でき、答えは約1となります
import numpy as np
# 乱数の個数を指定
K=100000
# 一様乱数を生成
p = np.random.uniform(0, 1, K)
q = np.random.uniform(0, 1, K)
# ボックスミュラー法によりガウス乱数に変換
x=np.sqrt(-2*np.log(p))*np.cos(2*np.pi*q)
exp_x=np.sum(x*x)/K # f(x)=x^2 として期待値を計算
# 答えは1.00756
Python を用いて$${f(x)=x, f(x)=x^2}$$の期待値がそれぞれ0と1になることが確認できました
参考文献:
花田政範 松浦壮, ゼロからできるMCMC マルコフ連鎖モンテカルロ法の実践的入門, 講談社, 2020
https://book.dmm.com/product/4018175/b900vkds09949/