我的数学聊斋
李尚志
北京航空航天大学理学院,北京,100083
email: lisz@buaa.edu.cn
之一、峨眉山的佛光 —— 连续函数介值定理
到峨眉山旅游,最重要的莫过于到舍身崖看佛光。1984年8月,我第一次上峨眉山。到达山顶时将近中午。安顿好住处就直奔舍身崖,希望能等着看佛光。天上艳阳高照,舍身崖下面是万丈深渊,山腰白云缭绕。如果云的高度合适,太阳以合适的角度照到云上,就会产生彩色光环,自己的人影还会投到光环中间,这就是佛光。那时舍身崖还没有什么游客,只有一名摄影师在那里等生意。我问摄影师:“今天能看到佛光吗?”摄影师答:“不能。已经有一个星期没有出现佛光了。”他还进一步解释道:“你看,山腰的云层太矮。所以今天不会有佛光。云如果太高,也不会有佛光。云的高度不高不矮正合适,才会有佛光。要想不高不矮正合适,这样的机会很难碰上。所以只有运气最好的人才能看到佛光。”我观察了一会儿,发现山腰的云层在一阵一阵往上涌。就问摄影师:“你看:开始的时候云层太矮。但是云层在往上涌,越涌越高。会不会涌到后来又太高了呢?在太矮和太高之间总有一个时候的高度恰到好处吧,那个时候不是就应当出现佛光了吗?”摄影师没想到我发此怪问,无话可答。他当然不知道,我在问这个问题的时候心里想的是高等数学中的连续函数介质定理:一个连续函数如果在某一点的值小于零,另一点的值大于零,从小于零到大于零过渡的过程中必然有一点的值等于零。我虽然靠这个定理把摄影师说得哑口无言,但心里也知道这个定理未必能让佛光出现,在悬崖边看了一会儿便打道回府,回住处去休息。还没有走到住处,就听见舍身崖那边传来人群的叫喊声:“快来看佛光呀!”转身一看,舍身崖边已挤满了人。我赶快返回,好不容易挤到崖边。趴在地上将头伸到外边往悬崖下看。山底的云层往上涌,涌到一定高度时就出现了彩色光环—佛光。随着云层继续升高,佛光消失了。再升高,这一堆云便散去不见了。山底又涌起新的一团云,升到一定高度再出现佛光。这个过程循环往复,我们便一次又一次看见佛光,好像是一次又一次观摩连续函数介值定理的教学片。一直观摩了三个多钟头,到下午四点左右才“下课”。
峨眉山云层的涌动是连续的,所以介质定理成立。黄山则不然:你刚才还看到山谷中充满了云雾,一瞬间云雾就消失得无影无踪,简直看不出有中间过程,接近于“阶梯函数”,这样的函数可以从大于零直接降到小于零而不必经过零值。
后记:以上文字在2002年写成文章发表在网上。2004年暑假的一天早上,我坐飞机从南方飞往北京,正好坐在左边靠窗的座位。往窗外一看,飞机离云层不太高,飞机下高低不平的云朵,好象一座座山峰在飞机下移动。早晨的阳光从东方照过来,将飞机的影子投射在云层上,缓慢地向北移动。这时,我突然想起峨嵋山的佛光。既然云层离飞机的高度随着飞机的移动不断变化,会不会在某个时刻云层离飞机的高度恰到好处,在云层上出现佛光呢?观察了一会儿,果然在云层上出现了一个不大的彩色光环,将飞机的影子围在中间。后来我与很多人谈起过佛光的事情,至少遇到三个人说他们坐飞机的时候看见过云层上的光环,但是他们都不知道峨嵋山的佛光,因此也不知道飞机上看见的这个现象与峨嵋山的佛光其实是同一回事。
之二、 《指鹿为马》之幼儿版—— 纠错码
从一本杂志上读到一则笑话:
某人向客人夸耀自己的儿子博比特别聪明:“他只有两岁,就认识所有的动物了。”并让儿子在客人面前表演。客人翻开一本动物画册,指着一张长颈鹿的画片问:“这是什么?”博比答:“马马。”又指了一张老虎的画片,又答:“猫咪。”然后指了狮子的照片,博比说:“狗狗。”又指了黑猩猩的画片,博比说:“爸爸。”
这则笑话的题目叫做《聪明的博比》。读了之后,发笑之余,你觉得博比聪明吗?假如你是考官,在这场辨认动物的考试中,你给博比多少分?
博比将所问的四种动物都答错了,按照我们通行的考试标准,只能得零分。但这只能说明他不认识这四种动物,却不能说明他不聪明。两岁的幼儿怎能认识所有的动物呢?他认识马、猫、狗、爸爸(人)这些在日常生活中常见的动物,不认识长颈鹿、老虎、狮子、猩猩这些在日常生活中少见的动物。他不认识长颈鹿,却能在认识的动物中找到一种最接近长颈鹿的,这就是马。对他不认识的老虎、狮子、猩猩,他也都能在认识的动物中分别找到最接近的猫、狗、爸爸来作为答案。这难道不是很聪明的吗?
实际上,博比采用的就是现代纠错码的原理。我们现在常采用由 0,1 组成的序列来传递信息。但是,传递过程中可能出错,比如序列中某一位本来是0,传递过程中变成了1,整个信息就错了。问题是:接收信息的一方怎么能知道收到的序列是否有错?如果有错,怎样纠正?
假如序列中某一位本应是0,却变成了1,成为另一个序列。如果这个已经错了的序列代表了另一个信息,那么接收方就无法知道这个序列是否发生了错误,而会将它误译为另一个信息。可以假定错误是不多的,比如假定在10 位中最多可能错一位。但必须让它错了一位之后就不代表任何信息,这才知道出现了错误。具体来说:由10位0,1数字总共可能组成210=1024种不同的序列。如果将这1024个不同的序列全部用来传递信息,那就不能发现错误了。只能将其中一部分序列作为传递信息的合法序列,其余的都是非法的序列。而且选择合法的序列使它们每两个之间至少有三位数字不相同。这样,如果接收到的序列不是合法序列,就可能断定是在传递过程中发生了错误。怎样进行纠正?向聪明的博比学习----将这个非法序列修改一位,纠正为一个与之最接近的合法序列! 就好象博比将“非法动物”(他不认识的)长颈鹿纠正为“合法动物”(他所认识的)马。
不妨说:纠错码的原理就是“指鹿为马”。发出的信息只能是“马”而不能是“鹿”,如果你收到的是“鹿”,那就是错了,要将它纠正为 “马”!
之三 人挤成照片之维数变化
有一次与几名中国学者和两名俄罗斯数学家一起吃饭。吃到后来照例问一个问题:吃什么主食?于是用英文问:“Rice or noodle ? ”(米饭还是面条?) 谁知这两位俄国人听不懂“noodle” (面条) 这个词。几个中国人用手比划了好一会儿还是没能让他们懂。我急中生智说:“Rice is zero-dimensional, noodle is one-dimensional. ”(米饭是零维的,面条是一维的。)不愧是数学家,两位马上就懂了。维数是数学上常用的概念,点的维数是0,线的维数是1,面的维数是2,立体的维数是3。说米饭是“零维的”就是说它可以看成一个一个孤立的“点”组成的,说面条是“一维的”就是说它是一条一条的线。依此类推,“飞饼”很薄,厚度可以忽略不计,可以认为是二维的。馒头自然就是三维的了。当然,严格说起来,米饭,面条,飞饼都是三维的。
说起维数,还有一件有趣的事:1969年我第一次路过重庆,那时的公共汽车非常拥挤。有人形容这是“把人挤成照片了”。人是三维的物体,被挤成二维的照片,虽然太夸张了一些,但将拥挤的程度形容得活灵活现。
人是3维的物体,体积不为0。挤成2维的照片,体积就变成了0。行列式也是这样:三阶行列式表示平行六面体的有向体积,如果其中有某两行相等,就是说平行六面体的三条相邻的棱中有两条重合,平行六面体退化成平面图形,也就是被“挤成照片”了,体积变成0。类似地,二阶行列式表示平行四边形的有向面积,如果两行相等,“平行四边形”的相邻两边重合,平行四边形退化为一条线段,面积为0。一般地,n阶行列式可以想象成一个n维立体的n维体积,如果它有某两行相等,“n 维立体”退化为 n-1 维或者更低维数的图形,“n维体积”当然就等于0。
之四 飞檐走壁之电影实现----微积分基本定理
小时候看电影,看见电影中的人物轻轻一跳就上了房顶,觉得演这些人物的演员真是了不起。世界跳高记录也只有2米多一点,还不如这些演员跳得高。于是就想:如果这些演员到国际上参加跳高比赛,不就可以打破世界跳高记录、拿到世界冠军了吗?
后来知道了这些演员并不能从地上跳到房顶上,电影镜头可以通过特技来实现。比如说可以让演员从房顶往下跳到地面,将往下跳的过程用电影胶片排下来,将拍得的胶片颠倒顺序由后往前放映,看到的效果就是从地面往上跳到房顶了,甚至还可以从水中往上跳到跳板上。
数学中像这样“倒过来放映”的事情也不少。
比如,如果已经知道运动物体的路程对时间的函数关系s = s (t),求导数就可以得到速度函数 v = s’(t),这比较容易。反过来,要由速度 v = v (t) 求路程 s = s(t),就要做定积分,也就是要将所经过的时间划分成许许多多很短的时间间隔,在每一小段时间内将物体的运动近似地看成匀速运动求得一小段路程,将各段路程相加得到总路程的近似值,再让各时间间隔长度趋于0求极限得到总路程的准确值。但是,这样太困难,就好像从地面跳到房顶那样困难。我们也可以化难为易,采用“从房顶往下跳”、再“倒过来放映”的方法,找到一个函数 F(t) 使得由它(通过求导数)得到的速度函数 v = F’(t) 正好等于预先已知的 v = f(t) ,这样就可以比较容易得到所需的 s = F(t)。比如,已经知道自由落体在时刻 t 的速度 v = 9.8 t , 求它所走过的路程 s。容易找到二次函数F(t) = 4.9t^2 使它的导数等于 9.8t, 并且 F(0)=0, 这样就可以知道 s = 4.9t^2 。通过这样“倒过来放映”的方法求定积分,这就是微积分基本定理。
另一个例子是由数列的通项公式 a(n) 求前n项和 S(n)。比如,已知a(n)=n^2 求 S (n),也就是求前n个正整数平方和公式。中学数学中将这个公式作为数学归纳法的证明的例子来讲。但这个公式很难想出来,就好象从地面跳到房顶上那么难。反过来,如果已知数列的前 n 项和的公式 S(n), 反过来求通项公式 a(n) 就很容易:a(1)=S(1),a(n)=S(n)-S(n-1) (对 n=2,3,…),比从房顶跳到地面还容易。能不能用“倒过来放映”的方法,设法找一个 S(n) 使它求出的通项 a(n)=S(n)-S(n-1) 正好等于已知的n^2 ? 容易发现,当 S(n) 是k次多项式时,S(n)-S(n-1) 是 k-1 次多项式。 因此考虑三次多项式 S(n) = an^3+bn^2+cn ,很容易通过解方程求得待定系数 a,b,c使 S(n)-S(n-1)=n^2,问题就迎刃而解了。
之五 算24 之不可能问题与难题
算24, 是很多人都知道的一种用扑克牌玩的游戏。每张牌代表一个的正整数。(为了简单起见,可以将J,Q,K及``大小王’’ 去掉,并约定A代表1。) 参加游戏的4个人每人出一张牌,4张牌就代表了4个正整数。四个人就开始竞争,看谁最先将这4个正整数通过加减乘除算出24来,而且每个整数恰好用一次。所用的数学知识虽然只是简单的算术,但要算得又快又正确也不容易。并且还有很多难题出现。
例如,如果4个数是1,1,1,1,你能算出24吗? 这个题目很难,所有的数学家都算不出来。你会不会因此而拼命地算这道题,希望有朝一日将这道题算出来,将所有的数学权威都打倒?只要你具有一点算术常识,就能看出用四个1按上述规则算出24是不可能的。因此你也不会白费力气去算这道“难题”。这不是难题,而是不可能问题。其实,现在有很多“民间数学家”拼命想解决的问题,比如用尺规作图三等分任意角、找出5次以上的一般代数方程的求根公式、等等,也和这个问题一样是不可能问题。只不过这些问题的不可能性不容易看出,而是前辈数学家用较高深的数学知识才证明出来的。不过,既然已经证明了,就不再是难题,而是已经解决了的问题。
又例如,4个数是5,5,5,1,让你算24,你能算出来吗?还有,如果4个数是3,3,7,7,或者4,4,7,7,或者3,3,8,8,你能算出来吗?
也许,经过努力之后你仍然算不出来,于是你相信它们都是不可能算出的。不过,如果你看见这样的答案:5 x (5 –1/5) =24,就知道用5,5,5,1算24不是“不可能问题”,至多只能算是一个“难题”。其实,这个难题也不太难。只要你解除思想束缚,不要求中间每一步的计算结果都是整数,而允许出现分数,就能自己凑出答案来。不过,这样“凑出来”的答案让人感到是偶然的巧合。能不能有一个更自然的思考方法呢?
先用 5,5,1算出24:5 x 5 – 1 =24。还剩下一个5没有用上。我们对 5 x 5 –1 进行恒等变形,利用乘法对于加法的分配律将两项的公因子5提到括号外:
24 = 5 x 5 – 1 = 5 x (5 – 1/5)
这样既保持了答数24不变,又将算式中两个5变成了3个5。
你不妨自己试一下,用类似的方法用 4,4,7,7 或 3,3,7,7算24。
3,3,8,8 稍微不同,但也可以用同样的思路解决。
24= 3 x 8 分子分母同除以 3得 8
3 x 3 – 8 3 – 8/3
之六 巧解民间算术题 -- 变化中的不变
中国民间流传很多算术题。比如,下面就是一个:100个人吃100个馒头,其中大人每人吃3个,小孩每3人吃1个。大人、小孩各多少个 ?
这个题目很容易用方程解出来。能不能用算术方法解? 可以考虑下面的思路。
先将要求放宽,只要求人数与馒头数相等,不要求都是100。就很容易凑出一个满足这个条件的答案:让1个大人与三个小孩同在一桌,共是4个人,吃4个馒头,人数与馒头数相等。假定摆很多桌子,人数与馒头数同时扩大。但不论怎样扩大,人数与馒头数始终相等。只需算一算要摆多少桌子才能让人数达到100: 每桌4人,100人就是 100/4=25桌。于是应当是25个大人,75个小孩。
另外有一道类似的民间算术题,稍微更难一些:100条鱼共100斤,其中大鱼每条10斤,中鱼每条1斤,小鱼每条1两。大、中、小鱼各多少条?
注意,中国很多年来都是1斤=16两,(一直到上世纪50年代才改成1斤=10两。后来更是统一用国际通用的计量单位“千克”,不再用中国自己的斤和两了。)因此小鱼的重量就是每16条1斤。
仍然先只要求鱼的条数与斤数相等,再将这个相等的数扩大到100。由于中鱼每条1斤,条数与斤数本来就相等,不需考虑。只考虑大鱼与小鱼。
大鱼:1条à 10斤,斤数比条数多9 à x 5= 45:5条大鱼 50斤
小鱼:16条à 1斤,斤数比条数少15 à x 3= 45:48条小鱼 3斤
要使条数与斤数相等,必须将多的与少的相互抵消。容易算出9与15的最小公倍数为45,
因此将9与15分别扩大 5倍、3倍都变成45,也就是将 1条大鱼、16条小鱼分别扩大5倍、3倍各变成5条大鱼、48条小鱼,它们的总条数5+48 = 53 与总斤数50+3=53 就相等了。只需再扩大成100就行了。然而,53即使乘2就已经超过100,因此不可能通过乘法来扩大到100。但是可以通过增加中鱼来扩大到100。由 100–53 = 47知道,只要在5条大鱼、48条的基础上再添加47条中鱼,条数和斤数就都扩大到了100。
|