斐波那契数列资料
斐波那契数列的6大结论

斐波那契数列的6大结论斐波那契数列,这个名字听起来就像是数学界的魔法。
没错,斐波那契数列的魅力就在于它看似简单,却藏着无尽的奥秘。
今天咱们就来聊聊这条神秘的数字之路,顺便带点幽默,轻松一下。
1. 斐波那契数列是什么?1.1 说白了,斐波那契数列就是这样一串数字:0、1、1、2、3、5、8、13、21,依此类推。
你可能会问,这数字有什么了不起的?其实,这串数字的产生规则非常简单:前两个数相加,得到下一个数。
就像做饭,先放盐再放胡椒,最后成了一道美味的菜。
1.2 你看,这数列不光是数学家们的心头好,艺术家、建筑师也爱得不得了。
比如,著名的“黄金比例”就跟它有千丝万缕的联系。
可以说,斐波那契数列就像是宇宙的乐谱,处处都能听到它的旋律。
2. 自然界的魅力2.1 斐波那契数列在自然界中无处不在,这可不是我随便说说。
你注意过向日葵的花瓣吗?它们的排列方式就遵循这个数列,真是神奇得让人赞叹不已。
就像大自然的设计师,精心安排了一切。
2.2 除了花瓣,松果、贝壳甚至是一些水果的种子分布也都跟斐波那契数列有关。
这让人不禁想,难道自然界也在暗自欣赏这串数字的美妙?就像人们欣赏一幅完美的画作,心里忍不住咯噔一下。
3. 斐波那契与生活3.1 在我们的日常生活中,斐波那契数列其实也无处不在。
比如说,咱们日常见到的许多设计和建筑,往往都运用了这个数列的美学原则。
你看看那些高楼大厦,有的外形简直就是一幅现代艺术画,背后其实都有数学的影子。
3.2 另外,许多经济学模型也利用了斐波那契数列来预测市场走势。
这就像在打麻将,灵活运用每一张牌,才能获得胜利。
数列的神秘力量在这里展露无遗,让人不禁感慨:数字背后藏着多少智慧呀!4. 学习与探索4.1 学习斐波那契数列,简直就像是一场冒险旅行。
起初可能有点不知所措,但随着深入,真的会发现不少惊喜。
就像走进一个藏满宝藏的洞穴,越走越想探索下去。
4.2 斐波那契数列的应用范围广泛,甚至可以帮助我们理解一些复杂的现象。
二十讲:斐波那契数列

二十讲:斐波那契数列斐波那契数列意大利数学家斐波那契在他的《算盘书》里排了一个数列:1、2、3、5、8、13……这个数列揭开了大自然隐秘世界的一角。
这个数列不是随便写的,它是有规律的,从第二个数字开始,2是1加1,是第一个数字的倍数;3是1加2,是第一个和第二个数字的合;5是2加3;8是3加5……也就是每一个数字都是它前面两个数字之和,一直往下排,由此得到的这个数列就叫斐波那契数列。
从斐波那契数列我们得到一个非常重要的数值:0.61803……这也就是我们经常讲到的黄金分割比例。
黄金分割比例是指斐波那契数列任意相邻两项的比值都会趋向于0.618,尽管每一个比值都不一样,但是它们会无限趋向0.618,越来越趋向于那个点。
我们通常认为这是一个趋于完美的点。
黄金分割比例在艺术、建筑等许多领域得到了广泛地应用。
我们发现,凡是人类认为美的事物,通常都符合这个黄金分割比例。
这几乎是一个自然规律,我们说不清楚为什么,但是大家的感觉就是如此。
人们心理上本能地认同这样一个比例关系,并且大自然当中很多事物也都符合这个规律。
这是一种当代科学无法认证的自然规律,但是它确实存在。
像这种存在于自然现象背后的自然规律对我们从事市场交易活动具有非常重要的意义。
黄金分割比例对于市场行情的研究具有什么样的意义呢?简单点讲就是当一波行情在上涨或是下跌的时候,通常情况下,假如市场行情在涨,当它涨到这一波行情最高点的0.618的价位的时候,它必定要停一停,要回头,要往回走,要反驰,它要回调。
要回调到什么价位呢?回调到的0.618的倒数那个位置,从上点往下看,也是0.618。
到了那个位置以后,它又开始往上反弹,最后到达那个最高点。
这是一个很奇怪的现象,人们在研究行情的过程中无数次发现这样的规律,虽然不是百分之一百准确,但是八九不离十,大体上符合这样一个规律。
这样的规律我们把它叫做自然法则,就是说我们发现事物现象背后存在这样一个规律,但是它不是科学定律。
斐波那契数列的奥秘

