特殊的通项公式 #

对数学或编程感兴趣的读者,相信都已经很熟悉斐波那契数列了

0, 1, 1, 2, 3, 5, 8, 13, ...

它是由
an+2=an+1+an,a0=0,a1=1
递推所得。读者或许已经见过它的通项公式
an=55[(1+52)n(152)n]
这里假设我们没有如此高的智商可以求出这个复杂的表达式出来,但是我们通过研究数列发现,这个数列越来越大时,相邻两项趋于一个常数,这个常数也就是(假设我们只发现了后面的数值,并没有前面的根式)
β=1+52=1.61803398
因此,我们会想到用等比数列αβn近似表示这个数列,并且通过数值计算,发现α确实趋于一个常数,它就是
α=15=0.4472135
后来我们就发现,斐波那契数列的通项可以表示为
an=[αβn]
其中[x]表示对x进行四舍五入,这结果当然可以严格地证明。但是我们只留意这里出现的一些新奇的东西,它表明,有些数列的通项可以表示为某个无理数列的取整,这是一种比较奇特的通项公式。下面我们考虑非线性递推
an+1=a2n+c
其中a0c都为正数,我们将会发现,这将导致一个类似的取整通项。

二次非线性递推 #

可以看到,如果c=0,那么通项是很容易的,我们有an=a2n0,这是一个快速增长的数列(a0>1时),如果c不为0,那么这将是一个递增得非常快的数列(指数的指数,像费马数一般),比如a0=1,c=1时,我们有

1, 2, 5, 26, 677, 458330, 210066388901, ...

n比较大的时候,a2n+ca2n的差别是微不足道的。于是还是可以认为,存在某个常数k,使得ank2n,本文的研究思路正是基于此,而计算主要来自数学研发论坛的kastin大神

xn=lnan,那么
xn+1=2xn+ln(1+1a2n)
迭代得
xn=2nx0+n1i=02niln(1+1a2i)=2nx0+i=02n1iln(1+1a2i)i=n2n1iln(1+1a2i)=2n(x0+i=012i+1ln(1+1a2i))2n1i=n12iln(1+1a2i)
an的增长速度可以看出,第一个无穷级数必然收敛,于是我们就可以(目前还只能通过数值方法)求出它的(近似)极限值。然后我们估计第二个级数的影响。于是
an=exp(xn)=exp(rn)k2n
其中
k=exp[x0+i=012i+1ln(1+1a2i)]rn=2n1i=n12iln(1+1a2i)<ln(1+1a2n)
那么
an>exp(ln(1+1a2n))k2n

an+1an>k2n
同理,有
rn>ln(1+1a2n)
所以
an<exp(ln(1+1a2n))k2n

k2n>an/(1+1a2n)>an1an
从而
|ank2n|<1an<12(n1)
也就是说an是最接近k2n的整数,于是得到通项公式
an=[k2n]
实际上,可以进一步得到,该取整符号总是下取整的(只有四舍,没有五入)。这是Aho和Sloane在1973年得到的结果。

编程计算 #

下面编程计算k,Python代码

from math import log,exp
n=6 # 计算6步已经很精确了。
x=1
l=[log(1+1/x**2)/2]
for i in range(n):
    x=x**2+1
    l.append(log(1+1/x**2)/2**(i+2))

k=exp(sum(l))
print(k)

算得

k=1.5028368010497564...

要注意,原则上来说,精确计算k需要知道所有的an,不然计算出来的近似的k,只能用于计算前几项,后面的误差就大了,于是这项工作看来是本末倒置了,从这里可以看出,如果要计算an的具体值,最好的方法还是老老实实递归吧。然而,对于一个数列,我们要做的事情,不仅仅是要计算每一项,还要分析它的性态等。写出这个形式的解,就有助于让我们看出它是如何增长的——基本上按照k为底的指数的指数增长!

方法评述 #

可以看出,我们求二次非线性递推通项的主要思路就是发现数列是递增的,然后就可以认为在很大的时候,常数的影响很小,因此近似于没有常数的情况,从而可以退化为没常数的情况,并且估计通项公式。类似地,该方法可以推广到三次甚至更高次的情况,思路和计算都是类似的,主要是在n很大的时候,通项几乎只取决于最高次项。事实上,上例中的常数k,可以更简洁表述为
k=lim

同时对比斐波那契数列,我们可以写出斐波那契数列数列的取整形式的通项公式,它与非取整形式的通项公式相比,就多出了另外一项(负数幂),通过另外一项来“填补”取整那部分。这是不是意味着:二次非线性递推,也可能存在另外一项,来补充取整的那部分,从而去掉取整符号?让人惊喜的是,对于某些二次非线性递推,确实是这样子的!不过这我们将在以后再谈到了。

然而,还有一些其他的非线性递推问题,比如离散阻滞增长模型,其递推是
a_{n+1}-a_n=\alpha a_n-\beta a_n^2
其中\alpha,\beta都是正数,且一般来讲\alpha \gg \beta,这样的情况解的性态是很良好的(那条S型曲线),但是我们并没有很好地写出它的显式解来——哪怕只是高于一阶的近似。因此,如果有兴趣的话,可以往这个方向研究下去。

参考: #

http://mathworld.wolfram.com/QuadraticMap.html

转载到请包括本文地址:https://spaces.ac.cn/archives/3064

更详细的转载事宜请参考:《科学空间FAQ》

如果您还有什么疑惑或建议,欢迎在下方评论区继续讨论。

如果您觉得本文还不错,欢迎分享/打赏本文。打赏并非要从中获得收益,而是希望知道科学空间获得了多少读者的真心关注。当然,如果你无视它,也不会影响你的阅读。再次表示欢迎和感谢!

如果您需要引用本文,请参考:

苏剑林. (Nov. 12, 2014). 《特殊的通项公式:二次非线性递推 》[Blog post]. Retrieved from https://spaces.ac.cn/archives/3064

@online{kexuefm-3064,
        title={特殊的通项公式:二次非线性递推},
        author={苏剑林},
        year={2014},
        month={Nov},
        url={\url{https://spaces.ac.cn/archives/3064}},
}