見出し画像

ガウス分布のもとで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/

この記事が気に入ったらサポートをしてみませんか?