python中如何利用蒙特卡洛平均值法求定積分?
1、蒙特卡洛 (monte carlo) 求定積分概述
蒙特卡洛方法也稱統計模擬方法、隨機抽樣技術,是基於「隨機數」、概率統計理論為基礎的數值計算方法。蒙特卡洛定積分主要思想就是均勻分布生成的隨機數,將積分符號轉化為求和,從而實現快速求解目的。主要有三種方法:隨機投點法、平均值法、重要抽樣法。
2、平均值法求定積分
計算過程如圖1
其數學公式為:
3、定積分值誤差檢驗
方根誤差(root square error)是觀測值與真值(理論值)偏差平方的平方根,是用來衡量觀測值同真值之間的偏差。如圖2,隨取樣數量的增加,誤差逐漸降低。在達到一定數量(200)次取樣之後,誤差變化不大。說明取樣次數提高到一定值後,對運算精度變化影響較少。進而採取改變抽樣法來減小方差,從而提高積分計算的精度。(此不在本次運演範圍)
1、要求:根據上述基本原理,用python程式驗證蒙特卡洛求定積分計算過程
2、具體**
import numpy as np
import pylab as pl
deffy
(x):
return x**3+
4*x*np.cos(x)
defdfy
(x):
return
3*x**2+
4*np.cos(x)-4
*x*np.sin(x)
defmonto
(x,a,b)
:return
(b-a)
/len
(x)*
sum(dfy(x)
)def
integral
(a,b)
:return fy(b)
- fy(a)
a,b,n=10,
15,1000
vm=np.ones(n)
x=np.linspace(a,b,n)
y=np.ones(n)
vi=integral(a,b)
for i in
range
(n):
x = np.random.uniform(a,b,i+1)
vm[i]
= monto(x,a,b)
y[i]
= dfy(x[i]
)
pl.subplot(
212)
pl.title(
" rse "
)pl.plot(
range
(n), np.sqrt(
(vi-vm)**2
))pl.xlabel(
"monte carlo sampling point"
)pl.subplot(
211)
pl.title(
"function curve"
)pl.plot(x,y,label=
'$y=3*x^2+4*cos(x)-4*x*sin(x)$'
)pl.legend(loc=
'upper left'
)pl.show(
)
3、執行結果 python蒙特卡洛求定積分 蒙特卡洛定積分(一)
一 蒙特卡洛模擬法分類 蒙特卡洛法模擬法從其應用方面來劃分,可以分成以下三種形式 1 直接蒙特卡洛模擬。採用隨機數學咧來模擬複雜隨機過程的效應。2 蒙特卡洛定積分 間接蒙特卡洛模擬 利用隨機數序列計算積分的方法。積分維數越高,該方法的積分效率就越高。3 metropolis蒙特卡洛模擬。以 馬爾可夫...
蒙特卡洛理解
蒙特卡羅演算法並不是一種演算法的名稱,而是是一類隨機方法的統稱。這類方法的特點是,可以在隨機取樣上計算得到近似結果,隨著取樣的增多,得到的結果是正確結果的概率逐漸加大,但在 放棄隨機取樣,而採用類似全取樣這樣的確定性方法 獲得真正的結果之前,無法知道目前得到的結果是不是真正的結果。從特性特性來說,我...
蒙特卡洛演算法
從今天開始要研究sampling methods,主要是mcmc演算法 contents 1.蒙特卡洛介紹 2.蒙特卡洛的應用 3.蒙特卡洛積分 1.蒙特卡洛介紹 蒙特卡羅方法 monte carlo method 也稱統計模擬方法,是二十世紀四十年代中期由於科學技術的 發展和電子計算機的發明,而被...