[zt]〖Math〗构造函数使得任意小的区间所对应的值域都是整个实数域
转自Matrix67's Blog:http://www.matrix67.com/blog/archives/978
你能不能想出这样一个函数f,它的定义域和值域都是R,并且对于任意小的区间l=(u,v),这个函数都能把(u,v)满射到整个R上。换句话说,是否存在这样的函数f(x),对于任意一个实数t以及任意一个区间(u,v),总存在一个x满足u<x<v且f(x)=t。
首先,注意到函数h(x)=tan( pi*(x-1/2) )将(0,1)上的数与全体实数一一对应,因此,我们只需要找出一个g(x),它能把任意小的区间满射到(0,1)区间上,然后在它上面复合一个h(x)就得到我们题目所求的函数了。
我们的g(x)可以这样定义:首先,把x写成三进制数。如果x的三进制表达里没有数字2或者有无穷多个数字2,那么g(x)=0。否则,x的三进制中含有有限多个数字2。找到最末的一个数字2,把它及其前面的部分都去掉,这样剩下的就只有0和1了。在这个01串前面加上一个小数点,把它当作一个二进制小数转换回去,作为g(x)的函数值。这样的话,g(x)就是一个值域为[0,1)的函数,并且在任意小的区间内,我们总能找到一个点,它所对的函数值就是你想要的那个值:只需要取一个该区间内的精度足够高(小数点位数足够多)的三进制有限小数,在后面加一个数字2,再后面的01串就可以想要啥就要啥了。
注意到g(x)把任意小的区间都映射到[0,1)上,而前面提到的h(x)则在(0,1)和R之间建立了一一对应的关系。于是,定义f(x)为,当g(x)=0时f(x)=0,否则f(x)=h( g(x) )。这就是满足题意的函数f。
题目来源:http://domino.research.ibm.com/Comm/wwwr_ponder.nsf/Challenges/October2001.html