斐波那契数列的奥秘1. 什么是斐波那契数列斐波那契数列(Fibonacci Sequence)又称黄金分割数列,因13世纪的意大利数学家斐波那契(Leonardoda Fibonacci)而得名。
这个数列从0和1开始,之后的每一个数都由前两个数相加得到:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ……以此类推。
2. 斐波那契数列的应用斐波那契数列并不只是一种数学上的抽象概念,它在现实世界中有着广泛的应用。
其中一个典型的例子就是菠萝的结构。
菠萝的鳞片排列呈现出斐波那契数列的规律,这种规律使得菠萝更加紧密地生长。
同时,在生物学领域,许多植物的花朵、树叶等都呈现出斐波那契树形态,这种形态美感十足,而且有助于植物的生长和传播。
3. 斐波那契数列的几何意义斐波那契数列还与黄金分割密切相关。
黄金分割是指把一条线段分割成两部分,使其中一部分与全长之比等于另一部分与这部分之比。
这个比例即为金子比(约1.618),也被称为黄金分割点。
如果我们取斐波那契数列中相邻两个数的比值,会发现随着数列增长,这个比值越来越逼近黄金分割点。
这说明斐波那契数列具有很强的几何意义,与自然界中许多规律相吻合。
4. 斐波那契数列在艺术中的运用除了在自然界中呈现,斐波那契数列还被广泛运用在艺术领域。
许多艺术作品中都能看到斐波那契数列的身影,如建筑设计、绘画作品等。
艺术家们通过运用这种神秘而美妙的数字序列,使作品更加富有节奏感和动态美。
5. 斐波那契数列在计算机科学中的应用在计算机科学领域,斐波那契数列也有着重要的应用价值。
它被广泛应用在算法设计、数据结构等方面。
特别是在递归算法中,经常会看到斐波那契数列的身影。
6. 斐波那契数列与金融市场斐波那契数列还被运用于金融市场的技术分析中。
通过观察股票或者外汇市场走势图表上出现的斐波那契比例线(Fibonacci Retracement Levels),交易者可以预测价格可能出现支撑或阻力,并做出相应交易决策,提高投资成功率。
神奇的数列——斐波那契数列

