割圆术迭代法求PI值.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
割圆术迭代法求PI值 作 者:叶 俊 学 号:200820302011 问题提出 圆周率的应用很广泛,尤其是在天文、历法方面,凡牵涉到圆的一切问题,都要使用圆周率来推算。我国古代劳动人民在生产实践中求得的最早的圆周率值是“3”,这当然很不精密,但一直被沿用到西汉。后来,随着天文、数学等科学的发展,研究圆周率的人越来越多了。西汉末年的刘歆首先抛弃“3”这个不精确的圆周率值,他曾经采用过的圆周率是3.547。东汉的张衡也算出圆周率为π=3.1622。这些数值比起π=3当然有了很大的进步,但是还远远不够精密。到了三国末年,数学家刘徽创造了用割圆术来求圆周率的方法,圆周率的研究才获得了重大的进展。后来经过祖冲之的进一步研究,才把π的值计算得比较精确,他算出π值在3.1415926和3.1415927之间。现代计算机技术得到空前发展,其计算速度和精度都有了很大进步,因此我们可以依靠计算机采用迭代法来再次计算π值,把它计算得更精确。 问题背景 我们都知道圆周率就是圆的周长和同一圆的直径的比,这个比值是一个常数,现在通用希腊字母“π”来表示。圆周率是一个永远除不尽的无穷小数,它不能用分数、有限小数或循环小数完全准确地表示出来。祖冲之计算的结果共得到两个数:一个是盈数(即过剩的近似值)为3.1415927;一个是朒数(即不足的近似值)为3.1415926。圆周率真值正好在盈朒两数之间。按照当时计算都用分数的习惯,祖冲之还采用了两个分数值的圆周率。一个是355/119(约等于3.1415927),这一个数比较精密,所以祖冲之称它为“密率”;另一个是22/7(约等于3.14),这一个数比较粗疏,所以祖冲之称它为“约率”。在欧洲,直到1573年才由德国数学家渥脱求出了355/119这个数值。因此,日本数学家三上义夫曾建议把355/119这个圆周率数值称为“祖率”,来纪念这位中国的大数学家。 问题分析 采用圆的内接正多边形和圆的外切正多边形,通过将多边形的边数成倍增大到一定数值时二者(圆与正多边形)周长近似相等,从而得到有关π和n(边数)的一个方程,进而用迭代法来求解,控制误差在一定的范围内。假设圆的半径为0.5 当采用外切正多边形时有 当采用内接正多边形时有 然后取定初值n=3 分别用迭代法来求解出各自的数值解。因为用内接正多边形算出的解a比准确值偏小而用外接正多边形算出的解b比准确值大,所以准确解pi在二者之间,即有aπb 程序及注释 程序一:多边形画法程序 function plot_polygon(n,a) %n为边数a为边长默认值为1 if nargin2 a=1; end %输入参数小于2则边长为1 t=(0:n)*2*pi/n; theta=(n-2)*pi/2/n; %多边形的半角度 r=a/2/cos(theta); %顶点到中心的距离 x=r*cos(t); y=r*sin(t); fill(x,y,r-); axis square %调整为方形 hold on theta=0:0.01:2*pi; x1=cos(theta); y1=sin(theta); plot(x1,y1,r-) 此函数为M函数输入plot_polygon(n,a)命令后运行,当只输入n值时得到边数为n边长为1的多边形;当输入n和a时,得到边数为n边长为a的多边形,同时控制边长a的值可以得到同一圆的内接与外切多边形。不难看出随n值的增大多边形的周长与圆的周长不断接近,祖冲之算到当n=24576时得出了比较精确值,理论上当n→∞时二者相等。不过事实上,我们不可能把内接正多边形的边数增加到无限多,而使这无限正多边形的周界同圆周重合,只能有限度地增加内接正多边形的边数,使它的周界和圆周接近重合。 程序二:内接正多边形的迭代法程序 k=0; %迭代次数置零 ero=0.5; %设置初始误差值 =1/2; L=3*sqrt(3)/2; %L的初始值 m=[]; n=[]; while ero5e-8 c=sqrt((1+c)/2);%c的迭代格式 L=L/c; %L的迭代格式 ero=pi-L); %确定新误差值 k=k+1; %计算迭代次数

文档评论(0)

liudao + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档