今天看到一個比較有意思的方法,用蒙特卡洛方法計算圓周率。
覺得挺有意思,就把它用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)
作者的其他回答:
這篇伺服器的使用經驗幫助了近千人,簡明實用,闡述到位。值得你花幾分鐘看一下。
伺服器建立個人網站,看看這個,少走彎路不買錯,堪稱完美避坑指南。
最新評論