斐波那契数列_第1页
斐波那契数列_第2页
斐波那契数列_第3页
斐波那契数列_第4页
斐波那契数列_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选文库斐波那契数列一、 简介斐波那契数列(Fibonacci),又称黄金分割数列,由数学家斐波那契最早以“兔子繁殖问题”引入,推动了数学的发展。故斐波那契数列又称“兔子数列”。斐波那契数列指这样的数列:1,1,2,3,5,8,13,,前两个数的和等于后面一个数字。这样我们可以得到一个递推式,记斐波那契数列的第i项为Fi,则Fi=Fi-1+Fi-2.兔子繁殖问题指设有一对新生的兔子,从第三个月开始他们每个月都生一对兔子,新生的兔子从第三个月开始又每个月生一对兔子。按此规律,并假定兔子没有死亡,10个月后共有多少个兔子?这道题目通过找规律发现答案就是斐波那契数列,第n个月兔子的数量是斐波那契数列

2、的第n项。二、 性质如果要了解斐波那契数列的性质,必然要先知道它的通项公式才能更简单的推导出一些定理。那么下面我们就通过初等代数的待定系数法计算出通项公式。令常数p,q满足Fn-pFn-1=q(Fn-1-pFn-2)。则可得:Fn-pFn-1=q(Fn-1-pFn-2)=q2(Fn-2-pFn-3)=qn-2(F2-pF1)又Fn-pFn-1=q(Fn-1-pFn-2)Fn-pFn-1=qFn-1-pqFn-2Fn-1+Fn-2-pFn-1-qFn-1+pqFn-2=0(1-p-q)Fn-1+(1+pq)Fn-2=0p+q=1,pq=-1是其中的一种方程组Fn-pFn-1= qn-2(F2-p

3、F1)=qn-2(1-p)=qn-1Fn=qn-1+pFn-1=qn-1+p(qn-2+p(qn-3+)=qn-1+pqn-2+p2qn-3+pn-1不难看出,上式是一个以p/q为公比的等比数列。将它用求和公式求和可以得到:Fn=qn-1pqn-1pq-1=pn-qnp-q而上面出现了方程组p+q=1,pq=-1,可以得到p(1-p)=-1,p2-p-1=0,这样就得到了一个标准的一元二次方程,配方得p2-p+0.25=1.25,(p-0.5)2=1.25,p=1.25+0.5。随意取出一组解即可:p=5+12,q=1-52Fn=pn-qnp-q=151+52n-1-52n这就是著名的斐波那契

4、数列通项公式。有了它,斐波那契数列的一些性质也不难得出了。比如斐波那契数列相邻两项的比值趋向于黄金分割比,即:limnFnFn-1=1+521.6180339887根据斐波那契数列通项公式,可以得到FnFn-1=1+52n-1-52n1+52n-1-1-52n-1因为n是趋向于正无限的,因此我们可以知道:01-52m1)证明:利用通项公式,设=1+52,=1-=1-52Fm-1Fn+FmFn+1=15m-1-m-1n-n+m-mn+1-n+1=15n+m+1+n+m+1+n+m-1+n+m-1-m-1n-anm-1-mn+1-n+1m=15n+m1+n+m1+-mn1+-anm1+注意到1/+

5、=sqrt(5)=1/+,1/+=0=1/+,上式就变成了15n+m+n+m=Fn+m这就是上述公式的证明. 三、 斐波那契数列与自然斐波那契数列中的斐波那契数会经常出现在我们的眼前比如松果、凤梨、树叶的排列、某些花朵的花瓣数(典型的有向日葵花瓣),蜂巢,蜻蜓翅膀,超越数e(可以推出更多),黄金矩形、黄金分割、等角螺线,十二平均律等。斐波那契数还可以在植物的叶、枝、茎等排列中发现。例如,在树木的枝干上选一片叶子,记其为数0,然后依序点数叶子(假定没有折损),直到到达与那些叶子正对的位置,则其间的叶子数多半是斐波那契数。叶子从一个位置到达下一个正对的位置称为一个循回。叶子在一个循回中旋转的圈数也

