Python中利用BBP方式和蒙卡罗特方法求出π值

  • 一 BBP方式
  • 二 蒙卡罗特方法
  • 三 要求用户可以进行选择方法,之后调用对应函数进行执行

一 BBP方式

所谓BBP方式就是利用下面所给数学计算公式求出π值

我们这里用Python代码解决:
看到k值 从0开始到无限大,首先想到for-in循环

剩下的就是在循环体内,用公式进行计算
代码如下:

    dates=2000p=0for k in range(dates+1):p+=1/pow(16,k)*(4/(8*k+1)-2/(8*k+4)-1/(8*k+5)-1/(8*k+6))print('pi值为{:.5f}'.format(p))

运行结果为:

pi值为3.14159

注意:
若其中K不是从0开始则运行结果错误

N=2000
pi=0
for k in range(1,N+1):pi += 1 / pow(16, k) * (4 / (8 * k + 1) - 2 / (8 * k + 4) - 1 / (8 * k + 5) - 1 / (8 * k + 6))
print(pi)

0.008259320256459906

如果把这种方法放在一个函数里呢,直接调用函数便可执行操作BBP方式

这也灰常简单,首先我们要了解函数的创建以及简单的调用方式

函数的创建格式

 def 函数名(参数):函数体return **

简单函数创建举例

def fun(n):n+=100print(n)return n

调用fun函数

fun(100)

运行结果为

200

所以我们可以直接将上面代码放在一个函数的函数体中,大致就可以了

代码如下:

def BBP():dates=2000p=0for k in range(dates+1):p+=1/pow(16,k)*(4/(8*k+1)-2/(8*k+4)-1/(8*k+5)-1/(8*k+6))print('pi值为{:.5f}'.format(p))
BBP()

运行结果为:

pi值为3.14159

二 蒙卡罗特方法

简单的来说,就是在一个正方形中进行随机投点,观察在圆中的点数与所有投点数的比值就是π值
一个圆不好分析,我们就直接分析其四分之一
如下图:
π=4×红色点数/(红色点数+绿色点数)


那我们如何用Python代码实现其操作呢?
首先要进行 随机投点这就用到random库中的random()函数
该函数是随机产生一个0~1直接的数值

import random
x=random.random()
print(x)

多次运行结果为:

0.8701789869057365
0.2964643122013735
0.25537645260810016
0.10197045184352915

然后对所投的点进行判断,如果到原点(0,0)距离在1之内(包含1)是不是就在圆之内了呢?
如果在圆内就对自己定义的一个变量进行累加,最后用累加的变量/总量再×4是不是就为π值了呢
整体代码如下:

import random
import math
date = 10000000
hits = 0.0
for i in range(1, date + 1):x, y = random.random(), random.random()dist = math.sqrt(x ** 2 + y ** 2)if dist <= 1.0:hits += 1
pi = 4 * (hits / date)
print('pi值为{:.5f}'.format(pi))

运行结果为:

pi值为3.14178

根据方法一种的函数定义方法,这个我们是不是也可以对其进行定义一个函数呢?

代码如下:

import random
import math
def luo():date=10000000hits=0.0for i in range(1,date+1):x,y=random.random(),random.random()dist=math.sqrt(x**2+y**2)if dist<=1.0:hits+=1pi=4*(hits/date)print('pi值为{:.5f}'.format(pi))
luo()

运行结果:

pi值为3.14178

三 要求用户可以进行选择方法,之后调用对应函数进行执行

首先把这两种方法分别定义函数,之后运用if-else条件语句进行选择执行即可

代码如下:

import random
import math
def luo():date=10000000hits=0.0for i in range(date+1):x,y=random.random(),random.random()dist=math.sqrt(x**2+y**2)if dist<=1.0:hits+=1pi=4*(hits/date)print('pi值为{:.5f}'.format(pi))
#luo()                                  测试成功
def BBP():dates=2000p=0for k in range(dates+1):p+=1/pow(16,k)*(4/(8*k+1)-2/(8*k+4)-1/(8*k+5)-1/(8*k+6))print('pi值为{:.5f}'.format(p))
#BBP()                                  测试成功
print('请选择输入’计算公式‘或者’蒙卡罗特方法‘:')
a=input()
if a=='计算公式':BBP()
elif a=='蒙卡罗特方法':luo()
else:print('输入错误')

新手小白,有何不妥,请您提出,还需努力!!!

