#對如下紅色圖形進行面積估算
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,所以樣本點越多,估算越精確。
