美文网首页
IOS 莱布尼茨公式计算圆周率π

IOS 莱布尼茨公式计算圆周率π

作者: ShawnAlex | 来源:发表于2020-06-09 09:37 被阅读0次

圆周率其实就是一个圆周长与直径的比值我们通常用希腊字母π表示, 他的计算公式有多种,  其中用莱布尼茨公式是这样

 \frac{π}{4} = \frac{1}{1} -  \frac{1}{3} +   \frac{1}{5} - \frac{1}{7} + \frac{1}{9} ......  即:  \frac{π}{4} = \sum_{n=0}^∞ \frac{(-1)^n }{1 + 2n}     

如果你想知道为什么?  既然你诚心诚意的发问了,  我就大发慈悲的告诉你! 

首先看一下等比数列求和公式

S_{n}  = n_{}  \times  a_{1}  (q = 1)

S_{n}  = a_{1}  \times  \frac{1-q^n }{1-q}  = \frac{a_{1} - a_{n} \times  q }{1- q }   (q \neq 1)

那么针对于下面的等比数列, 我们先证明下这个公式

1 + x^1 + x^2 + x^3 + ... + x^n =  \frac{1-x^{n+1}}{1-x}

针对于上面公式我们可看到当n趋向于无穷大, x\in  (-1, 1) 时, 上面可以写成

1 + x + x^2 + x^3 + ... + x^n  = \frac{1}{1-x}

我们令 x = -x^2  带入上方公式可得

1 - x^2 + x^4  - x^6 + ...  =  \frac{1}{1 + x^2}

两边积分可得

 x + \frac{x^3 }{3} + \frac{x^5 }{5} + \frac{x^7 }{7}   ...  =  arctan(x)  (\tan ^{-1}  x ) 

此时, 我们将 x = 1 带入 可得

1 - \frac{1 }{3} + \frac{1 }{5} - \frac{1 }{7}   ...  =  arctan(1) = \frac{π}{4}

我们便得到了莱布尼茨公式, 但是有些心细的人可能注意到了  你 x = 1 并不在 x \in  (-1, 1) 区间啊

接下来我们就证明 当 x = 1  时 上面 收敛于arctan(1) 即可

我们现在已知 1 - x^2 + x^4  - x^6 + ...  =  \frac{1}{1 + x^2}   x \in  (-1, 1)

对于上面等比数列, 我们对 n+1 项求和可得

\frac{1-(-1)^{n+1}x^{2n+2} }{1+x^2 }  = \frac{1}{1+x^2}  即 \frac{1}{1+x^2} - \frac{(-1)^{n+1}x^{2n+2} }{1+x^2 }  = \frac{1}{1+x^2}

我们把减项移到左边可得

1 - x^2 + x^4  - x^6 + ...  +{-1}^nx^{2n}   + \frac{(-1)^{n+1}x^{2n+2} }{1+x^2 }   =  \frac{1}{1 + x^2}    x \in  (-1, 1)

我们对上面等式做 0到1上积分可得

1 - \frac{1}{3}  + \frac{1}{5} -  \frac{1}{7} + ...\frac{-1^n }{2n+1}  + (-1)^{n+1} \int_{0}^{1} \frac{x^{2n+2}}{1+x^2} dx = \frac{π}{4}

接下来我们只需证明当 n \rightarrow ∞ 最后一项为0 即可

0\leq \int_{0}^{1} \frac{x^{2n+2}}{1+x^2} dx\leq \int_{0}^{1} \ x^{2n+2} dx = \frac{1}{2n+3} \rightarrow 0

所以我们证明出π的莱布尼茨公式成立

接下来我们用OC 和 Swift 写下这个公式, 即计算下π,  两边乘4可得

π = \frac{4}{1} -   \frac{4}{3} +  \frac{4}{5} - \frac{4}{7} ....  我们可以直接对这个无穷序列进行建模, 

我们可看到 分子是4, 分母为 首项为1, 公差 为2 的等差数列,  同时还需留意每一项需要乘上 -1^n  (这里我默认首项 index为0)

OC写法:

```

- (CGFloat)calculatePi:(NSInteger)position{

    NSInteger num4 = 4;

    CGFloat series = 1;

    NSInteger pro = 1;

    CGFloat result = 0;

    for(NSInteger i = 0; i < position; i++){

        result +=  pro * (num4 / series);

        series += 2;

        pro *= -1 ;

    }

    return result;

}

```

调用, 当我们执行50000次时候

CGFloat result = [self calculatePi: 50000];

NSLog(@"返回结果: %f", result);

返回结果: 3.141573

当次数趋近无穷大时候, 结果趋近于π

Swift写法:

```

func calculatePi(position: NSInteger) -> CGFloat {

        let num4: CGFloat = 4;

        var series: CGFloat = 1;

        var pro: CGFloat = 1;

        var result: CGFloat = 0;

        for _ in 0..<position {

            result +=  pro * (num4 / series);

            series += 2;

            pro *= -1 ;

        }

        return result;

    }

```

附: 

同样执行1,000,000 次打印

swift执行速度为13s左右,  而OC执行为2分15秒左右, 可见swift运行效率非常快,  而且精度swift更高一些

OC, 可见swift运行效率更高一些

相关文章

  • IOS 莱布尼茨公式计算圆周率π

    圆周率其实就是一个圆周长与直径的比值我们通常用希腊字母π表示, 他的计算公式有多种, 其中用莱布尼茨公式是这样 即...

  • 4.5 实例6:圆周率的计算

    四、程序的控制结构 4.5 实例6:圆周率的计算 "圆周率的计算"问题分析 圆周率的近似计算公式 蒙特卡洛方法 [...

  • 1476: C语言实验题――圆周率

    描述:输入n值,并利用下列格里高里公式计算并输出圆周率:

  • _3_ python应用示例1:计算圆周率

    使用计算机计算圆周率有很多方法,可以利用很多逼近公式。本文使用简单的采样办法,可以方便的估算出圆周率的值。 回想一...

  • 莱布尼茨公式(图)

    莱布尼茨公式(或:莱布尼兹公式) 给出图片(清晰版),方便做笔记复制。 图片: 展开版的可能太长了,显示不清楚,于...

  • 【PI】函数使用技巧

    Excel的PI函数主要是用来计算计算圆周率的近似值。本文介绍 Microsoft Excel中PI函数的公式语法...

  • 3.8π的计算

    一、π的计算 ①圆周率π是一个无理数,没有任何一个精确公式能够计算π值,π的计算只能采用近似算法。 ②国际公认的π...

  • 欧拉是如何计算圆周率的(二)

    这些公式,不是为了计算圆周率而开发的。相反,是为了计算右边的那些和,而得到的结果。碰巧,结果里有π那么,为什么要计...

  • 三角函数计算

    三角函数计算 描述 根据下面公式计算并输出x的值,a和b的值由用户输入,括号里的数字是角度值, 圆周率的值使用数学...

  • 一篇文章讲明白蒙特卡洛模拟

    先来个测试题:用仿真的方法计算圆周率π,请写出计算步骤和简单的公式:(思考十秒钟,想不出来可以继续往下看,后面有答...

网友评论

      本文标题:IOS 莱布尼茨公式计算圆周率π

      本文链接:https://www.haomeiwen.com/subject/kbbvahtx.html