Python中利用BBP方式和蒙卡罗特方法求出π值(以及运用函数进行选择方式解决问题)相关推荐

  1. python中load_iris_在python中利用KNN实现对iris进行分类的方法

    如下所示: from sklearn.datasets import load_iris iris = load_iris() print iris.data.shape from sklearn.c ...

  2. python中利用turtle(海龟)绘图制作龟兔赛跑动画——仅供学习

    python中利用turtle(海龟)绘图制作龟兔赛跑动画--仅供学习哦 首先,欢迎大家来我的博客当中浏览,由于我和我的可爱现在还都个初学者,所作的东西还不够完善,之前在学习计算机的各种语言的过程中, ...

  3. python中的iloc函数_详解pandas中利用DataFrame对象的.loc[]、.iloc[]方法抽取数据

    pandas的DataFrame对象,本质上是二维矩阵,跟常规二维矩阵的差别在于前者额外指定了每一行和每一列的名称.这样内部数据抽取既可以用"行列名称(对应.loc[]方法)",也 ...

  4. pythonchar中的拟合方法_在python中利用numpy求解多项式以及多项式拟合的方法

    构建一个二阶多项式:x^2 - 4x + 3 多项式求解 >>> p = np.poly1d([1,-4,3]) #二阶多项式系数 >>> p(0) #自变量为0时 ...

  5. Python中利用parse_args与namespace来简化函数传参

    python中parse_args以及namespace 声明:本笔记记录的是使用parse_args在函数内部进行传参,并非在命令行进行输入.所有操作均需先进行import argparse. 通过 ...

  6. python try else多余的设计_在python中利用try..except来代替if..else的用法

    在有些情况下,利用try-except来捕捉异常可以起到代替if-else的作用. 比如在判断一个链表是否存在环的leetcode题目中,初始代码是这样的 # Definition for singl ...

  7. Python中利用numpy将数组(矩阵)存成csv文件,将csv文件读取为数组(矩阵)

    Python中利用numpy将数组(矩阵)存成csv文件,将csv文件读取为数组(矩阵) 本博客转载自:https://blog.csdn.net/vernice/article/details/50 ...

  8. python画抛物线_在python中利用最小二乘拟合二次抛物线函数的方法

    1.最小二乘也可以拟合二次函数 我们都知道用最小二乘拟合线性函数没有问题,那么能不能拟合二次函数甚至更高次的函数呢?答案当然是可以的.下面我们就来试试用最小二乘来拟合抛物线形状的的图像. 对于二次函数 ...

  9. python基础教程:Python中利用sqrt()方法进行平方根计算的教程

    这篇文章主要介绍了Python中利用sqrt()方法进行平方根计算的教程,是Python学习的基础知识,需要的朋友可以参考下 sqrt()方法返回x的平方根(x>0). 语法 以下是sqrt() ...

最新文章

  1. Codeforces 825E - Minimal Labels
  2. lucene .doc里存储的skiplist跳表
  3. pip安装 tensorflow-gpu 提示Could not install packages due to an EnvironmentError: [WinError 5] 拒绝访问
  4. 对于es6的小小理解之generator函数
  5. python常用模块(二)
  6. HTML元素参考手册 HTML Elements Reference
  7. 基础的shell编程问题(一)
  8. mysql按行取数据_菜鸟求助:怎么在mysql隔12行取一条数据呀??
  9. axure手机页面设计说明_产品经理原型演示——Axure制作手机登陆界面
  10. Java-命令行版中国象棋
  11. 【Updating】二〇二一流水账
  12. 一个月考过软件测评师,我是怎么做到的
  13. 基于Bootstrap的超酷jQuery开关按钮插件
  14. 前端模块化 AMD 详解
  15. 课程学习——数字频率计的设计
  16. 菲涅尔区,前后比,VSWR
  17. 爬取国家统计局人口与就业统计数据,看了你的文章,我朋友晚上托梦告诉我牢饭很好吃
  18. 感受夏威夷风的威力吧——Zombie鸡尾酒
  19. (HTML+css)学习小征程!!!
  20. kafka中的offset

热门文章

  1. 字符串复制函数strdup和_strdup
  2. WordPress上传图片提示:服务器无法处理图像
  3. 图像处理之图像质量评价指标RMSE(均方根误差)
  4. 微信分享(ShareSDK)个人经验总结
  5. matlab中的振铃现象是啥,振铃现象产生的原因
  6. 一文解读exports、module.exports 和 export、export default
  7. [答疑]业务是销售人员找回来的,而不是客户来找企业
  8. socket编程中的 htons()
  9. 使用chrome调试微信/QQh5页面
  10. Android 社交类APP 豆瓣同城Lite(安全,无广告)