前回行ったモンテカルロ積分で確率収束を感覚的に理解することができました。
ここで、その収束速度についてある一定の法則が成り立ちそうであったため、検証してみることにしまたした。
目次
確率収束
確率収束とは、試行回数nが十分大きいとき、以下のような式が成り立つことを言います。
$$\lim_{n \to \infty}Pr(|X_n-c|\leq\epsilon)=1\quad \forall\epsilon>0$$
ここで、
$$\bar{X_n}=\frac{1}{N}\sum_{k=1}^{n}X_k$$
とすれば、
$$\lim_{n \to \infty}Pr(|\bar{X_n}-\mu|\leq\epsilon)=1$$
$$\iff \lim_{n \to \infty}Pr(|\bar{X_n}-\mu|>\epsilon)=0\quad(\forall\epsilon>0)$$
が成り立ちます。
積分近似の収束
今回はせっかくなのでモンテカルロ積分による近似値と真値の差の収束を見ていきます。
以下のような定積分を定義します。
$$\theta = \int_{4}^{100}sin(sin(\frac{1}{x}))dx$$
一様分布の確率密度関数を考慮して閉区間からのランダムサンプリング平均を以下のように定義すると、
$$\hat{\theta} = \frac{100-4}{N}\sum_{k=0}^{n}f(X_k)$$

確率収束の式から
$$\lim_{n \to \infty}P(|\widehat{\theta}-\theta |\leq\epsilon) = 1 \quad (\forall\epsilon >0)$$
つまり
$$\therefore\widehat{\theta}=\frac{1}{N}\sum_{k}^n f(X_k)\simeq\theta$$
実測値
初めに、sympyを使用して積分真値を求めておきます。
import matplotlib.pyplot as plt
import numpy as np
import sympy as sp
sp.init_printing(use_unicode=True)
x = sp.symbols('x')
f = sp.sin(sp.sin(1/x))
int_val= sp.integrate(f,(x,4,100)).evalf()
print(int_val)
>>>
3.20857245721918
