Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
86 lines (53 sloc) 9.67 KB
title tags categories date
从0.99...=1说起数学中的“无穷”概念
科普
数学
2016-02-17 13:55:46 -0800

前两天偶然看到一个同学在纠结“0.99...是否等于1”这个问题,这算得上是一个经典的问题了,但许多同学并没有深入理解过它。今天从这个问题出发,写一点个人对于数学中“无穷”这个概念的理解。

首先给出**这个问题的分析数学证明**(文末有简单算术证明,但不够严谨):
  1. 我们知道任何一个无限小数都可以表示为一个位数越来越多的有限小数数列的极限,比如圆周率是3、3.1、3.14、3.141、……这个数列的极限。0.99...是0.9、0.99、0.999、……的极限;
  2. 上面这个数列和1“要多近有多近”,任意给一个大于零的数,上面这个数列都能从某一项开始,和1的差距小于该数。所以这个数列的极限是1;
  3. 一个数列不能收敛于两个不同的极限,因此0.99...=1。

最常见的一种疑问是这样的:1-0.99...=0.00...001,后者“显然”不等于0。但是凭什么说1-0.99=0.00...001呢?一般来说有两种原因会让人以为这个等式是成立的,其一是想象一个减法竖式,从左向右一位一位地减:

  1. 个位上1减0得1。
  2. 十分位上不够减,向个位借位,个位变为0,十分位结果是1。
  3. 百分位上不够减,向十分位借位,十分位变为0,百分位结果是1。
  4. 依此类推,貌似进行无穷步后,就会有无穷个0,后面跟着一个1。

另一种思路其实和上面的思路等价:认为1-0.9、1-0.99、1-0.999、……这个数列“一直进行下去”应该就得到1-0.99...的结果了。“找规律”易知,结果是无穷个0后面跟着一个1。

而上方第二个思路其实已经很接近真理了,我们只要再将它在数学上规范一下就能得到正确的结论:由数列极限的性质可知,1-0.9、1-0.99、1-0.999……这个数列的极限就是1-0.99...,而这个数列显然是10^-n,收敛于0。


在此,我想插入几个虚构的小问题来更好地引出相关的概念:

  • 假如一个旅馆有100个房间,现在已经住了99个人,又新来了一位客人,该怎么安排他住下呢?答案是,既然只住了99个人,那么必然存在某个房间号n,其中没有住客人。让新客人住在n号房间即可;
  • 假如一个旅馆有无穷个房间,每个房间都有一个自然数编号,现在已经住满了,又新来了一位客人,该怎么安排他住下呢?说“让他住在第‘无穷加一’号房间”是不行的,这不是有意义的房间号。答案是,让任何原本在n号房间的客人住进n+1号房间,把新来的人安排在第一个房间。
  • 假如一个旅馆有无穷个房间,每个房间都有一个自然数编号,现在已经住满了,又新来了无穷位客人,每个客人都有一个自然数序号,该怎么安排他们住下呢?让原本在n号房间的客人住进“n加无穷”号房间也显然是没意义的。答案是,让任何原本在n号房间的客人住进2n号房间,把新来的第m个人安排在2m-1号房间。

或许有人会有疑问:这样调换房间,要花无穷的时间,这个算法是无法结束的啊。不过数学证明不在乎这样的情况,数学证明所关心的是:是否每个人都确实有房间睡觉?我们可以假想有一个考官,不断问我们“原来住在xx房间的人现在住在哪?”“新来的第xx个人要住在哪?”只要他的每个问题我们都能立刻给出明确的回答,而且这些回答不会自相矛盾,就算是证明成功了。

上述的第二个问题如果采用“让新来的人住在第无穷加一号房间”,那么我们将无法明确用一个数字回答出考官的问题:新来的人住在哪个房间?因此这个解法是错误的。上述第三个问题如果采用“把第二个问题的解法重复无穷次,直到所有客人都住下”,我们也无法明确用一个数字回答出:原来1号房间的人住在哪个房间?因此这个解法也是错误的。


我想要说明的就是,数学中是怎样表述“无穷”这个概念的。其实数学中自始至终都是不许直接说“无穷”的——毕竟无穷不是个数字,不能直接参与运算。“某个数的小数点后第无穷位是1”这话完全没有意义,正如“无穷号房间”是没意义的一样。但我们有两种巧妙的手段绕开这个限制,来表述和无穷有关的命题,一种手段是“任意”,另一种手段是“极限”。


前面解决旅馆问题所用到的方法就是“任意”。通过“对任意n”这样的表述,我们覆盖了所有自然数,而且n无论有多大,永远是一个实实在在的数字,n+1、2n等等也都是具体的数,它们就可以作为房间号。

