求圆周率的各种方法

求圆周率π!你能想到的有多少种方法呢?
今天对圆周率的求解方法作个整理、总结,因为感觉它挺好玩的。
(对于π的演算历史,可见百度π。最新的记录是2011年10月日本职员将小数点算到了10万亿位!!这得闲的有多蛋疼啊。。)


方法一:等积代换

这应该是最原始的解法了,把圆切成一个多边形,然后求出多边形的面积S。当这个多边形足够多边的时候,它的面积就近似等于圆面积了,然后由面积等式 π·r² = S 就可以得到 π 的近似解。我去百度盗了个图,show一下怎么切圆:
这里写图片描述
这个很容易理解,中学课本上也有很多介绍,叫割圆法。我们几个中华老祖就是用这种方法求的,只是当时没有计算机,分割的三角形有限,如今用计算机模拟的话会快得多,精确的多。


方法二:概率试验

概率统计中有个著名的蒲丰投针试验大家可记得?
投针的步骤如下:
1)、取一张白纸,在上面画上许多条间距为a的平行线。
2)、取一根长度为l(l=a/2) 的针,随机地向画有平行直线的纸上掷n次,观察针与直线相交的次数,记为m。
3)、计算针与直线相交的概率.
可以通过数学推导,得出这个概率为p=2l/(πa),其中π是圆周率。我们可以由此求出π的值!具体的推导见此


方法三:莱布尼茨级数

这里写图片描述


外篇

其实这篇博客的主要目的是和大家分享一下网上某神级代码,区区几行代码,瞬间求出八百位 π 值:

#include<stdio.h>
long a=10000,b,c=2800,d,e,f[2801],g;
main(){for(;b-c;)   f[b++]=a/5;
    for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a)
        for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b);}

这里写图片描述

转载于:https://www.cnblogs.com/Bone-ACE/p/4531296.html

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您讲解蒙特卡罗方法圆周率并画出相应的图形。 蒙特卡罗方法是一种基于随机数统计的方法,可以用来估计圆周率。具体方法是,在一个正方形内画一个圆,圆的直径等于正方形的边长。然后,我们在正方形内随机产生大量的点,判断这些点是否在圆内,计算在圆内的点数和在正方形内的点数,通过这些点的比例可以估算圆的面积和圆周率。 下面是使用 Python 代码实现的蒙特卡罗方法圆周率,并画出相应的图形: ```python import random import math import matplotlib.pyplot as plt # 正方形的边长 length = 1 # 圆的半径 radius = length / 2 # 在正方形内随机产生的点的数量 num_points = 10000 # 在正方形内随机产生点,并计算在圆内的点的数量 count_inside_circle = 0 x_inside_circle = [] y_inside_circle = [] x_outside_circle = [] y_outside_circle = [] for i in range(num_points): x = random.uniform(-radius, radius) y = random.uniform(-radius, radius) if math.sqrt(x**2 + y**2) <= radius: count_inside_circle += 1 x_inside_circle.append(x) y_inside_circle.append(y) else: x_outside_circle.append(x) y_outside_circle.append(y) # 计算圆周率 pi_estimate = 4 * count_inside_circle / num_points # 绘制图形 plt.figure(figsize=(10, 10)) plt.scatter(x_inside_circle, y_inside_circle, color='red', s=10) plt.scatter(x_outside_circle, y_outside_circle, color='blue', s=10) plt.title('Estimation of Pi: {}'.format(pi_estimate)) plt.axis('equal') plt.show() ``` 在运行上述代码后,会产生一个散点图,其中红色点表示在圆内的点,蓝色点表示在圆外的点。图形的标题中包含了使用蒙特卡罗方法估算出来的圆周率的值。 希望这个回答能够帮到您。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值