原来函数也是有平方根的

    最近看到一类有趣的问题:如何求解 f(f(x)) = g(x) ?我在网上简单搜索了一下,发现这里面真是大有文章。最先对这个问题进行系统研究的应该是 Hellmuth Kneser ,他把函数迭代的次数扩展到了非整数的情况,求解 f(f(x)) = g(x) 就可以更简单地说成是求解 g(x) 迭代 1/2 次后的结果,更形象的说法就是 g(x) 的“平方根”。 Hellmuth Kneser 还对 f(f(x)) = e^x 的解进行了研究,从之后的数学论文发表情况来看,这也是数学家们最关心的问题。

    e^x 的“平方根”究竟是什么样的呢?不妨假设满足要求的 f(x) 也是一个连续递增的函数,那么它的增长速度必然超过一切多项式函数(否则迭代的结果还是多项式),同时也必然小于一切指数形式的函数。而事实上,求解一个满足要求的 f(x) 并不难;稍作思考,我们就能够给出一个看似有些平凡的答案。

    取任意一个负数,记作 a 。选取任意一个在 (-∞, a] 上单调递增的函数,使得当 x 从 -∞ 增加到 a 时,函数值也从 a 增加到 0 。这样一来,当 x 趋于负无穷时, f(x) 趋于 a , f(f(a)) 就正好趋于 0 了。但 f(a) = 0 ,那么 f(0) 就必须是 e^a ;而考虑到 f(0) = e^a ,那么 f(e^a) 便只能取 1 了。同理,f(1) = e^(e^a),而 f(e^(e^a)) 就等于 e 。以此类推,我们便得到了一连串满足要求的点。我们可以从 (-∞, a] 上的其它点出发,用同样的方法填充上述“端点值”之间的部分,得到满足要求的 f(x) 。

    根据这个思想,我们可以构造出一个具体的 f(x) 来。取 a = -1,在 (-∞, -1] 上定义 f(x) = e^(x+1) – 1,它的函数值正好从 -1 变到了 0 。在 (-1, 0] 上,则有 f(x) = e^(f-1(x)) = e^(ln(x + 1) – 1) = (x + 1)/e 。对于其它的 x ,则递归地定义为 f(x) = e^(f(ln(x))) 。由此我们便得到一个分段函数,正是这个分段的办法才让它夹在了多项式增长和指数级增长之间:


 
    当然,满足 f(f(x)) = e^x 的函数不止这一个,利用上述构造方法我们能找出无穷多个满足要求的函数来。事实上,我们还有更简单的例子,来说明 f(f(x)) = g(x) 的解有可能不止一个:

    定理 1. 对于某些 g(x) ,满足 f(f(x)) = g(x) 的函数 f(x) 可能不止一个。

    例如, f(f(x)) = x 就不止一个解。 f(x) = x 和 f(x) = -x 都是满足要求的解。

 
    而对于任意给定的 g(x) ,我们还有一个超级赖皮的方法找出一个几乎完全符合要求的 f(x) :

    定理 2. 对于任意 g(x) ,都存在某个 f(x) ,使得除了某个任意小的区间以外,其余所有 x 都满足 f(f(x)) = g(x) 。

    随便取某个很小很小的区间 I 。随便取一个从 R\I 到 I 之间的一一对应函数 h(x) 。然后规定,当 x 属于 R\I 时, f(x) = h(x); 当 x 属于 I 时, f(x) = g(h-1(x)) 。这样一来,对于所有不属于 I 的实数 x ,都有 f(f(x)) = g(x) 了。

 
    不过,也不要把事情想得太乐观了。

    定理 3. 对于某些 g(x) ,不存在函数 f(x) 使得 f(f(x)) = g(x) 。

    令 g(0) = 1 , g(1) = 0 ,其余情况下都有 g(x) = x 。下面我们证明,不存在 f(x) 使得 f(f(x)) = g(x) 。假如有这样的 f(x) ,无妨假设 f(0) = a 。则 f(a) = f(f(0)) = g(0) = 1 。容易看出, a 既不可能是 0 ,又不可能是 1 (否则 f(0) 或者 f(1) 将成为不动点,矛盾)。于是 f(1) = f(f(a)) = g(a) = a 。于是 g(1) = f(f(1)) = f(a) = 1 ≠ 0 ,矛盾。

    这个话题还有很多有意思的研究结果。感兴趣的朋友可以移步至下面两个链接。

    http://www.math.niu.edu/~rusin/known-math/97/sqrt.exp
    http://mathoverflow.net/questions/17614/solving-ffxgx

