Monte-Carlo
任意函數的蒙特卡羅模擬
我熟悉近似 PDF 積分的 MC 方法。但在這個問題上,我很好奇我們如何將這些方法用於其他問題。例如評估 $ \int_{0}^{1} x^2 dx $ . 我選擇這個函數是因為分析評估積分是微不足道的;我只是好奇如何設計一個 MC 模擬來近似分析可以找到的值。
編輯@Periwinkle,我找到了下面的代碼片段(為了便於閱讀而對其進行了清理)並發佈在下面。
def mc_int(upper, lower, size, func): uniform_samples = np.random.uniform(low=lower, high=upper, size=size) transformed_samples = func(uniform_samples) expected_value = np.average(transformed_samples) * (upper - lower) return expected_value def f(x): return x**2 mc_int(lower=0, upper=1, size=1000, func=f) >>> 0.3333
根據您的評論,我不明白為什麼
upper - lower
需要按比例縮放。你能解釋一下嗎?
畫 $ n $ 對 $ (x,y) $ , iid 均勻分佈在單位平方中。計算這些對中有多少滿足 $ y<x^2 $ , 讓這個數為 $ k $ . 然後 $$ \mathbb P(Y<X^2) = \int_{[0,1]^2} \mathbb I_{y<x^2},\text d(x,y) = \int_0^1 x^2,\text dx\approx\frac{k}{n}. $$
代碼:
xx <- seq(0,1,by=.01) plot(xx,xx^2,type="l",lwd=3) n_sims <- 1e4 set.seed(1) sims <- cbind(runif(n_sims),runif(n_sims)) index <- sims[,2]<sims[,1]^2 points(sims,pch=19,cex=0.4,col=c("red","black")[index+1]) sum(index)/length(index)
這是一個關於近似的著名練習的變體 $ \pi $ (實際上 $ \frac{\pi}{4} $ ,通過在單位正方形中使用四分之一圓)。