龙空技术网

利用蒙特卡洛随机方法计算圆周率pi

每日长点知识君 126

前言:

现时小伙伴们对“迭代求pi”大致比较珍视,各位老铁们都需要知道一些“迭代求pi”的相关文章。那么小编在网摘上网罗了一些关于“迭代求pi””的相关内容,希望各位老铁们能喜欢,你们快快来了解一下吧!

今天看到一个比较有意思的方法,用蒙特卡洛方法计算圆周率。

觉得挺有意思,就把它用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)

作者的其他回答:

这篇服务器的使用经验帮助了近千人,简明实用,阐述到位。值得你花几分钟看一下。

阿里云域名注册与备案、服务器ECS购买与登录

自己拥有一台服务器可以做哪些很酷的事情

服务器建立个人网站,看看这个,少走弯路不买错,堪称完美避坑指南。

[阿里云服务器快速建网站 (安装BT宝塔面板和wordpress)]

还有好十几篇这么优秀的经验分享,都收在我个人回答里,关注我,你将获得不一样的经验。

标签: #迭代求pi