Monte-Carlo

任意函數的蒙特卡羅模擬

  • October 5, 2021

我熟悉近似 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} $ ,通過在單位正方形中使用四分之一圓)。

引用自:https://stats.stackexchange.com/questions/547132

comments powered by Disqus