python如何利用蒙特卡洛平均值法求定積分

2021-10-23 09:16:32 字數 1961 閱讀 2283

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 也稱統計模擬方法,是二十世紀四十年代中期由於科學技術的 發展和電子計算機的發明,而被...