热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用mpmath库计算π的多种方法

本文介绍了如何利用Python的高精度计算库mpmath实现π的100种不同计算方法。通过设置更高的精度和优化的数学函数,这些方法能够提供极其精确的结果。

本文将展示如何使用Python的高精度计算库mpmath来实现π的多种计算方法。我们将详细介绍每一种方法,并提供相应的代码示例。

首先,需要导入mpmath库并设置计算精度:

from mpmath import *
mp.dps = 50
mp.pretty = True

接下来是一些常见的π的计算公式及其对应的Python代码:

  • 直接获取π:
    +pi
  • 通过角度转换:
    180 * degree
  • 反正切法:
    4 * atan(1)
  • Machin公式:
    16 * acot(5) - 4 * acot(239)
  • Gauss-Legendre算法:
    chop(2*j*log((1-j)/(1+j)))
  • 其他复杂公式:
    gamma(0.5)**2
    beta(0.5, 0.5)
    (2/diff(erf, 0))**2
    findroot(sin, 3)
    findroot(cos, 1) * 2
    chop(-2j*lambertw(-pi/2))
    besseljzero(0.5, 1)
    3*sqrt(3)/2/hyp2f1((-1,3),(1,3),1,1)
    8/(hyp2f1(0.5,0.5,1,0.5)*gamma(0.75)/gamma(1.25))**2
    4*(hyp1f2(1,1.5,1,1) / struvel(-0.5, 2))**2
    1/meijerg([[],[]], [[0],[0.5]], 0)**2
    (meijerg([[],[2]], [[1,1.5],[]], 1, 0.5) / erfc(1))**2
    (1-e) / meijerg([[1],[0.5]], [[1],[0.5,0]], 1)
    sqrt(psi(1,0.25)-8*catalan)
    elliprc(1,2)*4
    elliprg(0,1,1)*4
    2*agm(1,0.5)*ellipk(0.75)
    (gamma(0.75)*jtheta(3,0,exp(-pi)))**4
    cbrt(gamma(0.25)**4*agm(1,sqrt(2))**2/8)
    sqrt(6*zeta(2))
    sqrt(6*(zeta(2,3)+5./4))
    sqrt(zeta(2,(3,4))+8*catalan)
    exp(-2*zeta(0,1,1))/2
    sqrt(12*altzeta(2))
    4*dirichlet(1,[0,1,0,-1])
    2*catalan/dirichlet(-1,[0,1,0,-1],1)
    exp(-dirichlet(0,[0,1,0,-1],1))*gamma(0.25)**2/(2*sqrt(2))
    sqrt(7*zeta(3)/(4*diff(lerchphi, (-1,-2,1), (0,1,0))))
    sqrt(-12*polylog(2,-1))
    sqrt(6*log(2)**2+12*polylog(2,0.5))
    chop(root(-81j*(polylog(3,root(1,3,1))+4*zeta(3)/9)/2,3))
    2*clsin(1,1)+1
    (3+sqrt(3)*sqrt(1+8*clcos(2,1)))/2
    root(2,6)*sqrt(e)/(glaisher**6*barnesg(0.5)**4)
    nsum(lambda k: 4*(-1)**(k+1)/(2*k-1), [1,inf])
    nsum(lambda k: (3**k-1)/4**k*zeta(k+1), [1,inf])
    nsum(lambda k: 8/(2*k-1)**2, [1,inf])**0.5
    nsum(lambda k: 2*fac(k)/fac2(2*k+1), [0,inf])
    nsum(lambda k: fac(k)**2/fac(2*k+1), [0,inf])*3*sqrt(3)/2
    nsum(lambda k: fac(k)**2/(phi**(2*k+1)*fac(2*k+1)), [0,inf])*(5*sqrt(phi+2))/2
    nsum(lambda k: (4/(8*k+1)-2/(8*k+4)-1/(8*k+5)-1/(8*k+6))/16**k, [0,inf])
    2/nsum(lambda k: (-1)**k*(4*k+1)*(fac2(2*k-1)/fac2(2*k))**3, [0,inf])
    nsum(lambda k: 72/(k*expm1(k*pi))-96/(k*expm1(2*pi*k))+24/(k*expm1(4*pi*k)), [1,inf])
    1/nsum(lambda k: binomial(2*k,k)**3*(42*k+5)/2**(12*k+4), [0,inf])
    4/nsum(lambda k: (-1)**k*(1123+21460*k)*fac2(2*k-1)*fac2(4*k-1)/(882**(2*k+1)*32**k*fac(k)**3), [0,inf])
    9801/sqrt(8)/nsum(lambda k: fac(4*k)*(1103+26390*k)/(fac(k)**4*396**(4*k)), [0,inf])
    426880*sqrt(10005)/nsum(lambda k: (-1)**k*fac(6*k)*(13591409+545140134*k)/(fac(k)**3*fac(3*k)*(640320**3)**k), [0,inf])
    4/nsum(lambda k: (6*k+1)*rf(0.5,k)**3/(4**k*fac(k)**3), [0,inf])
    (ln(8)+sqrt(48*nsum(lambda m,n: (-1)**(m+n)/(m**2+n**2), [1,inf],[1,inf]) + 9*log(2)**2))/2
    -nsum(lambda x,y: (-1)**(x+y)/(x**2+y**2), [-inf,inf], [-inf,inf], ignore=True)/ln2
    2*nsum(lambda k: sin(k)/k, [1,inf])+1
    quad(lambda x: 2/(x**2+1), [0,inf])
    quad(lambda x: exp(-x**2), [-inf,inf])**2
    2*quad(lambda x: sqrt(1-x**2), [-1,1])
    chop(quad(lambda z: 1/(2j*z), [1,j,-1,-j,1]))
    3*(4*log(2+sqrt(3))-quad(lambda x,y: 1/sqrt(1+x**2+y**2), [-1,1],[-1,1]))/2
    sqrt(8*quad(lambda x,y: 1/(1-(x*y)**2), [0,1],[0,1]))
    sqrt(6*quad(lambda x,y: 1/(1-x*y), [0,1],[0,1]))
    sqrt(6*quad(lambda x: x/expm1(x), [0,inf]))
    quad(lambda x: (16*x-16)/(x**4-2*x**3+4*x-4), [0,1])
    quad(lambda x: sqrt(x-x**2), [0,0.25])*24+3*sqrt(3)/4
    mpf(22)/7 - quad(lambda x: x**4*(1-x)**4/(1+x**2), [0,1])
    mpf(355)/113 - quad(lambda x: x**8*(1-x)**8*(25+816*x**2)/(1+x**2), [0,1])/3164
    2*quadosc(lambda x: sin(x)/x, [0,inf], omega=1)
    40*quadosc(lambda x: sin(x)**6/x**6, [0,inf], omega=1)/11
    e*quadosc(lambda x: cos(x)/(1+x**2), [-inf,inf], omega=1)
    8*quadosc(lambda x: cos(x**2), [0,inf], zeros=lambda n: sqrt(n))**2
    2*quadosc(lambda x: sin(exp(x)), [1,inf], zeros=ln)+2*si(e)
    exp(2*quad(loggamma, [0,1]))/2
    2*nprod(lambda k: sec(pi/2**k), [2,inf])
    s=lambda k: sqrt(0.5+s(k-1)/2) if k else 0; 2/nprod(s, [1,inf])
    s=lambda k: sqrt(2+s(k-1)) if k else 0; limit(lambda k: sqrt(2-s(k))*2**(k+1), inf)
    2*nprod(lambda k: (2*k)**2/((2*k-1)*(2*k+1)), [1,inf])
    2*nprod(lambda k: (4*k**2)/(4*k**2-1), [1, inf])
    sqrt(6*ln(nprod(lambda k: exp(1/k**2), [1,inf])))
    nprod(lambda k: (k**2-1)/(k**2+1), [2,inf])/csch(pi)
    nprod(lambda k: (k**2-1)/(k**2+1), [2,inf])*sinh(pi)
    nprod(lambda k: (k**4-1)/(k**4+1), [2, inf])*(cosh(sqrt(2)*pi)-cos(sqrt(2)*pi))/sinh(pi)
    sinh(pi)/nprod(lambda k: (1-1/k**4), [2, inf])/4
    sinh(pi)/nprod(lambda k: (1+1/k**2), [2, inf])/2
    (exp(1+euler/2)/nprod(lambda n: (1+1/n)**n * exp(1/(2*n)-1), [1, inf]))**2/2
    3*sqrt(2)*cosh(pi*sqrt(3)/2)**2*csch(pi*sqrt(2))/nprod(lambda k: (1+1/k+1/k**2)**2/(1+2/k+3/k**2), [1, inf])
    2/e*nprod(lambda k: (1+2/k)**((-1)**(k+1)*k), [1,inf])
    limit(lambda k: 16**k/(k*binomial(2*k,k)**2), inf)
    limit(lambda x: 4*x*hyp1f2(0.5,1.5,1.5,-x**2), inf)
    1/log(limit(lambda n: nprod(lambda k: pi/(2*atan(k)), [n,2*n]), inf),4)
    limit(lambda k: 2**(4*k+1)*fac(k)**4/(2*k+1)/fac(2*k)**2, inf)
    limit(lambda k: fac(k) / (sqrt(k)*(k/e)**k), inf)**2/2
    limit(lambda k: (-(-1)**k*bernoulli(2*k)*2**(2*k-1)/fac(2*k))**(-1/(2*k)), inf)
    limit(lambda k: besseljzero(1,k)/k, inf)
    1/limit(lambda x: airyai(x)*2*x**0.25*exp(2*x**1.5/3), inf, exp=True)**2
    1/limit(lambda x: airybi(x)*x**0.25*exp(-2*x**1.5/3), inf, exp=True)**2

