首頁>技術>

今天看到一個比較有意思的方法,用蒙特卡洛方法計算圓周率。

覺得挺有意思,就把它用Python來實現以下,程式碼如下。

結果發現,計算跟準確值圓周率有一些千分之的幾到萬分之幾的誤差,挺有意思的哈。

在10000次迭代的計算下,圓周率是3.1464,計算時間0.7s;

在100000次迭代的計算下,圓周率是3.14552,計算時間1.6s;

在100000次迭代的計算下,圓周率是3.142764,計算時間10.9s;

def monte_carlo(total_points):    """ 圓中點的個數除以總點數即為圓周率    Args:         total_points: 生成點總個數    Returns:         pi,以list形式返回所有的x和y點    """    # 1:定義圓中點個數的計數器與點容器    num_circle_points = 0    x_list = []    y_list = []    # 2:生成total_points個隨機點    for _ in range(total_points):        # 3:在長寬均為1的矩形內生成隨機點(x,y)        rand_x = np.random.uniform(0, 1, size=1)        rand_y = np.random.uniform(0, 1, size=1)        x_list.append(rand_x)        y_list.append(rand_y)        # 4:判斷隨機點是否在圓內,如果在則圓中點個數計數器加1        if np.add(rand_x ** 2, rand_y ** 2) <= 1:            num_circle_points += 1    # 5:根據圓中點個數與總點數的比值,即得到圓周率    pi = 4 * float(num_circle_points) / float(total_points)    return pi, x_list, y_listif __name__ == '__main__':    import numpy as np     pi, x_list, y_list=monte_carlo(10000)    print(pi)

作者的其他回答:

這篇伺服器的使用經驗幫助了近千人,簡明實用,闡述到位。值得你花幾分鐘看一下。

伺服器建立個人網站,看看這個,少走彎路不買錯,堪稱完美避坑指南。

13
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • Typora輸入程式碼塊、數學公式、繪製流程圖並匯出為html