26 条评论

  • 高考完了

    函数有一阶导数,二阶导数……那有没有0.5阶导数?

  • Kaa1el

    这样递归出的函数几乎不可能是解析的
    所以要得出解析的函数平方根是很难的~

  • Kaa1el

    这是我九月份用一个冗长的递归算法得出的e^z完美平方根(解析)的级数展开的前11项(从z^0到z^10, 常数项因为算法关系只能得出近似值), 楼主试试看这个, 图像会更完美.

    {0.693147, 1, 1/4, 1/48, 0, 1/3840, -(7/92160), 1/645120, 53/3440640, -(281/30965760), -(1231/14863564800)}

  • sw

    地板……

  • 白左

    一点也不美……

  • Cui

    表示不解

  • 2323343.blogbus.ocm

    这不就是群论的东西嘛,群论的东西很深刻

  • alreadydone

    #地毯 Kaa1el:
    你给出的数列,除第一项外,应该是e^x-1的“函数平方根”的幂级数展开系数。事实上,对常数项非零的g,f(g(x))的定义涉及到f在g(0)处的收敛性,故从代数意义上来说,f与g的复合无法定义。参见:http://en.wikipedia.org/wiki/Formal_power_series#Composition_of_series
    现欲将e^x表成h(h(x))的形式,因e^0=1,故h(0)不能等于0,虽然从分析角度说,可以定义h与自身的复合,但涉及到无穷级数的计算,似不可能得到全为有理数的结果;若考虑e^x-1,则只出现有限的代数运算,得出的结果也就都是有理数了。

  • biohu

    严重长见识了

  • Para

    地毯那个,常数项像是ln 2。。。

  • zhangdaming

    若取a=-b,b是满足(b^2)*e^b=1的正数,约等于0.703467。则在
    (-∞,-b]上定义 f(x)=b*e^(x+1)-b。在 (-b,0] 上,则有
    f(x)= e^(f-1(x)) = e^(ln((x+b)/b)-1)=(x+b)/(b*e^b)。得到的函数在R上一阶导数连续。我在Excel上作出图觉得挺好。

  • zhangdaming

    上面有处打错了,定义段函数是f(x)=b*e^(x+b)-b

  • princegyw

    包括评论中定义的函数f,似乎只是在这些特殊点处满足f(f(x))=g(x),而不是对所有的x都满足呀,还有求地毯哥的迭代程序.我的E-mail:yiwei.gu09@gmail.com

  • zhangdaming

    为什么楼上觉得只是在这些特殊点满足f(f(x))=g(x)呢?由楼主给出的f(x)的一般构造方法可以看出,至少对g(x)=e^x而言,f(f(x))=g(x)在整个R上都满足,包括楼主提到的要除外的定义段。因为若及f(x)为u,则后面f(u)的定义正是g(x),故f(f(x))=f(u)=g(x).我用的也是楼主给出的方法,故也是全R满足的,我只是选a值时把段的结合处一阶导数连续的条件加进去,而由f'(x)=g'(invf(x))/f'(invf(x)),可看出,在g(x)一阶导数连续(通常到能满足)的条件下,只要使f'(x)在第一个接合处连续,则以后各接合处都连续,从而处处连续。

  • Sourbaki

    定义映射f:x->f(x),则有关于解析解的存在性定理如下:
    “存在一个映射g:x->x#x(#是个满足结合律的二元运算符)使得f=g^s(s∈R)”“f^r=g^sr(r∈R)存在”

  • princegyw

    #zhangdaming
    取 a = -1,在 (-∞, -1] 上定义 f(x) = e^(x+1) – 1
    难道在(-∞, -1] 这样的f(f(x))就是e^x么? 不解呀~

  • zhangdaming

    回17楼,举个例:取x=-10,则f(-10)=e(-10+1)-1=e^(-9)-1,故
    f(f(-10))=f(e^(-9)-1),但-1<e^(-9)-1<0,而f(x)在-1~0上的表达式是f(x)=(x+1)/e,故f(e^(-9)-1)=((e^(-9)-1)+1)/e=e(e^(-9))/e=e^(-10),这就验证了f(f(-10))=e^(-10)

  • princegw

    #zhangdaming
    明白了,呵呵~
    thx啊!

  • alreadydone

    #14:这是我的迭代程序(Mathematica),其中用到整数的分拆,不过没有注释,基本看不懂-_-||,不过得到的结果与#地毯完全一致:
    nmax = 100; l = {1}; t[1, 1] = {{1, 1, 1}}; f = 1;
    For[n = 2, n <= nmax, n++, f = f/n; v = 0;
    For[k = 2, k = 1, i–, a = Length[b = t[n – i, k – 1]];
    For[j = 1, j = i, j++,
    e = If[c == i, d[[2]] + 1, 1]; g = k d[[3]] l[[i]]/e; u = u + g;
    AppendTo[t[n, k], {i, e, g}]]]; v = v + l[[k]] u];
    AppendTo[l, h = (f – v)/2]; t[n, 1] = {{n, 1, h}};
    t[n, n] = {{1, n, 1}}; Print[l]];

    但重要的是,计算了五十余项后,我突然发现,得到的级数极有可能是不收敛的!后面的系数似乎呈指数级增长,到第58项已经达到10^11数量级,诸位可以验算确认。这说明,这一方法根本无法给出在0的任何邻域内定义的函数,所以e^x-1的解析平方根应该是不存在的。

  • alreadydone

    上面的代码有问题,可以看这里:
    http://codepad.org/o55fnYZT

  • orbea jersey

    本来就是有平方的!

  • 负一的平方根

    试着推广推广,弄个f^(i)(x)什么的

  • cervelo

    越看越觉得自己一直在长见识

  • yh

    试了一下沙发说的半阶导数
    用多项式的显然方法求半阶导数,然后代入e^x
    配合wolframalpha求出来似乎等于e^x*erf(sqrt(x))
    然后懒得验证对不对了。。

  • 何冬州

    赞成@Para
    我用windows的计算器calc.exe验证了:
    ln2=0.69314718055994530941723212145818

发表评论

2  ×  1  =