from scipy import stats
from scipy.stats import norm
import numpy as np
import matplotlib.pyplot as plt
def f(x):
return np.sin(x) * x;
def intf(x1, x2):
return (np.sin(x2)- x2 * np.cos(x2)) - (np.sin(x1) - x1 * np.cos(x1));
def p(x, mu, sig):
return (1 / np.sqrt(2 * np.pi * sig ** 2)) * np.exp(-(x - mu) ** 2 /(2.0 * sig ** 2));
def intp(x1, x2, mu, sig):
return (norm.cdf(x2 - mu, scale = sig) - norm.cdf(x1 - mu, scale = sig));
def plot(xmin, xmax, mu, sig):
x = np.linspace(xmin, xmax, 1000);
plt.subplot(1,2,1);
plt.plot(x, f(x), 'b', label = u'original $x\sin(x)$');
plt.plot(x, p(x, mu, sig), 'r', label = u'importance sampling function: normal');
plt.xlabel('x');
plt.legend();
plt.show();
def demo():
# example: calculate ∫sin(x)xdx
mu = 2;
sig =.7;
xmax = np.pi
xmin = 0
n = 1000
plot(xmin, xmax, mu, sig);
answer = intf(xmin, xmax);
x = np.random.uniform(low = xmin, high = xmax, size = n)
montecarlo = (xmax - xmin) * np.mean(f(x))
xis = mu + sig * np.random.randn(n, 1);
xis = xis[(xis < xmax) & (xis > xmin)];#概率密度函式在取樣區間[0 pi]上的積分需要等於1
normal = intp(xmin, xmax, mu, sig)
importancesampling =np.mean(f(xis) / p(xis, mu, sig)) * normal # 因此,此處需要除乙個係數即p(x)在[0 pi]上的積分
print(montecarlo);
print(importancesampling);
print(answer);
if __name__ == '__main__':
demo();
先上段**,占個坑。過幾天補上文字說明;
結合新章節深入;
mh取樣演算法推導 重要性取樣小結
最近在看一篇講ssr的ppt,裡面提到了根據ggx分布做重要性取樣,其實之前或多或少的了解過重要性取樣演算法,不過當時沒有認真的總結過這個問題,也沒有想過要認真的推導相關的公式。這篇給文章的主要目的就是給看過的一些文章做個總結,推導一下相關的公式,以免自己會忘記。接下來會分幾個步驟介紹一下與重要性取...
強化學習中的重要性取樣
在之前內容的整理中涉及了一些重要性取樣的內容,在介紹蒙特卡羅離線策略 時有所提及。其中詳細介紹了到底什麼是重要性取樣。這篇博文主要想更加深刻得思考為什麼用的是重要性取樣方法?參考鏈結中一句話說的很好 重要性取樣出現的原因是因為原始分布難以直接取樣,故需要借助乙個簡單 可取樣的分布來計算期望。但強化學...
定時的重要性
2.wm timer訊息 是又定時器發出的訊息 首先我們先建立乙個定時器 函式原型 unit settimer hwnd hwnd,uint nidevent,uint nelapse,timerproc lptimerfunc 要建立定時器,還需要 a.視窗控制代碼 b.選擇識別符號 c.微秒級的...