
4 莱布尼兹级数
【本章摘要】
数学知识:莱布尼兹级数的通项公式,无穷级数求和的公式表示法。
编程知识:for和while循环语句的特点,Python加、减、乘、除的写法,赋值的方法,运算符的优先级。
莱布尼兹(1646—1716)是德国哲学家、数学家、职业律师,历史上少见的通才,被誉为17世纪的亚里士多德。在数学上,他和牛顿先后独立发现了微积分,1684年,他首先公开发表了第一篇微分论文,定义了微分概念,采用了微分符号dx、dy;1686年,他又首先公开发表了积分论文,讨论了微分与积分,使用了积分符号∫。这些数学符号今天我们仍在使用。此外,莱布尼兹还发明并完善了二进制,这是今天计算机科学的数学基础。在研究微积分的过程中他首先发现了一个非常简洁的求圆周率的公式:

首先我们来认识一下这个通项公式:分母全是奇数,可以用2n-1表示,从n=1开始取值,分子为1,每一项的符号则是正负符号交错,第一项是正的,第二项为负,那么可以写成(-1)n+1,n=1时为正,上面这个公式也可以写成如下形式:

其中,∑是一个求和符号,读音是Sigma,符号底下的n=1表示从1开始,上面的∞表示一直加下去,直至无穷。用这个求和符号后面接通项公式,就表示了一个无穷级数的求和。注意,我们在学习有理数的性质时,有“两个有理数的和仍是有理数”的结论,这个级数反映了这样一个事实,即无穷多个有理数的和可以是无理数。下面我们写一个Python程序来验证上面这个公式是否正确。
我们用两种方法来验证。
方法1:我们连续地加10 000项,看看和是多少,这个方法可以用for循环语句来实现。
代码如下:

我们初始定义了两个变量sum为0,sign为-1,sum是为了存放累加的和,sign就是为了计算(-1)n+1,初始为-1,以后每次再乘以一个-1,就计算出了这个(-1)n+1的值。代码中我们也看到乘法用“*”来表示,除法用“/”来表示,为了让2*n-1作为一个整体来计算,我们用“()”把它括起来。
程序中用了一个for来控制循环多少次,句型为“for(控制变量)in(有序序列):”,这里面包括冒号“:”在内一共5个元素,一个都不能少;Python中range()函数可以创建一个整数列表,一般用在for循环中。
range(start,stop[,step])的参数说明:
start——计数从start开始,默认是从0开始。
stop——计数到stop结束,但不包括stop。
step——步长,默认为1,如果为1,这个参数可以不填。
range(1,10)实际上将生成[1,2,3,4,5,6,7,8,9]这个列表,n就依次从1一直变到9,每次增加1。程序中range(1,10001),所以程序中就从1开始一直循环变到10000结束。
程序中我们用sum+=sign/(2*n-1)实现累加,sum+=是sum=sum+…的一种简写法,这句话表示循序累加。这个程序累计执行10000次后,结果确实与π很接近了。
假如我们已知π=3.141 592 6,希望验证这个公式要加到n为多少时才能与已知的π之间的误差小于0.000 01,可以用while这种循环语句的方式来验证,while循环语句的句法为“while(循环继续的条件):”,包含3个元素。
代码如下:

这次我们用到了while这种循环方法,这个程序中有两个新的知识点。
(1)我们用import导入了math这个模块,并且在程序中用math.pi来引用这个模块中定义的π常数,大家可以在Python的Console中尝试一下,它的值是3.141 592 653 589 793。
(2)我们调用了Python中内置的函数abs(),这个函数就是求绝对值,程序中判断是否继续循环的条件就是判断我们求出来的级数和的4倍与π的差是否比0.000 001更小,如果还没有就继续求和,直到满足要求。
我们发现,一共要循环100万次才达成目标。
总结:在明确知道要循环多少次的情况下,可以用for语句来构建循环;而不能预知要循环多少次的情况下,可以用while语句来构建循环。
练习
1.用for循环编程求1+2+3+…+2020的和。可以首先讲解等差数列的求和方法,再编程验证。
2.分别用for循环语句和while循环语句编程求1+3+5+7+…+2021的和,注意在讲解时,要小朋友们先找到通项公式,然后用通项公式求出应该循环多少次。