神奇的数列——斐波那契数列斐波那契数列之美斐波那契是一位数学家,生于公元1170年,籍贯大概是比萨,卒于1240年后。
1202年,他撰写了《珠算原理》(Liber Abaci)一书。
他是第一个研究了印度和阿拉伯数学理论的欧洲人。
斐波那契数列因他解决兔子繁殖的应用题而引入,故又称为“兔子数列”。
除此之外,他对欧洲数学的另一大贡献就是引进阿拉伯数字,从而取代了复杂的罗马计数法。
有这样一个数列:1、1、2、3、5、8、13、21、34……前两个元素为1,其他元素均为前两个元素和。
在数学上以如下递归的方法定义:这就是斐波那契数列的数学定义。
奇妙的属性随着数列项数的增加,前一项与后一项之比越来越逼近黄金分割的数值0.6180339887……从第二项开始,每个奇数项的平方都比前后两项之积多1,每个偶数项的平方都比前后两项之积少1。
(注:奇数项和偶数项是指项数的奇偶,而并不是指数列的数字本身的奇偶,比如第四项3是奇数,但它是偶数项,第五项5是奇数,它是奇数项,如果认为数字3和5都是奇数项,那就误解题意,怎么都说不通)如果你看到有这样一个题目:某人把一个8*8的方格切成四块,拼成一个5*13的长方形,故作惊讶地问你:为什么64=65?其实就是利用了斐波那契数列的这个性质:5、8、13正是数列中相邻的三项,事实上前后两块的面积确实差1,只不过后面那个图中有一条细长的狭缝,一般人不容易注意到。
斐波那契数列的第n项同时也代表了集合{1,2,...,n}中所有不包含相邻正整数的子集个数。
斐波那契数列(f(n),f(0)=0,f(1)=1,f(2)=1,f(3)=2……)的其他性质:f(0)+f(1)+f(2)+…+f(n)=f(n+2)-1f(1)+f(3)+f(5)+…+f(2n-1)=f(2n)f(2)+f(4)+f(6)+…+f(2n) =f(2n+1)-1[f(0)]^2+[f(1)]^2+…+[f(n)]^2=f(n)·f(n+1)f(0)-f(1)+f(2)-…+(-1)^n·f(n)=(-1)^n·[f(n+1)-f(n)]+1f(m+n-1)=f(m-1)·f(n-1)+f(m)·f(n)利用这一点,可以用程序编出时间复杂度仅为O(log n)的程序。
斐波那契数列及其特点

斐波那契数列及其特点斐波那契数列是数学中一列相邻两项之和等于后一项的数列,以0和1作为起始项的斐波那契数列如下所示:0, 1, 1, 2, 3, 5, 8, 13, 21,34, ...斐波那契数列最早出现在12世纪的西方数学和艺术领域,由意大利数学家列昂纳多·斐波那契(Leonardo Fibonacci)发现并命名。
斐波那契数列的特点使其在数学、自然科学、计算机科学等领域具有广泛的应用。
斐波那契数列的特点:1. 递推关系:斐波那契数列的第n项等于前两项之和,即F(n) =F(n-1) + F(n-2),其中F(0)=0,F(1)=1。
这种递推关系定义了斐波那契数列的生成规则,使得我们可以通过计算前两项的和得到后一项。
2. 黄金比例:斐波那契数列中,相邻两项的比例趋于黄金比例φ(约等于1.61803)。
当n趋于无穷大时,F(n)/F(n-1)将趋近于φ。
这一特性使得斐波那契数列与黄金分割点在数学和美学上具有广泛的应用。
3. 自然界中的应用:斐波那契数列在自然界中有许多应用。
例如,植物的花瓣数、种子排列、螺旋状物体的形态等都与斐波那契数列相关。
许多花朵的花瓣数目就是斐波那契数列中的某个数。
4. 黄金矩形:斐波那契数列还与黄金矩形密切相关。
黄金矩形是指矩形的长宽比接近黄金比例φ。
斐波那契数列的性质使得将正方形按照斐波那契数列依次放大,得到的长方形就是黄金矩形。
5. 近似无理数:斐波那契数列中的项数随着n的增大而趋近于无穷大,使得斐波那契数列中的每一项都是近似无理数。
虽然每一项不是真正的无理数,但它们可以无限接近黄金比例,从而在实际应用中具有重要价值。
总结起来,斐波那契数列是一种具有递推关系的数列,其中相邻两项的比例趋近于黄金比例。
斐波那契数列不仅在数学领域有重要应用,还广泛应用于自然科学、美学和计算机科学等领域。
通过了解斐波那契数列的特点,我们可以更好地理解和应用这一数列。
斐波那契数列

