WORD格式可编辑
专业知识分享
3π的计算模型—
π的无穷级数算法
思想:利用一些特殊函数的幂级数展开式计算圆周率。
根据幂级数展开的相关知识,易知:
因为,故可以求得的幂级数展开式为:
当x=1时,
用Matlab计算:
创建m文件calpi1.m,内容如下:
function y=calpi1(k)
for n=1:k
a(n)=(-1).^(n-1)./(2*n-1);
end;
4*sum(a)
在命令窗口中输入如下命令:
它是一个与π有关的无穷级数,实际计算时,我们只能使用有限项。如果取级数前n项之和作为π的近似值,其误差为
|rn|≤
为了保证误差不超过10-4,就要取级数的前20000项进行计算,计算量之大可想而知。现在看来,计算π的级数有明显的缺点:级数收敛太慢,计算量过大。其原因是|x|偏大。如果想要精确计算π的数值的话,非常有必要寻找改进以后的方法,这就引出了两个能够提高计算效率的公式
(1)欧拉公式:
现取x=12,令α=arctan12,显见0<
记β=π4-α,而tanβ=
所以β=arctan13
(2)马庭公式:
可取x=15,令α=arctan
tan4α=120119≈1
即π4=4α-
将欧拉公式和马庭公式与arctanx的泰勒级数相结合,会加快该级数的收敛速度,具有很强的实用性。
用Matlab计算:
创建m文件calpi2.m,内容如下:
function y=calpi2(k)
for n=1:k
a(n)=(-1).^(n-1)*(1/2).^(2*n-1)./(2*n-1)+(-1).^(n-1)*(1/3).^(2*n-1)./(2*n-1);
end;
vpa(4*sum(a))
在命令窗口中输入如下命令:
从结果上可以看出,改进后的算法优于不用公式的arctan幂级数展开。在得到相同精度的条件下,马庭公式所需要的叠加步数要明显少于欧拉公式,并且在计算精度越高的情况下,优势越明显。道理很简单,因为马庭公式计算的收敛速度要显著快于普通公式。欧拉公式决定收敛速度的是,而马庭公式决定收敛速度的是,因为的收敛速度快于,故马庭公式计算π的时候收敛速度要快于普通公示。所以马庭公式比普通公式更加精确,并且在计算高精度的时候有很大优势。
误差及算法速度分析:
设定精确到小数点后100位的π值。如果采用常见的求和公式π=n=0∞((-1)n42n+1),则要使截断误差不大于10
π
由于该公式第一部分的收敛速度远小于第二部分,因此将其分为两部分计算。如果要使截断误差不大于10-100,则有162n+1·52n+1
程序运行后得到的结果是通过求arctan项得到一万位的精确值,然后加和而得到的,因此在计算结果的最后几位由于arctan项的舍入误差以及加和时的舍入误差影响了计算结果的准确度,但是这种舍入误差只能影响最后几位。计算的结果可信并且是准确的。