前言
众所周知,圆周率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,较之前下降了一个数量级。
结束
亲爱的各位谢童,看了小编的这个方法,你觉得怎么样呢?你有没有其他的方法呢,不妨说个小编听听,可行的话,小编可以把你的想法用编程来实现哦。
欢迎留言说出你的想法哦~
领取专属 10元无门槛券
私享最新 技术干货