我对各种违背直觉的函数构造特别有兴趣,看看这里你就知道我对这些特殊函数有多痴迷了。因此,当我发现竟然有专门收集各种特殊函数的数学书时,可以想象我的心情有多激动。我试着以“反例”为关键字在图书馆进行检索,借了一大堆实分析数学书。这些书都已经很老了,封皮烂了又烂,已经修修补补重装了两三次封皮。翻翻这些老书,不由得对老一辈的学者和作家表示由衷的崇敬;虽然文字、排版都不出彩,但书的容量极大,内容也很实在。
废话不多说了,让我们来欣赏一下书里的一些精彩篇章吧。
函数
平面上处处稠密但在平行于坐标轴的直线上无处稠密的点集
我一直很喜欢有各种惊异性质的奇怪函数,比如阶梯状的连续函数、只在一点连续的函数、任意小的区间所对应的值域都是整个实数域的函数等等。在这里面,最令人吃惊的是恐怕要数在平面上处处稠密的单值函数(其实前面那个函数显然也有这样的性质)。这样的函数打破了一维和二维之间的界线,启发人们重新思考稠密性的意义。不过,有人提到,这两个函数之所以在平面上稠密,是因为它们在平行于x轴的直线上都是稠密的。我们自然开始设想,有不有可能在平面上找到这样一个点集,它在平面上处处稠密,但在任意一条平行于坐标轴的直线上都无处稠密呢?
这是可以办到的。为了简便起见,我们只考虑平面区域[0,1]×[0,1]上的点集。让我们考虑由所有满足以下条件的点(x,y)所组成的点集:x和y都是有限小数,并且小数位数是相同的。例如,点(0.0516, 0.1025)就属于这个点集,但(0.23, 0.1001)就不属于这个点集,(1/3, π/6)就更不属于该点集了。显然,对于任何一个有限小数x’,直线x=x’上都只有有限多个点;类似地,对于任意一个有限小数y’,直线y=y’上都只有有限多个点。因此,该点集在所有平行于坐标轴的直线上都无处稠密。有趣的是,该点集在整个平面区域内却处处稠密。在任意小的区间x’-ε≤x≤x’+ε,y’-ε≤y≤y’+ε中,总存在一对小数位数相同的x和y。我们只需要写出一个比ε更小的有限小数λ,然后取(x’+λ, y’+λ)(只保留和λ相同的位数),则该点必然在前面所说的范围内。
构造函数使得任意小的区间所对应的值域都是整个实数域
首先呢,让我们来一个牛B函数大回顾。这下我不知道要赚多少的PV。你能否构造一个函数f(x),使得:
它是一个阶梯状的连续函数?
它是除常函数之外的没有最小正周期的周期函数?
该函数只在一点连续?
该函数在[0,1]和(0,1)之间形成一一对应?
该函数某一点导数为正,但该点邻域不构成单增区间?
平面上任意小的圆内均包含函数上的点?
另外还有一些可能是众所周知(所以没在Blog里写过)的函数,比如处处连续但处处不可导的函数、在有理点处处不连续在无理点处处连续的函数等等。
好了,现在呢,又一个牛B东西出现了。你能不能想出这样一个函数f,它的定义域和值域都是R,并且对于任意小的区间l=(u,v),这个函数都能把(u,v)满射到整个R上。换句话说,是否存在这样的函数f(x),对于任意一个实数t以及任意一个区间(u,v),总存在一个x满足u<x<v且f(x)=t。
是否存在只在一点连续的函数?
有人突然问到我,有不有可能构造一个函数,它只在一个点连续,其余地方处处不连续。函数构造是一个非常诱人的问题,我非常喜欢那些具有各种不可思议的性质的函数,那些令人吃惊的特性往往违背了大多数人的直觉和常识,这些都是茶余饭后闲谈的绝佳话题。前面提到的这个问题就是一个很有趣的问题。永远不要想当然地以为只在一点连续的函数不存在,各种怪相函数可谓无奇不有。仔细考虑了一下,我想这个函数应该和Dirichlet函数有点联系吧,毕竟很多与连续性相关的函数其原型都是Dirichlet函数,比如满足“无理点处处连续、有理点处处不连续”的爆米花函数就有Dirichlet函数的影子。然后我就突然想到,我彻底火星了,而且还是超级乌龙火星——这个玩意儿我自己还在Blog上写过,只是当时我并没注意到罢了。我曾经在描述Hilbert曲线时写到:
你知道吗,除了常函数之外还存在其它没有最小正周期的周期函数。考虑一个这样的函数:它的定义域为全体实数,当x为有理数时f(x)=1,当x为无理数时f(x)=0。显然,任何有理数都是这个函数的一个
最小正周期,因为一个有理数加有理数还是有理数,而一个无理数加有理数仍然是无理数。因此,该函数的最小正周期可以任意小。如果非要画出它的图象,大致看上去就是两根直线。请问这个函数是连续函数吗?如果把这个函数改一下,当x为无理数时f(x)=0,当x为有理数时f(x)=x,那新的函数是连续函数吗?
…………
有了Cauchy定义,回过头来看前面的问题,我们可以推出:第一个函数在任何一点都不连续,因为当ε< 1时,δ范围内总存在至少一个点跳出了ε的范围;第二个函数只在x=0处是连续的,因为此时不管ε是多少,只需要δ比ε小一点就可以满足ε-δ定义了。
类似地,我们可以扩展出只在两个点、只在三个点连续的函数。只需把有理点上的f(x)=x换成f(x)=(x-a)(x-b)(x-c),我们便得到一个只在a, b, c三点连续的函数。
趣题:构造一个[0,1]到(0,1)的一一映射
网友Gestorm在TopLanguage里问到,如何构造一个[0,1]到(0,1)的一一映射。两个集合的势显然相等,它们之间一定有一个一一对应的函数。注意到(0,1)是[0,1]的子集,利用Cantor-Bernstein-Schroeder定理,只要我们能找到一个从[0,1]到(0,1)的单射函数,我们便找到了两个集合间的双射函数(因为上述定理的证明是构造性的)。这非常简单,例如f(x)表示x与0.5的平均数即可。考虑上述定理的Julius König证明,我们立即得到一个[0,1]到(0,1)的一一映射:f(0)=1/4, f(1/4)=3/8, f(3/8)=7/16, …,不断进行(x+1/2)/2的迭代;同样地,f(1)=3/4, f(3/4)=5/8, f(5/8)=9/16, …;对于其它所有未定义到的x,f(x)=x。这个函数显然是双射的。
仔细观察这个函数。当你领会到这个函数的真谛时,你突然恍然大悟:我可以用类似地办法弄出无穷多个[0,1]到(0,1)的一一映射。例如,最简单的便是f(0)=1/2, f(1)=1/3;然后f(1/2)=1/4, f(1/3)=1/5, f(1/4)=1/6, …, f(1/i)=1/(i+2);对于其它未定义的x,f(x)=x。
查看TopLanguage的原帖可以看到一些类似的结果。