以上展示了π的各种计算方法,每种方法都有其独特的应用场景和理论背景。通过mpmath库的强大功能,我们可以轻松地实现这些复杂的计算。


推荐阅读
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
  • Python 异步编程:深入理解 asyncio 库(上)
    本文介绍了 Python 3.4 版本引入的标准库 asyncio,该库为异步 IO 提供了强大的支持。我们将探讨为什么需要 asyncio,以及它如何简化并发编程的复杂性,并详细介绍其核心概念和使用方法。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • 本文深入探讨了 Java 中的 Serializable 接口,解释了其实现机制、用途及注意事项,帮助开发者更好地理解和使用序列化功能。 ... [详细]
  • 扫描线三巨头 hdu1928hdu 1255  hdu 1542 [POJ 1151]
    学习链接:http:blog.csdn.netlwt36articledetails48908031学习扫描线主要学习的是一种扫描的思想,后期可以求解很 ... [详细]
  • 离线环境下的Python及其第三方库安装指南
    在项目开发中,有时会遇到电脑只能连接内网或完全无法联网的情况。本文将详细介绍如何在这种环境下安装Python及其所需的第三方库,确保开发工作的顺利进行。 ... [详细]
  • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
  • 本文介绍如何使用阿里云的fastjson库解析包含时间戳、IP地址和参数等信息的JSON格式文本,并进行数据处理和保存。 ... [详细]
  • 使用Python在SAE上开发新浪微博应用的初步探索
    最近重新审视了新浪云平台(SAE)提供的服务,发现其已支持Python开发。本文将详细介绍如何利用Django框架构建一个简单的新浪微博应用,并分享开发过程中的关键步骤。 ... [详细]
  • 尽管使用TensorFlow和PyTorch等成熟框架可以显著降低实现递归神经网络(RNN)的门槛,但对于初学者来说,理解其底层原理至关重要。本文将引导您使用NumPy从头构建一个用于自然语言处理(NLP)的RNN模型。 ... [详细]
author-avatar
韦韦韦骏轩_
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有