Python中利用BBP方式和蒙卡罗特方法求出π值(以及运用函数进行选择方式解决问题)
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('输入错误')
新手小白,有何不妥,请您提出,还需努力!!! 如下所示: from sklearn.datasets import load_iris iris = load_iris() print iris.data.shape from sklearn.c ... python中利用turtle(海龟)绘图制作龟兔赛跑动画--仅供学习哦 首先,欢迎大家来我的博客当中浏览,由于我和我的可爱现在还都个初学者,所作的东西还不够完善,之前在学习计算机的各种语言的过程中, ... pandas的DataFrame对象,本质上是二维矩阵,跟常规二维矩阵的差别在于前者额外指定了每一行和每一列的名称.这样内部数据抽取既可以用"行列名称(对应.loc[]方法)",也 ... 构建一个二阶多项式:x^2 - 4x + 3 多项式求解 >>> p = np.poly1d([1,-4,3]) #二阶多项式系数 >>> p(0) #自变量为0时 ... python中parse_args以及namespace 声明:本笔记记录的是使用parse_args在函数内部进行传参,并非在命令行进行输入.所有操作均需先进行import argparse. 通过 ... 在有些情况下,利用try-except来捕捉异常可以起到代替if-else的作用. 比如在判断一个链表是否存在环的leetcode题目中,初始代码是这样的 # Definition for singl ... Python中利用numpy将数组(矩阵)存成csv文件,将csv文件读取为数组(矩阵) 本博客转载自:https://blog.csdn.net/vernice/article/details/50 ... 1.最小二乘也可以拟合二次函数 我们都知道用最小二乘拟合线性函数没有问题,那么能不能拟合二次函数甚至更高次的函数呢?答案当然是可以的.下面我们就来试试用最小二乘来拟合抛物线形状的的图像. 对于二次函数 ... 这篇文章主要介绍了Python中利用sqrt()方法进行平方根计算的教程,是Python学习的基础知识,需要的朋友可以参考下 sqrt()方法返回x的平方根(x>0). 语法 以下是sqrt() ...
Python中利用BBP方式和蒙卡罗特方法求出π值(以及运用函数进行选择方式解决问题)相关推荐
最新文章
热门文章