蒙特卡洛方法的使用 計算pi值與積分計算

2021-09-10 03:51:05 字數 1899 閱讀 1850

參考:

# -*- coding: utf-8 -*-

"""created on tue jan 22 07:38:15 2019

@author: ylz

用此種方法對pi值進行估計,就是蒙特卡洛方法

蒙特卡洛方法:

1,產生大量的資料樣點

2,對資料樣點進行依據條件進行分割,分類

3,用每個類別中樣點數量的統計值,來計算某些引數.

"""import numpy as np

import matplotlib.pyplot as plt

from matplotlib.patches import circle

#用蒙特卡洛方法求取pi的近似值.

# 投點次數

n = 10000

# 圓的半徑、圓心

r = 1.0

a,b = (0.,0.)

# 正方形區域

x_min, x_max = a-r, a+r

y_min, y_max = b-r, b+r

# 在正方形區域內隨機投點

x = np.random.uniform(x_min, x_max, n)

#均勻分布

y = np.random.uniform(y_min, y_max, n)

#計算點到圓心的距離

d = np.sqrt((x-a)**2 + (y-b)**2)

#統計落在圓內點的數目

res = sum(np.where(d < r, 1, 0))

#計算pi的近似值(monte carlo:用統計值去近似真實值)

pi = 4 * res / n #用此種方法對pi值進行估計,就是蒙特卡洛方法

print('pi: ',pi)

#畫個圖

fig = plt.figure()

axes = fig.add_subplot(111)

axes.plot(x, y,'ro',markersize = 1)

plt.axis('equal')

#防止影象變形

circle = circle(xy=(a,b), radius=r ,alpha=0.5)

axes.add_patch(circle)

plt.show()

#用蒙特卡洛方法求取f(x)與x軸圍城圖形的面積

def f(x):

return x**3

n = 30000

#矩形邊界區域

x_min, x_max = 0.0, 1.0

y_min, y_max = 0.0, 1.0

#在矩形區域內隨機投點x

x = np.random.uniform(x_min, x_max, n)

#均勻分布

y = np.random.uniform(y_min, y_max, n)

#統計落在函式y=x^2下方的點

res = sum(np.where(y < f(x), 1 ,0)) #求該f(x)圖形下的面積.

#計算定積分的近似值

integral = res / n

print('integeral: ', integral)

# 畫個圖

fig = plt.figure()

axes = fig.add_subplot(111)

axes.plot(x, y,'ro',markersize = 1)

plt.axis('equal')

# 防止影象變形

axes.plot(np.linspace(x_min, x_max, 10), f(np.linspace(x_min, x_max, 10)), 'b-')

# 函式影象 #plt.xlim(x_min, x_max)

plt.show()

erlang蒙特卡洛方法求Pi

兩個引數r,n分別代表範圍和試驗次數。思想是正方形內接圓,往正方形上扔飛鏢,落在圓內計數加一,最終拿計數和總試驗次數作比。r 1m,n 1m 結果3.143856,3.140464,3.141572,取平均為3.141964 如下 module ex7 import math,sqrt 1,pow ...

演算法之美 1 蒙特卡洛方法計算pi

基本思想 利用圓與其外接正方形面積之比為pi 4的關係,通過產生大量均勻分布的二維點,計算落在單位圓和單位正方形的數量之比再乘以4便得到pi的近似值。樣本點越多,計算出的資料將會越接近真識的pi 前提時樣本是 真正的 隨機分布 蒙特卡羅 monte carlo 演算法計算圓周率的主要思想 給定邊長為...

蒙特卡洛方法的應用

蒙特卡洛方法計算 值 思路 正方形內部有乙個相切的圓,面積之比是4 在這個正方形內部,隨機產生n個點,計算它們與中心點的距離,並且判斷是否落在圓的內部。若這些點均勻分布,則圓周率 pi 4 count n,其中count表示落到圓內投點數,n 表示總的投點數。import random def ca...