6、是斐波那契数。在一个循回中叶子数与叶子旋转圈数的比称为叶序(源自希腊词,意即叶子的排列)比。多数的叶序比呈现为斐波那契数的比。图为斐波那契弧线。关于递推式的拓展研究一、 错位排列问题有n个数,求有多少种排列使这n个数都不在原来的位置上。比如n=2时,有一种排列。设f(n)表示n个数的错位排列数量,分两种情况讨论:1. 第n个数在第p(pn)个数的位置上,第p个数在第n个数的位置上,则此时共有f(n-2)种选择。由于p有(n-1)种值,则总共有(n-1)f(n-2)种排列方法;2. 否则,共有(n-1)f(n-1)种排列方法。综上所述,f(n)=(n-1)(f(n-1)+f(n-2),f(1)=

7、0,f(2)=1。那这个数列的通项公式是什么呢?直接对这个数列不好进行操作,可以转化一下。设错位排列的概率函数为g(n),其中g(1)=0,g(2)=0.5。在f(n)的递推式两边同时除以n!即可得到gn=1ngn-2+n-1ng(n-1)。两边同时乘n得到ng(n)=(n-1)g(n-1)+g(n-2)n(g(n)-g(n-1)=g(n-2)-g(n-1)gn-gn-1=-1nn!,即可得到gn=i=2n-1ii!=i=0n-1ii!注意到e-1的泰勒展开式跟它好像有点像,是e-1=i=0n-1ii!+Rn(-1)因此有如下的等式:limn+gn=e-10.36788同时,我们也可以得到了函

8、数f的通项公式为:fn=n!gn=n!i=0n-1ii!这就是一些关于错位排序的性质。二、 类斐波那契数列的研究我们知道斐波那契数列递推式为f(n)=f(n-1)+f(n-2),那么假如有更多项呢?假设f(n)=f(n-1)+f(n-2)+f(n-3),其中f(1)=f(2)=f(3)=1.我们暂时称这个数列为类斐波那契数列,那么它的通项公式又如何呢?令a,b,c满足f(n)+af(n-1)+bf(n-2)=c(f(n-1)+af(n-2)+bf(n-3)则得到c-a=1,ac-b=1,bc=1,消元得c3-c2-c-1=0,利用牛顿迭代可以计算出c=1.83928675521416,则a=0

9、.83928675521416,b=0.54368901269208所以f(n)+af(n-1)+bf(n-2)=cn-3(1+a+b),记t=1+a+b,两边同时除以cn构造更多的常数项:f(n)cn+acfn-1cn-1+bc2fn-2cn-2=tc3为了方便,我们记gn=f(n)cn,则:gn+acgn-1+bc2gn-2=tc3令p,q,r满足g(n)-pg(n-1)-q=r(g(n-1)-pg(n-2)-q),则得到:p+r=-ac,pr=bc2,1-rq=tc3这个方程会发现没有实数解,于是我们只能使用复数了:p=-0.22815549365396-0.32963360796702

10、iq=0.29087615630927+0.07807037249863ir=-0.22815549365396+0.32963360796702i继续上面的递推式,则有g(n)-pg(n-1)-q=rn-2(g(2)-pg(1)-q)。记T= g(2)-pg(1)-q,则:g(n)=pg(n-1)+rn-2T+q=p(pg(n-2)+rn-3T+q)+rn-2T+q=pn-1g(1)+pn-2T+pn-3rT+rn-2T+q+pq+pn-2q=pn-1g1+pn-2Trpn-1-1rp-1+qpn-1-1p-1=pn-1c+rn-1T-pn-1Tr-p+qpn-1-qp-1因此也就可以得到f

11、的递推式了:fn=cnpn-1c+rn-1T-pn-1Tr-p+qpn-1-qp-1不难得到,t=2.38297576790624,T=0.12876722129781+0.10114779836709i。递推式中的c,p,q,t,T都是常数,但除了c以外都是复数,因此计算上会比较困难。在附录中附上C+的程序,附复数计算的模板和使用递推式计算类斐波那契数列的程序。三、 递推式和矩阵如果对于每个线性递推式都要先计算它的通项公式才能够快速地得到某一项,那这个方法太过于复杂了。于是我们可以使用矩阵来加速递推。比如斐波那契数列的递推式也可以写成:f(n)f(n-1)=1110f(n-1)f(n-2)因

12、此就有如下结果:f(n)f(n-1)=1110n-2f(2)f(1)其中矩阵的幂次方可以使用快速幂算法在O(logn)的时间内解决,因此我们就可以在O(logn)的时间内计算出斐波那契数列的第n项(排除高精度的时间),且精度要比虚数和小数精确的多。附录利用通项公式计算类斐波那契数列的代码:#include #include #include #include #include #include #include #include #include #include using namespace std;const double EPS = 1E-15;struct Complexdouble

13、 a, b;/num=a+biComplex& operator=(const Complex& c)a = c.a;b = c.b;return *this;Complex()a = b = 0;Complex(double t1, double t2 = 0)a = t1;b = t2;Complex operator+(const Complex& c) const return Complex(a + c.a, b + c.b);Complex operator-(const Complex& c) const return Complex(a - c.a, b - c.b);Comp

14、lex operator*(const Complex& c) const double ta = a * c.a - b * c.b;double tb = b * c.a + a * c.b;return Complex(ta, tb);Complex operator/(const Complex& c) const Complex t = c;t.b = -t.b;t = (*this) * t;double div = c.a * c.a + c.b * c.b;t.a /= div;t.b /= div;return t;bool operator=(const Complex&

15、c) const return fabs(a - c.a) + fabs(b - c.b) = 1)if (e & 1) res = res * c;c = c * c;return res;int main()double c = 2, t = 0;while (fabs(c - t) EPS)t = c;c -= (c * c * c - c * c - c - 1) / (3 * c * c - 2 * c - 1);double a = c - 1, b = 1 / c;printf(%.14lfn, 1 + a + b);t = 1 + a + b;Complex r = (csqrt(Complex(a * a / c / c - 4 * b / c / c) - a / c) / 2;r.print();Complex p = Complex(-a / c) - r, q = Complex(t / c / c / c) / (Complex(1) - r);p.print(), q.print();Complex T = Complex(1 / c / c) - Compl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论