斐波那契数列与黄金分割
黄金分割
黄金分割是一种比例关系,即将一条线段分为两部分,使得较长部分与原线段的比例等于较短部分与较长部分 的比。在斐波那契数列中,每一项都是前一项与前前一项的比值,这个比值趋近于黄金分割的比值(√5 - 1) /2约等于0.618034。
应用
斐波那契数列和黄金分割在艺术、音乐、建筑等领域都有广泛的应用,如绘画、雕塑、音乐节奏等。
• 优点:可以适用于较大的n值,且代码相对简洁。 • 缺点:相对于递归和迭代算法,其计算效率较低。 • 示例代码 • function fibonacci(n) • A = {{0, 1}, {1, 1}} • x = {0, 1} • for i from 2 to n do • x = {x[1] + x[2], x[0]} • return x[0] • · 矩阵乘法算法是通过将斐波那契数列视为矩阵的方式来计算的。矩阵乘法算法的时间复杂度为O(n^2),相
2023
斐波那契数列
汇报人:
目录
• 斐波那契数列简介 • 斐波那契数列的算法 • 斐波那契数列的数学性质 • 斐波那契数列的计算机实现 • 斐波那契数列的优化与扩展 • 斐波那契数列的相关问题与挑战
01
斐波那契数列简介
定义与特性
特性
除了前两个数字外,每个数字都 是正整数。
定义:斐波那契数列是一系列数 字,从0和1开始,后面的每个数 字是前两个数字的和。
矩阵乘法的优化
要点一
矩阵乘法优化概述
要点二
分布式计算
矩阵乘法是计算量较大的运算之一, 因此对其进行优化可以提高计算效率 。
使用分布式计算框架如Apache Spark,将矩阵乘法运算分布到多个 计算节点上,从而加快计算速度。
神奇的斐波那契数列

神奇的斐波那契数列⼀、斐波那契数列中世纪最有才华的数学家斐波那契(1175年~1259年)出⽣在意⼤利⽐萨市的⼀个商⼈家庭。
因⽗亲在阿尔及利亚经商,因此幼年在阿尔及利亚学习,学到不少时尚未流传到欧洲的阿拉伯数学。
成年以后,他继承⽗业从事商业,⾛遍了埃及、希腊、叙利亚、印度、法国和意⼤利的西西⾥岛。
斐波那契是⼀位很有才能的⼈,并且特别擅长于数学研究。
他发现当时阿拉伯数学要⽐欧洲⼤陆发达,因此有利于推动欧洲⼤数学的发展。
他在其他国家和地区经商的同时,特别注意搜集当地的算术、代数和⼏何的资料。
回国后,便将这些资料加以研究和整理,编成《算经》(1202年,或叫《算盘书》)。
《算经》的出版,使他成为⼀个闻名欧洲的数学家。
继《算经》之后,他⼜完成了《⼏何实习》(1220年)和《四艺经》(1225年)两部著作。
《算经》在当时的影响是相当巨⼤的。
这是⼀部由阿拉伯⽂和希腊⽂的材料编译成拉丁⽂的数学著作,当时被认为是欧洲⼈写的⼀部伟⼤的数学著作,在两个多世纪中⼀直被奉为经典著作。
在⾥⾯,记载着⼤量的代数问题及其解答,对于各种解法都进⾏了严格的证明。
斐波那契发现了⼀组对世界产⽣深远影响的神奇数字。
这组数字为0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946,......这组数字存在着许多神奇⽽有趣的规律,其中的规律直到今天还在被源源不断地挖掘出来。
1、从第三个数字开始,后⼀个数字都等于前两个数字之和。
如2+3=5,3+5=8,34+55=89……2、随着数列项数的增加,每⼀个数字与后⼀个数字的⽐值⽆限接近于0.618。
如2/3=0.666,5/8=0.625,21/34=0.6176,34/55=0.6181,55/89=0.6179……⼆、黄⾦分割在各领域的⼴泛运⽤由斐波那契数列引发的0.618是个神奇的数字,它具有严格的⽐例性、艺术性、和谐性,蕴藏着很深的美学价值。
斐波那契数列