我举一个数学中用“任意”这个技巧来证明和无穷有关的命题的经典例子——证明[0, 1)上的实数集无法和自然数集建立一一对应关系:

使用反证法,如果实数集可以和自然数集一一对应,那么我们可以把对应于1、2、3、……的实数一行一行写出来,列成一个无穷大的表格。假设这张表是这样的:

  1. 0.35782136248...
  2. 0.31258494324...
  3. 0.78349143248...
  4. 0.12346891743...
  5. ...

那么我们可以构造这样一个实数x,对于任意自然数n,x的小数点后第n位 不等于 上表第n行的数字的小数点后第n位(加粗位)。那么显然上表任意一行的数字都不等于x,所以x不在上表中,x无法对应于一个自然数,与假设矛盾,证毕。


而0.99...=1这个问题的证明,需要的是“极限”这个技巧。不要忘了,我们从来没有学习过1-0.99...这个减法的计算方法——我们只学过有限小数的运算法则,所以不能想当然地计算它,而要先给无限小数的运算一个合理的定义。以下这个定义应该是易于被接受的:涉及无限小数的计算,应当找出一个有限小数的基本列,其收敛于该无限小数。用数列中的各个项依次代入计算,结果构成一个新的数列,该数列的极限(如果存在)为计算的结果。

根据这个定义,我们可以找出0.9、0.99、0.999、……这个基本列收敛于0.99...。因此计算的结果就是0.1、0.01、0.001、……这个数列的极限:0。

可能有人又有疑问了,1-0.9、1-0.99、1-0.999、……这些数都是正数,1-0.99...怎么就不是正数呢?这就是见得多了才能发现的人生的经验了(笑)——极限常常和数列中各项的性质不同,一个集合中的数列,是可能收敛于集合之外的。只有少数集合的性质很良好,其中的基本列一定收敛于集合内的元素,这样的集合我们称为具有“完备性”。因为0.1、0.01、0.001、……这个数列的极限不为正,所以“正数”这个集合是不具有完备性的,仅此而已。

用“极限”这个技巧来表述“无穷”的概念的例子就很多了,比如对导数的定义——怎么找出一个离x0“无穷近”,但又不是x0的点呢(如果取x0,就会导致分母为零)?方法就是找出一系列点,离x0越来越近,收敛于x0。收敛于x0并不会引起分母为零的错误,因为对于其中任意一个点,它不是x0,分母不为零。


附录:常见的一些0.99...=1的简单算术证明。它们不严谨之处在于,用到了无限小数的四则运算,而前面已经说过了,这个的运算法则不能臆测,需要先给出定义再证明。

  • 0.11... = 1/9,0.22... = 2/9,……,找规律得0.99... = 9/9。
  • 1 = (1/3)*3 = 0.33...*3 = 0.99...。
  • 设x = 0.99...,则10x = 9.99... = 9+x,解方程得 x = 1。

后记:刚入学时,偶然一次和一个学过数学竞赛且对数学充满热爱的同学聊天,就聊到了“怎么证明任意两个不等实数之间的开区间内一定有至少一个有理数(因此把区间平分,就能找到两个不等有理数,也就证明了其中有无穷个有理数)”,这其实是有理数在实数空间的稠密性问题。当时我想出的证法大致是一位一位比较,直到找出不相等的数位后,分几种情况进行放缩,构造出一个有限小数在区间内。这个证法被对方无情地拒绝了,对方认为既然给定的两个无理数可以无限接近,“找出不相等的数位”这一步需要无穷的时间才能实现,“这种证明写到卷子上肯定是不得分的”。半年以来,我每每想起这件事都感到非常心痛,既为自己当时数学知识不足,无法讲清楚自己的观点感到难过,也为对方“不理解数学思想,只论卷面成绩”的态度惋惜。今天终于把相关的知识梳理了一遍写下来,也算是了却了这个心结吧。

后记的后记:有理数在实数空间的稠密性是很容易证明的,证明的思路和我曾经的那个思路是有相似之处的(但我的思路还不够形式化,显得比较粗暴)。首先我们知道,实数就是用有理数定义出来的——任意实数都是某个有理基本列的极限。给定的两个实数之间有一个差delta,那么我们取一个递减收敛于较小的那个实数的有理基本列,一定存在一个有理数 - 较小的那个实数 < delta,且大于较小的那个实数,这样就找到了。

鉴于我不是数学专业(而且数学学的也不好),文中难免有错误,如果发现请在评论中指出,我会尽快修正,谢谢!

You can’t perform that action at this time.