蒙特卡洛方法可以計算任意乙個積分的值。
下面以求∫1
0x2d
x 的定積分,定義域為[0,1], x2
的值域為[0,1]。 在座標區域0≤
x≤1 ; 0≤
y≤1 內撒點,用縱座標j小於等於i2
的所有點(i
,j) 佔總點數的比例近似估計定積分的值。
# -*- coding:utf8 -*-
import numpy as np
import matplotlib.pyplot as plt
definterplote_exp
(up, down, n):
x = np.random.uniform(up, down, (n,))
y = np.random.uniform(up, down, (n,))
incircle = np.sum(y - np.power(x, 2) <= 0.0)
error = 1.0/3 - incircle * 1.0/n
######################################
fx = np.linspace(0.0, 1.2, 3600)
fy = np.power(fx, 2)
######################################
plt.fill_betweenx(fy, 1.0, fx, where=fx <= 1.0, facecolor='red')
rx = np.asarray([0.0, 1.0, 1.0, 0.0, 0.0], dtype = np.float)
ry = np.asarray([0.0, 0.0, 1.0, 1.0, 0.0], dtype = np.float)
plt.plot(rx,ry, color="g")
plt.plot([0.0, 1.2],[0.0, 0.0], color="b")
plt.plot([0.0, 0.0],[0.0, 1.2], color="b")
plt.plot(fx,fy, color="b")
cl = ["b"
if j - i**2
<= 0.0
else
"r"for i, j in zip(x,y)]
plt.scatter(x, y, c=cl)
plt.text(0.2, 1.4, s = r"$\int_^ x^2 dx=\frac$")
plt.text(0.2, 1.2, s = "error=, n=".format(n=n, error=error))
plt.show()
if __name__ == "__main__":
interplote_exp(0.0, 1.0, 10000)
pass
輸出的圖示為:
參考:
python蒙特卡洛求定積分 蒙特卡洛定積分(一)
一 蒙特卡洛模擬法分類 蒙特卡洛法模擬法從其應用方面來劃分,可以分成以下三種形式 1 直接蒙特卡洛模擬。採用隨機數學咧來模擬複雜隨機過程的效應。2 蒙特卡洛定積分 間接蒙特卡洛模擬 利用隨機數序列計算積分的方法。積分維數越高,該方法的積分效率就越高。3 metropolis蒙特卡洛模擬。以 馬爾可夫...
蒙特卡洛方法
蒙特卡洛方法 monte carlo method,也有翻譯成 蒙特卡羅方法 是以概率和統計的理論 方法為基礎的一種數值計算方法,將所求解的問題同一定的概率模型相聯絡,用計算機實現統計模擬或抽樣,以獲得問題的近似解,故又稱隨機抽樣法或統計試驗法。上述就是蒙特卡洛方法的基本概念,比較抽象,下面結合實際...
蒙特卡洛方法
這個演算法是用來求解積分和一些運算的,主要就是通過概率模擬的方法,比如對於 或者積分 import random def calpai n 1000000 r 1.0 a,b 0.0,0.0 x neg,x pos a r,a r y neg,y pos b r,b r count 0 for i ...