利用蒙特卡洛方法對面積進行近似估算


#對如下紅色圖形進行面積估算
x = np.linspace(0, 2, 1000)#在0~2之間產生1000個樣本點x y = x **3 #求出對應的y值 plt.plot(x, y) plt.fill_between(x, y, where=(y >0), color='red', alpha=0.5)#畫出y>0的面積進行填充 plt.show()

 該紅色區域在一個2×8的矩形方框里面。使用蒙特卡洛方法,隨機在這個矩形里面產生大量隨機點(數量為N),計算有多少點(數量為count)落在紅色區域內(判斷條件為y<x**3),count/N就是落在紅色區域的點的比例,根據相應比例即可求出紅色區域的面積。代碼如下:

x = np.linspace(0, 2, 1000)
y = x ** 3
plt.plot(x, y)
plt.fill_between(x, y, where=(y >0), color='red', alpha=0.5)
N
= 10000 #樣本點的總量為10000,越大估算出來的結果越精確 points = [[xy[0] * 2, xy[1] * 8] for xy in np.random.rand(N, 2)]# np.random.rand(N,2)表示產生N行2列的樣本點,即N個2維樣本點

plt.scatter([x[0] for x in points], [x[1] for x in points], s=5, c=np.random.rand(N), alpha=0.5)
 plt.show()

下面為估算有多少個點落在紅色區域,並估算其面積。

count = 0
for xy in points:
    if xy[1] < xy[0] ** 3:
        count += 1
print((count / N) * (2 * 8))

結果:

      利用積分計算可知該紅色區域的精確面積為4,如果樣本點設置為1000,估算結果為4.24,如果樣本點設置為10000,估算結果為3.968,所以樣本點越多,估算越精確。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM