数学算法:PI的计算方法,蒙特卡洛及割圆法
最近看了点数学资料,也动手写了一下最简单的算法,记录下来:
1、蒙特卡洛计算PI值
原理说明
我们先花一个圆,然后画出圆的外切正方形,圆的半径记为R,则矩形面积为,圆形面积为,我们在矩形面积内随机撒点,当撒点足够多时,点的数量就代表了图形的面积,我们也就知道了圆形面积除以矩形面积的值,也就可以算出的近似值了。
程序代码
import random #随机点的x、y值
x = 0
y = 0#圆内点计数及总随机点数
circle_cnt = 0
point_set_num = 100000000#在总点数次数内重复取数,并判断是否落在圆内,同时计数
for i in range(point_set_num):x = random.uniform(-1,1)y = random.uniform(-1,1)if (x**2 + y**2)**0.5 <= 1:circle_cnt += 1#隔一定时间打印一次数量,提示程序在运行中if i % 10000000 == 0:print("===>{}".format(i))#最后输出PI的近似值
print("PI's value is: {}.".format(circle_cnt/point_set_num*4))
输出结果
===>0
===>10000000
===>20000000
===>30000000
===>40000000
===>50000000
===>60000000
===>70000000
===>80000000
===>90000000
PI's value is: 3.14171748.
2、割圆法计算PI值
原理说明
先花一个圆内的内接正六边形,并求出面积,这时面积和圆实际面积相差很大;
进一步扩充内接图形的边,扩展为12个边,24、48、96....,内接图形的面积将逐步趋近于圆形;
程序代码
import math#将内接图形扩展20次,得到3145728边的正内接图形,并计算图形面积
for i in range(20):split_num = 6*2**iprint(split_num, end=" ==> ")#正六边形时,面积计算 R*R*sin30*cos30*6=pi*R*R,pi=sin30*cos30*6#以此类推到更多边来贴近pi的实际值,公式如下:print(math.sin(math.radians(360/split_num/2))*math.cos(math.radians(360/split_num/2))*split_num)
输出结果
6 ==> 2.598076211353316
12 ==> 2.9999999999999996
24 ==> 3.105828541230249
48 ==> 3.1326286132812378
96 ==> 3.1393502030468667
192 ==> 3.1410319508905093
384 ==> 3.1414524722854615
768 ==> 3.1415576079118575
1536 ==> 3.1415838921483177
3072 ==> 3.1415904632280505
6144 ==> 3.141592105999271
12288 ==> 3.1415925166921568
24576 ==> 3.1415926193653836
49152 ==> 3.1415926450336906
98304 ==> 3.1415926514507673
196608 ==> 3.141592653055037
393216 ==> 3.141592653456103
786432 ==> 3.141592653556371
1572864 ==> 3.1415926535814376
3145728 ==> 3.141592653587704
后面这种计算方法还是比较贴近的。
数学算法:PI的计算方法,蒙特卡洛及割圆法相关推荐
- 计算机算法对程序设计的作用,计算机编程中数学算法的优化策略
李钰 摘要:在计算机编程中,合理地运用数学算法所拥有的优势不但可以完好地针对所拥有的问题进行总结分类归纳,还可以将其归纳作为基础从而进行针对性的统一计算,并且能够将非常复杂的问题进行整体的简化并且将其 ...
- 计算机算法对程序设计的作用,算法计算机论文,关于数学算法对计算机编程优化相关参考文献资料-免费论文范文...
导读:本论文主要论述了算法计算机论文范文相关的参考文献,对您的论文写作有参考作用. (重庆人文科技学院 理工学院数学系,重庆 401572) 摘 要:数学算法是一种将很多问题进行归纳总结,然后采用统一 ...
- 核苷酸pi值计算方法
核苷酸pi值计算方法 哈喽,今天小编给大家分享的是核苷酸pi值计算方法,主要是介绍序列比对(MEGA和MZAFFT版的两种方法)计算pi值(dnasp)的两个步骤,有兴趣大家可以瞅瞅. 一.序列比对 ...
- 美国夫妇用数学算法买彩票赢1.74亿元——网友:现在学数学还来得及吗?
用数学算法买彩票赢1.74亿元.一男子发现了彩票的漏洞,十几年来他一共获利2700万美元(约合人民币1.74亿元).官方经过调查以后表示这是合法有效的. 美国一位老爷爷曾是数学系学生,他偶然间看到一份 ...
- python 数学公式_python的数学算法函数及公式用法
之前老是跟大家说看久了Python,总感觉就像是很多的数学公式运算,大家一致觉得只是一点点像,那今天跟大家直接就说下叫"数学"算法的内容,这样大家再来品鉴下,是不是可以贯通使用的内 ...
- 狠补基础-数学+算法角度讲解卷积层,激活函数,池化层,Dropout层,BN层,全链接层
狠补基础-数学+算法角度讲解卷积层,激活函数,池化层,Dropout层,BN层,全链接层 在这篇文章中您将会从数学和算法两个角度去重新温习一下卷积层,激活函数,池化层,Dropout层,BN层,全链接 ...
- 割圆法求Pi(Java)
文章目录 题目 解法 方法1 方法2 致谢 题目 采用割圆术计算圆周率,即对一个圆先割出一个正方形,再割出4个等腰三角形,再割出8个等腰三角形,后面依此类推,把这些割出的图形面积相加即为圆的面积,然后 ...
- 数学符号π (Pi)、Σ(Capital Sigma)、μ (Mu) 、σ(sigma)、∏(capital pi), ∫(Integral Symbol)的来历...
1.π (Pi; periphery/周长) March 14 marks Pi Day, the holiday commemorating the mathematical constant π ...
- 序列号加密中的数学算法
序列号加密中的数学算法 数学算法一项都是密码加密的核心,但在一般的软件加密中,它似乎并不太为人们关心,因为大多数时候软件加密本身实现的都是一种编程的技巧.但近几年来随着序列号加密程序的普及,数学算法在 ...
最新文章
- wireshark安装
- 删除MSI包垃圾信息工具
- 病毒在网络上传播的基本途径分析
- git菜单形式的_添加“Git Bash Here”到右键菜单
- 2019二级c语言模拟考试软件,全国计算机等级考试超级模拟软件(二级c)v2019.3
- 华为P50首发麒麟9000L:5nm EUV工艺打造 配置有所缩减
- 我关注的那些程序员大佬
- php openssl_sign() 语法+RSA公私钥加密解密,非对称加密算法详解
- 2019基金行业变革之年
- UE4 C++头文件
- Java 验证码图片不加载处理办法
- Day25——组合总和III、电话号码的字母组合
- 构造哈希表(C语言)
- 温度补偿计算公式_热力管道补偿器补偿量计算公式
- 二、Eureka服务注册与发现
- 安卓小游戏:俄罗斯方块
- 什么是伪代码,它如何使你成为更好的程序员?
- NPDP产品经理小知识-跨职能团队和矩阵结构
- 零、DMSP/OLS、NPP/VIIRS等夜间灯光数据之GDP空间化的真实GDP计算
- 大学生如何选择人生第一份工作