使用程序计算近似Π值

简介: 现在大多数语言,只需要调用一下Math.PI就可以知道Π值了。但是你有没有想过这个PI是怎么来的,是直接存储吗?还是计算来的。虽然不知道具体是怎么实现的,但是我们可以使用一些简单的数学知识,来计算出近似的Π值。

使用程序计算近似Π值

一、前言

现在大多数语言,只需要调用一下Math.PI就可以知道Π值了。但是你有没有想过这个PI是怎么来的,是直接存储吗?还是计算来的。虽然不知道具体是怎么实现的,但是我们可以使用一些简单的数学知识,来计算出近似的Π值。

二、实现原理

我们小学就学过圆的面积公式,只不过那个时候我们直接使用3.14作为Π。圆的面积公式如下:

S=πR2S = \pi R^2S=πR2

这个公式大家都熟悉,如果我们能知道R和S就能求出Π。那么除了上面的方法,还有什么方法可以根据R计算S呢,有一种可以参考的方法就是使用微积分的思想,即把圆拆分成无数个小矩形,不过在计算机中我们只能拆分出有限个小矩形。如下图:

网络异常,图片无法展示
|

这里先考虑1/4个圆。我们把1/4个圆拆分成n个小矩形,计算n个矩形的面积并相加。当我们的n足够大时,n个矩形的面积和就会趋近圆的面积。我们假设n个矩形面积和为A,那么近似的Π计算公式如下:

π=4AR2\pi = \frac{4A}{R^2}π=R24A

现在我们知道了pi的具体公式,接下来我们看看A的计算。

A的计算主要是矩形面积的累加,假如我们把圆拆成n个矩形,每个矩形的宽都为1/n,那么第i个矩形的面积应该为:

image.png

因为是半圆,因此y的计算公式如下:

image.png

其中x应该为i/n*R(因为是把R分成n份,第i个矩形的x=i/n*R)。最后,n个矩形相加的公式为:

image.png

下面我们就可以根据公式用程序求出Π的近似值。

三、代码实现

我们以单位圆为例,将圆(1/4个)拆分成n份,拆分n份我们可以用循环来实现。具体代码如下:

n = 1000
A = 0 # 矩形面积
r = 1 # 半径
for i in range(1, n+1):
    dx = 1 / n  # 拆成n份,每一份x为1/n
    y = pow(pow(r, 2) - pow(i*r/n-r, 2), 0.5) # 使用公式计算y,其中x=i/n
    dS = dx * y # 单个小矩形的面积
    A += dS # 对矩形面积进行累加
pi = 4 * A / pow(r, 2) # 计算Π
print(pi)
复制代码

上面程序运行结果如下:

3.1410880051481085
复制代码

结果的很接近圆周率。当我们把n增大时,比如设置为100000,结果为:

3.1415876489413512
复制代码

当我们不断增大n时,结果会越来越趋近Π。


作者:ZackSock

目录
相关文章
|
8月前
|
Python
异步计算斐波那契数列大数值项(千万数级)的值
异步计算斐波那契数列大数值项(千万数级)的值
52 0
|
算法 C# C++
C++二分算法:找到最接近目标值的函数值(二)
C++二分算法:找到最接近目标值的函数值
|
算法 测试技术 C++
C++二分算法:找到最接近目标值的函数值(一)
C++二分算法:找到最接近目标值的函数值
wustojc4010按公式计算y和z的值
wustojc4010按公式计算y和z的值
103 0
|
Serverless
编写函数计算多项式的值
编写函数计算多项式的值
|
机器学习/深度学习
将迭代次数问题几何化的一个计算例子
神经网络调参,设置迭代次数
127 0
将迭代次数问题几何化的一个计算例子
|
C++
C++ 计算斐波那契数列第100万项的精确整数值
C++ 计算斐波那契数列第100万项的精确整数值
126 0
|
机器学习/深度学习 存储
取出网络里面的所有参数,并计算所有参数的二范数
以上代码定义了一个名为calculate_l2_norm的函数,该函数接受一个神经网络模型作为参数,并返回该模型中所有参数的二范数。在函数体内,我们首先创建一个空张量l2_norm_squared,用于存储所有参数的平方和。 然后,通过遍历模型中的所有参数并将它们的平方和累加到l2_norm_squared中来计算所有参数的平方和。最后,我们返回所有参数的二范数。 在主程序中,首先实例化你自己定义的神经网络对象,然后调用calculate_l2_norm函数来计算所有参数的二范数。
235 0
|
Java
如何计算线程数的最优值?——咱有公式
如何计算线程数的最优值?——咱有公式
242 0
如何计算线程数的最优值?——咱有公式
07:计算多项式的值
07:计算多项式的值
285 0

热门文章

最新文章