Monte-Carlo
任意函數的蒙特卡羅模擬
我熟悉近似 PDF 積分的 MC 方法。但在這個問題上,我很好奇我們如何將這些方法用於其他問題。例如評估 ∫10x2dx . 我選擇這個函數是因為分析評估積分是微不足道的;我只是好奇如何設計一個 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<x2 , 讓這個數為 k . 然後 P(Y<X2)=∫[0,1]2Iy<x2,d(x,y)=∫10x2,dx≈kn.
代碼:
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)
這是一個關於近似的著名練習的變體 π (實際上 π4 ,通過在單位正方形中使用四分之一圓)。