斐波那契数列,因数学家列昂纳多·斐波那契以兔子繁殖为例子而引入,故又称为“兔子数列”。
一般而言,兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子来。
如果所有兔子都不死,那么一年以后可以繁殖多少对兔子? 我们不妨拿新出生的一对小兔子分析一下:第一个月小兔子没有繁殖能力,所以还是一对 两个月后,生下一对小兔对数共有两对三个月以后,老兔子又生下一对,因为小兔子还没有繁殖能力,所以一共是三对 ------依次类推可以列出下表:在数学上,斐波那契数列以如下被以递推的方法定义:F (1)=1,F (2)=1, F (n)=F (n - 1)+F (n - 2)(n ≥ 3,n ∈ N*),指的是这样一个数列:1、1、2、3、5、8、13、21、34、……斐波那契数列的通项公式为:⎥⎥⎦⎤⎢⎢⎣⎡⎪⎪⎭⎫ ⎝⎛--⎪⎪⎭⎫ ⎝⎛+=nn n a 25125151 这样一个完全是自然数的数列,通项公式却是用无理数来表达的。
我们用初等数学的方法来证明一下:设得构造方程解得所以:由(1)、(2)式得:令:化简可得:当 n趋向于无穷大时,前一项与后一项的比值越来越逼近黄金分割0.618证明两边同时除以得到:若的极限存在,设其极限为x则所以由于解得:所以极限是黄金分割比。
斐波那契数列与矩形面积的生成相关,由此可以导出一个斐波那契数列的一个性质。
斐波那契数列前几项的平方和可以看做不同大小的正方形,由于斐波那契的递推公式,它们可以拼成一个大的矩形。
这样所有小正方形的面积之和等于大矩形的面积。
则可以得到如下的恒等式:以斐波那契数为边的正方形拼成的长方形中画一个90度的扇形,连起来的弧线就是斐波那契螺旋线。
自然界中普遍存在这种形状,如贝壳、松果的种子、孔雀开屏时的羽毛等。
另外,我们发现百合花花瓣数目为3,梅花5 瓣,飞燕草8 瓣,万寿菊13 瓣,向日葵21 或34 瓣,雏菊有34、55 和89 三个数目的花瓣。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
斐波那契数列斐波那契数列一、简介斐波那契数列(Fibonacci),又称黄金分割数列,由数学家斐波那契最早以“兔子繁殖问题”引入,推动了数学的发展。
故斐波那契数列又称“兔子数列”。
斐波那契数列指这样的数列:1,1,2,3,5,8,13,……,前两个数的和等于后面一个数字。
这样我们可以得到一个递推式,记斐波那契数列的第i项为F i,则F i=F i-1+F i-2.兔子繁殖问题指设有一对新生的兔子,从第三个月开始他们每个月都生一对兔子,新生的兔子从第三个月开始又每个月生一对兔子。
按此规律,并假定兔子没有死亡,10个月后共有多少个兔子?这道题目通过找规律发现答案就是斐波那契数列,第n个月兔子的数量是斐波那契数列的第n项。
二、性质如果要了解斐波那契数列的性质,必然要先知道它的通项公式才能更简单的推导出一些定理。
那么下面我们就通过初等代数的待定系数法计算出通项公式。
令常数p,q满足F n-pF n-1=q(F n-1-pF n-2)。
则可得:F n-pF n-1=q(F n-1-pF n-2)=q2(F n-2-pF n-3)=…=q n-2(F2-pF1)又∵F n-pF n-1=q(F n-1-pF n-2)∴F n-pF n-1=qF n-1-pqF n-2F n-1+F n-2-pF n-1-qF n-1+pqF n-2=0(1-p-q)F n-1+(1+pq)F n-2=0∴p+q=1,pq=-1是其中的一种方程组∴F n-pF n-1= q n-2(F2-pF1)=q n-2(1-p)=q n-1F n=q n-1+pF n-1=q n-1+p(q n-2+p(q n-3+…))=q n-1+pq n-2+p2q n-3+…+p n-1不难看出,上式是一个以p/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。
随意取出一组解即可:这就是著名的斐波那契数列通项公式。
有了它,斐波那契数列的一些性质也不难得出了。
比如斐波那契数列相邻两项的比值趋向于黄金分割比,即:根据斐波那契数列通项公式,可以得到因为n是趋向于正无限的,因此我们可以知道:那么我们就可以把分子和分母的第二项同时省略掉,即这就是斐波那契数列的魅力之一——它和黄金分割比有密切的关系。
下面将给出斐波那契数列的几个性质及其证明。
1)F1+F2+F3+...+F n=F n+2-1证明:原式=(F3-F2)+(F4-F3)+...+(F n+2-F n+1)=F n+2-1.2)F1+F3+F5+...+F2n+1=F2n+2证明:原式=F2+(F4-F2)+(F6-F4)+...+(F2n+2-F2n)=F2n+23)F12+F22+...+F n2=F n F n+1证明:利用数学归纳法,显然n=1时满足,下面证明若n=k时满足,n=k+1时也满足.已知F12+F22+...+F n2=F n F n+1,F12+F22+...+F n+12=F n F n+1+F n+12=(F n+1+F n)F n+1=F n+1F n+2,因此n+1后仍然满足.上述公式成立.4)F1F2+F2F3+...+F n F n+1=(F n+22-F n F n+1-1)/2证明:数学归纳法,n=1时满足.已知F1F2+F2F3+...+F n F n+1满足,那么F1F2+F2F3+...+F n F n+1+F n+1F n+2=(F n+22-F n F n+1-1)/2+F n+1F n+2=(F n+22-F n F n+1+2F n+1F n+2-1)/2=[(F n+22+2F n+1F n+2+F n+12)- F n F n+1-F n+12-1]/2=(F n+32-F n+1F n+2-1)/2,因此上式成立.5)F n2=F n-1F n+1+(-1)n+1证明:数学归纳法,n=2时满足.已知前面的n都满足,那么F n2=F n-12+F n-22+2F n-2F n-1=F n-12+F n-3F n-1+(-1)n-1+2F n-2F n-1=F n-1F n+F n-12+(-1)n-1=F n-1F n+1+(-1)n+1,因此上式成立.6)F n+m=F m-1F n+F m F n+1(n>m>1)证明:利用通项公式,设α=,β=1-α=注意到1/α+α=sqrt(5)=1/β+β,1/α+β=0=1/β+α,上式就变成了这就是上述公式的证明.三、斐波那契数列与自然斐波那契数列中的斐波那契数会经常出现在我们的眼前——比如松果、凤梨、树叶的排列、某些花朵的花瓣数(典型的有向日葵花瓣),蜂巢,蜻蜓翅膀,超越数e(可以推出更多),黄金矩形、黄金分割、等角螺线,十二平均律等。
斐波那契数还可以在植物的叶、枝、茎等排列中发现。
例如,在树木的枝干上选一片叶子,记其为数0,然后依序点数叶子(假定没有折损),直到到达与那些叶子正对的位置,则其间的叶子数多半是斐波那契数。
叶子从一个位置到达下一个正对的位置称为一个循回。
叶子在一个循回中旋转的圈数也是斐波那契数。
在一个循回中叶子数与叶子旋转圈数的比称为叶序(源自希腊词,意即叶子的排列)比。
多数的叶序比呈现为斐波那契数的比。
图为斐波那契弧线。
关于递推式的拓展研究一、错位排列问题有n个数,求有多少种排列使这n个数都不在原来的位置上。
比如n=2时,有一种排列。
设f(n)表示n个数的错位排列数量,分两种情况讨论:1.第n个数在第p(p≠n)个数的位置上,第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)=0,f(2)=1。
那这个数列的通项公式是什么呢?直接对这个数列不好进行操作,可以转化一下。
设错位排列的概率函数为g(n),其中g(1)=0,g(2)=0.5。
在f(n)的递推式两边同时除以n!即可得到。
两边同时乘n得到ng(n)=(n-1)g(n-1)+g(n-2)n(g(n)-g(n-1))=g(n-2)-g(n-1)注意到e-1的泰勒展开式跟它好像有点像,是因此有如下的等式:同时,我们也可以得到了函数f的通项公式为:这就是一些关于错位排序的性质。
二、类斐波那契数列的研究我们知道斐波那契数列递推式为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.83928675521416……,b=0.54368901269208……所以f(n)+af(n-1)+bf(n-2)=c n-3(1+a+b),记t=1+a+b,两边同时除以c n构造更多的常数项:为了方便,我们记,则:令p,q,r满足g(n)-pg(n-1)-q=r(g(n-1)-pg(n-2)-q),则得到:这个方程会发现没有实数解,于是我们只能使用复数了:p=-0.22815549365396...-0.32963360796702 (i)q=0.29087615630927...+0.07807037249863 (i)r=-0.22815549365396...+0.32963360796702 (i)继续上面的递推式,则有g(n)-pg(n-1)-q=r n-2(g(2)-pg(1)-q)。
记T= g(2)-pg(1)-q,则:g(n)=pg(n-1)+r n-2T+q=p(pg(n-2)+r n-3T+q)+r n-2T+q=p n-1g(1)+p n-2T+p n-3rT+…+r n-2T+q+pq+…+p n-2q因此也就可以得到f的递推式了:不难得到,t=2.38297576790624…,T=0.12876722129781…+0.10114779836709…i。
递推式中的c,p,q,t,T都是常数,但除了c以外都是复数,因此计算上会比较困难。
在附录中附上C++的程序,附复数计算的模板和使用递推式计算类斐波那契数列的程序。
三、递推式和矩阵如果对于每个线性递推式都要先计算它的通项公式才能够快速地得到某一项,那这个方法太过于复杂了。
于是我们可以使用矩阵来加速递推。
比如斐波那契数列的递推式也可以写成:因此就有如下结果:其中矩阵的幂次方可以使用快速幂算法在O(logn)的时间内解决,因此我们就可以在O(logn)的时间内计算出斐波那契数列的第n项(排除高精度的时间),且精度要比虚数和小数精确的多。
附录利用通项公式计算类斐波那契数列的代码:#include<stdio.h>#include<stdlib.h>#include<algorithm>#include<string.h>#include<vector>#include<math.h>#include<queue>#include<set>#include<functional>#include<time.h>using namespace std;const double EPS = 1E-15;struct Complex{double 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);}Complex 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& c) const {return fabs(a - c.a) + fabs(b - c.b) < EPS;}bool operator!=(const Complex& c) const {return !((*this) == c);}Complex operator+(double c) const { return (*this) + Complex(c); }Complex operator-(double c) const { return (*this) - Complex(c); }Complex operator*(double c) const { return (*this) * Complex(c); }Complex operator/(double c) const { return (*this) / Complex(c); }void print(){ printf("%.14lf+%.14lfi\n", a, b); }};Complex csqrt(const Complex& c){Complex r = Complex(1, 1), t = Complex();while (r != t){t = r;r = r - (r * r - c) / 2 / r;}return r;}Complex cpow(Complex c, int e){Complex res = Complex(1, 0);for (; e; e >>= 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("%.14lf\n", 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) - Complex(1 / c) * p - q;T.print();int n = 7;scanf("%d", &n);Complex res = cpow(Complex(c), n) * (cpow(p, n - 1) / Complex(c) + T * (cpow(r, n - 1) - cpow(p, n - 1)) / (r - p) + (q * cpow(p, n - 1) - q) / (p - Complex(1)));res.print();system("pause");return 0;}。