首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何计算圆周率Pi

前言

众所周知,圆周率Pi是一个无限不循环的小数,早在数千年前由我国的祖冲之计算得到了一个保留小数点后数位的数值。Pi是圆的面积与半径平方的比值,那么,在如今的现代,你有什么办法来计算圆周率的值呢?

小编是一个喜欢动脑筋的人,且热爱编程(厚脸无耻一下^_^),于是想到了一个通过编程来计算圆周率的方法。

方法

根据圆周率Pi的定义-----圆的面积与半径平方的比值。

Pi = S/R^2

工具

MATLAB

过程

第一步构造一个半径为R的圆,计算圆的的面积S。

首先,怎么构造这个圆呢?先要构造一个正方形,然后以一个正方形(边长为R)的顶点为圆心,就可以画一个内接1/4圆。

其次,怎么计算面积呢?可以把正方形的面积细分为数目足够多的小正方形,一个小正方形可以代表一个小面积,那么数这些小正方形的数目,就是包围区域内面积。这是一种近似,小正方形细分的约小,计算面积的结果越精确。无限逼近目标值,这是一种极限的思想。

比如说,我要把这个正方形细分为10000个小正方形。那么,数学上可以通过构造一个100X100的矩阵来实现。

代码是

A = ones(100)

该正方形的面积也就是10000了。

可以看到矩阵对应正方形图像的结果。

mesh(A)

第二步 构造圆

以顶点A(1,1)为坐标原点,在正方形A的基础上画圆B,A的边长为100,那么圆B的半径也为100。

怎么确定正方形里面的小正方哪些是在圆里面的呢?根据圆的性质:圆内的点距离圆心的距离小于半径R。统计圆内点的个数C,就是圆的面积。

代码为

n =100

R =n

B = ones(n);

%圆的面积是C,初始值为0

C =0;

for i = 1:1:100

for j = 1:1:100

if ((i-1)^2+(j-1)^2

C = C+1;

B(i,j) =0;

end

end

end

那么圆的效果是什么样子的呢?可以看到蓝色的小方块在圆内,圆的边近似是一个弧线,为什么不是一个标准的圆弧呢?是因为取得小正方形的数目不够多,数目足够多的话,比如 n = 10000 或者更多(看你的电脑CPU性能咯罒ω罒),那就结果就更逼近了,圆的形状也更准确了。

第三步 计算Pi

%圆的面积S_circle

S_circle = C;

%1/4圆的面积

pi_calculate = S_circle*4/R^2

计算的结果是pi_calculate= 3.1812

第四步 改进

计算结果与真实值的误差有多少呢?

error = 0.0126

很明显,把正方形细分的越细,误差越小。比如,由目前的10000个细分为10000 00个,再看误差,是多少呢?

error = 0.0013,较之前下降了一个数量级。

结束

亲爱的各位谢童,看了小编的这个方法,你觉得怎么样呢?你有没有其他的方法呢,不妨说个小编听听,可行的话,小编可以把你的想法用编程来实现哦。

欢迎留言说出你的想法哦~

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180721G0SYGC00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券