斐波那契数列的矩阵和行列式表示

合集下载

斐波那契数列

斐波那契数列

为求得斐波那契数列的一般表达式,可以借助线性代数的方法。

高中的初等数学知识也能求出。

高中的初等数学知识解法已知∙a1 = 1∙a2 = 1∙a n = a n− 1 + a n− 21首先构建等比数列设a n+ αa n− 1= β(a n− 1+ αa n− 2)化简得a n= (β − α)a n− 1+ αβa n− 2比较系数可得:不妨设β > 0α > 0解得:所以有a n+ αa n− 1= β(a n− 1+ αa n− 2) 即{a n+ αa n− 1}为等比数列。

2求出数列{a n+ αa n− 1}有以上可得:令设解得而故有又有上式表达了两个月之间,兔子数目之间的关系。

而要求的是,A n+1的表达式。

2 求矩阵的特征值: λ行列式:-λ*(1-λ)-1*1=λ²-λ-1当行列式的值为0,解得λ1=或λ2=3特征向量将两个特征值代入求特征向量得==4 分解首向量第一个月的情况是兔子一对,新生0对。

将它分解为用特征向量表示。

(4)5用数学归纳法证明从=可得(5)6 化简矩阵方程将(4)代入(5)根据37 求A的表达式现在在6的基础上,可以很快求出A n+1的表达式,将两个特征值代入6 中(7)斐波那契数亦可以用连分数来表示:而黄金分割数亦可以用无限连分数表示:和自然的关系许多的生物构成都和斐波那契数列有正相关。

例如人体从肚脐至头顶之距离和从肚脐至脚底之距趋近于向日葵的种子螺旋排列99%是。

恒等式证明以下的恒等式有很多方法。

以下会用组合论述来证明。

F n可以表示成用多个1和多个2相加令其和等于<mat 不失一般性,我们假设n≥ 1。

F n + 1是计算了将1和2加到n的方法的数目。

若第一个被加数是1,有F n种方法来完成对n-1的计算;若第一个被加数是2,有F(n-1)来完成对n-2的计算。

因此,共有F n + F n - 1种方法来计算n的值。

∙F1 + F2 + F3 + ... + F n = F n + 2 - 1计算用多个1和多个2相加令其和等于n+1的方法的数目,同时最后一个加数是2的情况。

斐波那契数列

斐波那契数列

斐波那契数列Fibonacci sequence递归数列的一种。

意大利数学家L.斐波那契所著《算盘书》中,有一个古代数学趣题斐济维提雷弗岛的红树之一——兔子问题:假定一对大兔每月能生出一对小兔,而小兔经过一个月就长成大兔,问从一对小兔开始,一年后共繁殖成多少对大兔?这个问题导出一个数列:1,2,3,5 ,8,13,21,34,…,它的规律是,从第三项起,每一项都等于这项的前面两项的和,即an+2=an+1+an。

它的通项公式是斐波那契数公式有趣的是,公式中含有对无理数的运算,但对任一个正整数n,结果都是整数。

以斐波那契數為邊的正方形拼成的長方形斐波那契数(<noinclude>),台灣译為費伯納西數列。

在數學上,斐波那契數列是以遞歸的方法來定義:•<math>F_0=0</math>•<math>F_1=1</math>•<math>F_n = F_{n-1}+ F_{n-2}</math>用文字來說,就是斐波那契數列由0和1開始,之後的斐波那契數就由之前的兩數相加。

首幾個斐波那契數是(OEIS A000045):0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946源起根據高德納的《計算机程序設計藝術》,1150年印度數學家Gopala和Hemachandra在研究箱子包裝物件長闊剛好為1和2的可行方法數目時,首先描述這個數列。

在西方,最先研究這個數列的人是比萨的列奥纳多(又名斐波那契),他描述兔子生長的數目時用上了這數列。

•第一個月有一對剛誕生的兔子•第兩個月之後牠們可以生育•每月每對可生育的兔子會誕生下一對新兔子•兔子永不死去假設在n月有新生及可生育的兔子總共a對,n+1月就總共有b對。

斐波那契数列与矩阵

斐波那契数列与矩阵


X(k 1)
A
X( k )
2
建立矩阵形式的模型
第k+1月初矩阵形式关系式:
X(k 1) AX(k )
递推
A X(k 1) A X(k 2)
2
3
A X(1)
k
1 k 得 X(k 1) A X(1) 而 X(1) 0 k 要得到第k+1月初兔子的对数,只需求出 A
1 5 2

十九世纪初,法国数学家比内首先证
明这一表达式,现在称之为比内公式
Binet
(3) 推导斐波那契数列通项
1
建立兔子种群繁殖模型
设 第k月初两部分兔子的对数分别为: —不能生育的新生兔子 x1 (k ) —能生育的成熟兔子 x2 ( k )
2
建立矩阵形式的模型
x1 (k 1) x 2 (k ) x 2 (k 1) x1 (k ) x 2 (k )
x1 (k 1) 0 1 x1 ( k ) x (k 1) x ( k ) 2 1 1 2
则 第一个月 x1 (1) 1, x2 (1) 0
第k+1月初的兔子 对数是多少?
(3) 推导斐波那契数列通项
月份
1 2 3
兔子数(对)
1 1 2
4
5
3
5
6
7 … … … … … … … … … … … … …
8
13 …
Fn : 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233 ……
以 1 2 为列向量构造矩阵P

斐波那契数列的性质

斐波那契数列的性质

斐波那契数列的性质斐波那契递推式:斐波那契通项公式:求证过程如下:斐波那契和矩阵的关系:描述这个。

那还是描述矩阵和线性递推式的关系吧线性递推式。

即F(n)和F(n-1),F(n-2),F(n-3),F(n-4)...其阶均是⼀次的关系。

如F(n)=2F(n-1)+F(n-2).F(n)=F(n-1)+2F(n-3)+4F(n-4)...矩阵可以求解这样的递推式。

也就是说可以快速计算F(n).时间复杂度可以到达log(n)级别。

先介绍⼀下我们需要⽤到的关于矩阵的知识。

描述矩阵规模时:n⾏m列。

即⼤⼩为n*m.矩阵乘法:形状上:2*2 和 2*3 的矩阵乘积后,结果是2*3的矩阵。

即 a*b 矩阵和 c*d的矩阵乘积结果是a*d的矩阵。

其中b和c必须相等。

原因看下⾯。

运算法则:对于结果矩阵的第i⾏第j列的位置的结果是由前⼀个矩阵的对应的⾏。

和后⼀个矩阵对应的列。

对应位置 乘积和获得的。

⽐如第1⾏第1列的11.是由前矩阵的第⼀⾏(1,3)和后矩阵的第⼀列(2,3)对应位置乘 积和。

1*2+3*3 = 11 获得的。

如果上述b和c如果不相等。

那么会有地⽅"失配"没有数值可以进⾏ 计算。

不符合矩阵乘法定义。

矩阵乘法性质: 矩阵乘法不符合交换律。

符合结合律。

(具体不分析了。

稍加思考即得。

)矩阵的幂运算:即计算以下式⼦。

其中朴素想法可以通过⼀步⼀步矩阵乘法来获得结果矩阵。

但是从宏观⾓度上去想。

我们把矩阵的乘法理解成⼀种普通的数的乘法。

我们现在要计算数的幂。

可以类⽐快速幂。

那么矩阵也有矩阵的快速幂。

分治思想。

具体实现其实就是快速幂把乘法那部分改成矩阵乘法即可。

代码百度上有很多。

等下我会放⼀份。

(acdreamer矩阵的模板)矩阵计算递推式。

⽐如:对于F(n)=aF(n-1)+bF(n-2)我们可以构造矩阵和矩阵⼆者乘积为:会发现经过⼀次乘积。

我们可以获得矩阵。

那么我们再将这个矩阵乘⼀次就会得到F(3),F(2)的矩阵。

三阶递归序列的性质及其应用

三阶递归序列的性质及其应用

单位代码 01学号 **********分类号 024密级毕业论文三阶递归序列的性质及其应用院(系)名称信息工程学院专业名称信息与计算科学学生姓名**指导教师***2015 年 5 月15 日三阶递归序列的性质及其应用摘要斐波那契序列是一种经典的递推关系序列,由于后来的研究发现使得斐波那契序列有越来越多的性质被人们所发现,越来越多的应用被人们所使用,因而引起了国际上好奇数学家们的极大关注.上个世纪有一本专门研究它的杂志——《Fibonacci Quarterly (斐波那契季刊)》于1963年开始发行,并且在美国还专门设立了斐波那契数委员会,研究和处理有关问题.如今所发现的许多生物和生活现象也都与斐波那契数密切相关,同时其推广和应用几乎渗透到数学的各个分支,并且在物理、生物等自然科学中起着重要作用.后来科学家和研究者们又将二阶的斐波那契序列进行推广,得到了广义的三阶递归序列和三阶斐波那契序列.其中三阶斐波那契序列形式多样,而把三阶斐波那契序列与矩阵法联系起来,一直受到人们的青睐.本文便利用三阶线性递归序列的系数矩阵的若当标准形推出了三阶斐波那契序列的通项表达式以及前n 项和计算公式的性质,并得到了一些与斐波那契数列相似的性质,本文同时也涉及了三阶斐波那契数列的运用问题.关键词:递归序列,三阶斐波那契序列,若当标准型,矩阵法Third-order Recursion Sequence’s Properties and its ApplicationsAuthor: Zou KeTutor: Tang FengjunAbstractThe Fibonacci sequence is a kind of classic sequence of recursive relations. Due to later studies had found that the Fibonacci sequence had more and more natures to be found, and that had more and more applies to be used by people, thus it had caused the mathematicians being curious in the world. In the last century the specializes of a magazine——《Fibonacci Quarterly》was launched in 1963.In the United States it also set up a special committee of Fibonacci number to study and deal with related issues. Now in many biological and life phenomenon are closely related to the Fibonacci Numbers. At the same time its popularization and application of pervades virtually were a branch of mathematics, and in the natural sciences such as physic, biology also played an important role.Later scientists and researchers had popularized the second order of the Fibonacci sequence, so that had obtained the generalized third-order recursion sequence and the third-order Fibonacci sequence. The three-order of the Fibonacci sequence had varied forms. As we all known, the third-order the Fibonacci sequence was linked with matrix method, also had been under the favor of people. In this paper, by using the third-order of the coefficient matrix of the linear recursion sequence when standard form being launched the third order item expressions of the Fibonacci sequence and the nature of the calculation formula of the first n items. People also got some properties which were similar to the Fibonacci sequence. This paper also involves the use of the three-order about the Fibonacci sequence problems. Keywords: Recursion sequence, the third order of the Fibonacci sequence, Jordan Standard, Matrix method目录1 绪论 (1)1.1 斐波那契序列简介 (1)1.2 矩阵方法的背景简介 (2)2 几种初级递推序列的介绍 (3)2.1 二阶斐波那契序列 (3)2.2 卢卡斯序列 (3)3 三阶线性递归序列 (5)3.1 三阶线性递归序列的定义 (5)3.2 三阶线性递归序列特征值与通项表达式 (5)3.2.1 若序列特征根两两不同 (5)3.2.2 若序列特征根两个相等 (6)3.2.3 若序列特征根全相等 (7)4 三阶线性递推序列通项及前n项和计算公式 (10)4.1 三阶线性递推序列通项及前n项和 (10)4.2 一类特殊的3 阶线性递推序列 (12)5 三阶斐波那契数列 (15)5.1 三阶斐波那契数列和矩阵的定义 (15)5.2 三阶斐波那契数列的通项表示的矩阵法及Cassini公式 (16)5.2.1 三阶斐波那契数列的通项表示的矩阵法 (16)5.2.2 三阶斐波那契数列的通项公式的Cassini公式 (16)5.3 三阶斐波那契数列通项表示的行列式形式 (17)5.4 r阶斐波那契数列及性质 (18)6 三阶线性递归序列的应用 (19)7 结论 (21)致谢 .......................................................................................................... 错误!未定义书签。

斐波那契数列与行列式

斐波那契数列与行列式

斐波那契数列与行列式
郝秀梅
【期刊名称】《山东科学》
【年(卷),期】2001(014)002
【摘要】本文主要给出了斐波那契(Fibonacci)数列的通项行列式证法,给出与斐波那契数列紧密相关的一个重要极限,并附带给出行列式的一些应用.
【总页数】5页(P6-9,37)
【作者】郝秀梅
【作者单位】山东财政学院数学系,山东,济南,250014
【正文语种】中文
【中图分类】O151.22
【相关文献】
1.斐波那契数列的矩阵和行列式表示 [J], 段淑娟;孙丽萍
2.一类行列式的计算--范德蒙行列式和行列式乘积的应用 [J], 赵强
3.用"有理"取代"无理"的斐波那契数列公式——揭示斐波那契数列与二项式的隐匿关系 [J], 刘红
4.零阶行列式和零值行列式:对n阶行列式的... [J], 沈莲理
5.斐波那契数列在三对角行列式计算中的应用 [J], 刘玲; 方春霞; 胡佳宁; 缪梦楠因版权原因,仅展示原文概要,查看原文内容请购买。

斐波那契数列矩阵快速幂

斐波那契数列矩阵快速幂

斐波那契数列矩阵快速幂斐波那契数列是指这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列可以定义如下:F(0) = 0F(1) = 1F(n) = F(n-1) + F(n-2) (n≥2,n∈N*)现在我们来考虑如何使用矩阵快速幂来计算斐波那契数列。

对于斐波那契数列,我们可以使用如下的矩阵表示:| F(n) || 11 || F(n-1) ||| = || * |||F(n-1)|| 10 || F(n-2) |根据矩阵的乘法法则,两个矩阵可以相乘,当且仅当第一个矩阵的列数等于第二个矩阵的行数。

因此,我们可以将上面的矩阵表示转化为如下的形式:Fn-1, Fn-2 = Fn-2, Fn-3 * (1 1, 1 0)接下来,我们可以使用矩阵快速幂来加速计算斐波那契数列。

矩阵快速幂的步骤如下:1. 将要求的幂次写成二进制的形式。

2. 将矩阵不断地进行平方运算,直到幂次的某一位为1。

3. 将平方的结果乘到答案里。

例如,如果要求2^10,我们可以将10表示成二进制的形式,即1010,在平方运算的过程中,每次将矩阵平方并存储下来,如果当前位的值为1,则将存储下来的结果乘到最终答案中。

使用矩阵快速幂来计算斐波那契数列的代码如下:int fib(int n) {if (n <= 1) {return n;}int res[2][2] = {{1, 1}, {1, 0}};pow(res, n - 1);return res[0][0];}void pow(int res[2][2], int n) { int tmp[2][2] = {{1, 1}, {1, 0}};while (n) {if (n & 1) { multiply(res, tmp);}multiply(tmp, tmp);n >>= 1;}}void multiply(int res[2][2], int tmp[2][2]) {int a = res[0][0] * tmp[0][0] + res[0][1] * tmp[1][0];int b = res[0][0] * tmp[0][1] + res[0][1] * tmp[1][1];int c = res[1][0] * tmp[0][0] + res[1][1] * tmp[1][0];int d = res[1][0] * tmp[0][1] + res[1][1] * tmp[1][1];res[0][0] = a;res[0][1] = b;res[1][0] = c;res[1][1] = d;}在这段代码中,我们定义了三个函数:pow、multiply和fib。

矩阵乘法矩阵快速幂最基本的矩阵模型——斐波那契数列

矩阵乘法矩阵快速幂最基本的矩阵模型——斐波那契数列

矩阵乘法矩阵快速幂最基本的矩阵模型——斐波那契数列矩阵,⼀个神奇⼜令⼈崩溃的东西,常常⽤来优化序列递推在百度百科中,矩阵的定义:在数学中,矩阵(Matrix)是⼀个按照长⽅阵列排列的复数或实数集合,最早来⾃于⽅程组的系数及常数所构成的⽅阵。

这⼀概念由19世纪英国数学家凯利⾸先提出。

好,很⾼深对吧。

那我们就更加直接地理解⼀下矩阵的实质:⼆维数组好了这个SB都会,就不解释了同⼆维数组⼀样,矩阵是⼀个'纵横排列的⼆维数据表格',它⼀般是⼀个n*m的⼆维数组,其中n*m表⽰它有n⾏m列每⼀位上的数可以⽤下标i,j来表⽰,形如这样⼀个矩阵:这⾥我们就可以⽤B[1][2]来表⽰8这个元素矩阵有加/减/乘法(有没有除法我不知道),其中加减法的限制⽐较⼤,当且仅当两个矩阵的⾏列数都相等时才能进⾏加减加减的操作也很简单,只需要按位加减即可这些都是次要的,最主要的其实是矩阵乘法我们定义矩阵乘法:设A为m*p的矩阵,B为p*n的矩阵,那么称m*n的矩阵C为矩阵A与B的乘积,记作C=AB,其中矩阵C中的第i⾏第j列元素可以表⽰为:这样我们就很轻松的得到了⼀个O(n^3)的矩阵乘法,虽然还有更快的,但⼀般来说已经⾜够矩阵乘法有以下⼏条重要性质:矩阵乘法满⾜集合律,即(AB)C=A(BC)矩阵乘法满⾜分配律,即(A+B)C=AC+BC矩阵乘法⼀般不满⾜交换律以上第三条就告诉我们,平时写两个数相乘的时候可以为所欲为,但是矩阵就完全不同了,AB!=BA很简单,结合矩阵乘法来理解下。

换句更简单的,甚⾄交换后这两个矩阵都⽆法相乘,因为他们的列数可能就不相等了然后我们⼜由于第⼀条可以得出矩阵快速幂的算法⾸先矩阵幂只有⽅阵(即⾏数等于列数的矩阵)才可以做,要不然到后⾯都乘不了了(还是因为列数不相等了)这个也很简单,我们只需要把⼀般的快速幂乘法部分改成矩阵乘法即可还是⼀句话:不要乘反了!对了,还要引出⼀个叫单位矩阵的东西,这个就好⽐⼀般乘法中的单位1⼀样。

斐波那契数列(Fibonacci sequence)及相关结论

斐波那契数列(Fibonacci sequence)及相关结论

斐波那契数列(Fibonacci sequence)及相关结论一、定义斐波那契数列(Fibonacci sequence),又称黄金分割数列,因意大利数学家莱昂纳多·斐波那契(Leonardo Fibonacci)1202年以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、55、89……这个数列从第 3 项开始,每一项都等于前两项之和。

在数学上,斐波那契数列以如下被以递推的方法定义:二、通项公式1、递推公式:2、通项公式:证明一:(构造等比数列)设常数r和s满足:即:则r和s满足如下条件:由韦达定理知,r和s为一元二次方程的两个根,不妨令当n≥3时,有即上式共n-2个式子,累乘得由于,所以有将直到按照上述递推关系式进行展开有可见是首项为,公比为,末项为的等比数列求和,根据等比数列求和公式有将r和s代入得斐波那契数列的通项公式为即方法二:特征根法三、斐波那契数列与黄金分割斐波那契数列前一项与后一项之比的极限为黄金分割比。

证明:由于因此,斐波那契数列前一项与后一项之比为即当n→+∞时,四、几个重要的结论1、前n项和公式:证明:由于斐波那契数列的通项公式为:其显然是两个等比数列的线性组合,因此我们可以利用等比数列的求和公式来计算斐波那契数列的前n 项和。

这里我们由定义和通项公式可以直接得到如下结论:即成立。

2、奇数项求和证明:3、偶数项求和证明:移项便得到证明。

4、平方求和证明:五、一些重要恒等式注:本内容收集整理于网络,如有错误请指正。

雯波那锲数列公式

雯波那锲数列公式

雯波那锲数列公式引言概述雯波那锲数列(Fibonacci sequence)是一种经典的数学序列,最早由意大利数学家斐波那契在13世纪引入,以描述兔子繁殖的数目。

该数列以递归的方式定义,每个数是前两个数的和,即F(n) = F(n1) + F(n2),其中F(0) = 0,F(1) = 1。

本文将深入探讨雯波那锲数列的公式表示及其在数学和计算机科学领域的应用。

正文1. 雯波那锲数列的基本公式1.1 递归公式雯波那锲数列的基本递归公式是F(n) = F(n1) + F(n2),其中F(0) = 0,F(1) = 1。

这个递归关系定义了数列中每个数与前两个数的关系,形成了一个逐步增长的数列。

1.2 矩阵表示雯波那锲数列还可以通过矩阵乘法的方式进行表示。

定义矩阵A 和向量V如下:\[ A = \begin{bmatrix} 1 & 1 \\ 1 & 0 \end{bmatrix}, \]\[ V = \begin{bmatrix} F(n1) \\ F(n2) \end{bmatrix}. \]那么,\[ A \times V = \begin{bmatrix} F(n) \\ F(n1) \end{bmatrix}, \] 这为通过矩阵的乘法快速计算雯波那锲数列提供了一种有效的方法。

1.3 通项公式雯波那锲数列的通项公式是通过解特征方程得到的:\[ F(n) = \frac{1}{\sqrt{5}} \left( \left(\frac{1+\sqrt{5}}{2}\right)^n \left(\frac{1\sqrt{5}}{2}\right)^n \right). \]2. 雯波那锲数列的应用2.1 自然界中的应用雯波那锲数列的应用不仅限于数学领域,在自然界中也有广泛的应用。

例如,植物的叶子排列、果蝇的繁殖规律等现象都可以用雯波那锲数列来描述。

2.2 计算机科学中的应用在计算机科学中,雯波那锲数列常常用于算法和程序设计。

算法之矩阵计算斐波那契数列

算法之矩阵计算斐波那契数列

算法之矩阵计算斐波那契数列算法之矩阵计算斐波那契数列本节内容1. 斐波那契介绍2. 普通⽅式求解斐波那契3. 矩阵概念4. 矩阵求幂5. 矩阵求解斐波那契1.斐波那契介绍斐波那契数列有关⼗分明显的特点,那是:前⾯相邻两项之和,构成了后⼀项。

即f(n)=f(n-1)+f(n-2),f(0)=0,f(1)=f(2)=1,推导下去f(3)=2,f(4)=3,f(5)=5。

2.普通⽅式求解斐波那契按照上⾯提供的推导公式,普通⽅式求解斐波那契数列代码如下:1def normal(n):2 a,b,c=0,1,13while n:4 a,b,c=b,c,b+c5 n-=16return a使⽤上⾯的⽅式求解第n项斐波那契数列的时间复杂度为O(n),也就是说,时间复杂度随着n的增长⽽线性增长。

3.矩阵概念开始,先来介绍⼀下矩阵的概念:在数学中,矩阵(Matrix)是⼀个按照长⽅阵列排列的复数或实数集合,最早来⾃于⽅程组的系数及常数所构成的⽅阵。

这⾥不介绍矩阵的各⽅⾯知识了,如果那样的话。

就是⼀篇数学笔记了。

这⾥只讲解矩阵相乘的概念。

矩阵相乘:矩阵相乘最重要的⽅法是⼀般矩阵乘积。

它只有在第⼀个矩阵的列数(column)和第⼆个矩阵的⾏数(row)相同时才有意义。

⼀般单指矩阵乘积时,指的便是⼀般矩阵乘积。

⼀个m×n的矩阵就是m×n个数排成m⾏n列的⼀个数阵。

由于它把许多数据紧凑的集中到了⼀起,所以有时候可以简便地表⽰⼀些复杂的模型。

设A为m*p的矩阵,B为p*n的矩阵,那么称m*n的矩阵C为矩阵A与B的乘积,记作C=AB:4.矩阵求幂上⾯已经介绍过了矩阵相乘的概念了,那么,斐波那契该怎么由矩阵标⽰呢?从第三项开始,每⼀项都是前两项之和。

F(n)=F(n−1)+F(n−2), n⩾3 把斐波那契数列中相邻的两项F(n)和F(n−1)写成⼀个2×1的矩阵。

斐波那契数列⽤矩阵推导如下:求F(n)等于求⼆阶矩阵的n - 1次⽅,结果取矩阵第⼀⾏第⼀列的元素。

利用矩阵变换赏析Fibonacci数列【优秀资料】

利用矩阵变换赏析Fibonacci数列【优秀资料】

利用矩阵变换赏析Fibonacci数列【优秀资料】(可以直接使用,可编辑完整版实用资料,欢迎下载)利用矩阵变换赏析Fibonacci 数列何继刚( 江苏省扬州大学附属中学 225002 )十三世纪初,意大利数学家斐波那契(Fibonacci 1170—1250)在一本题为《算盘书》中提出这样一个数列{} ,34,21,13,8,5,3,2,1,1:n u人们将其称为Fibonacci 数列.1634年数学家奇拉特发现: Fibonacci 数列有如下递推关系:11-++=n n n u u u在此基础上数学家们又发现了更一般的性质①: ),(11*+-+∈+=N n m u u u u u m n m n n m1680年,卡西尼发现了下面的重要关系式,性质②:n n n n u u u )1(211-=--+苏教版4—2《矩阵与变换》介绍了矩阵和变换的知识与方法,下面我们用矩阵变换的思想来赏析Fibonacci 数列通项公式的推导和性质①②的证明.1 Fibonacci 数列通项公式的推导问题 已知数列{}n u 满足12111,1,n n n u u u u u +-===+ 求数列的通项公式.n u解:首先证明:若),3,2,1(.10,0111 =⎥⎦⎤⎢⎣⎡=⎥⎦⎤⎢⎣⎡⎥⎦⎤⎢⎣⎡=n A v u A n n n ,则n u 恰为Fibonacci数列的通项.事实上,当1=n 时,11110101u v ⎡⎤⎡⎤⎡⎤=⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦⎥⎦⎤⎢⎣⎡=01,有11=u , 当2=n 时,⎥⎦⎤⎢⎣⎡=⎥⎦⎤⎢⎣⎡⎥⎦⎤⎢⎣⎡=⎥⎦⎤⎢⎣⎡⎥⎦⎤⎢⎣⎡=⎥⎦⎤⎢⎣⎡1101011101111122v u v u ,12=u ,结论成立. 假设当),1(,N k k k n ∈≥≤时,结论成立,即若有01k k k u A v ⎡⎤⎡⎤=⎢⎥⎢⎥⎣⎦⎣⎦,则k u 为Fibonacci 数列的第k 项. .01111111111⎥⎦⎤⎢⎣⎡+=⎥⎦⎤⎢⎣⎡⎥⎦⎤⎢⎣⎡=⎥⎦⎤⎢⎣⎡=⎥⎦⎤⎢⎣⎡-------k k k k k k k k k u v u v u v u A v u.111⎩⎨⎧=+=∴---k k k k k u v v u u 当1+=k n 时,有.011111⎥⎦⎤⎢⎣⎡+=⎥⎦⎤⎢⎣⎡⎥⎦⎤⎢⎣⎡=⎥⎦⎤⎢⎣⎡=⎥⎦⎤⎢⎣⎡++k k k k k k k k k u v u v u v u A v u .11-++=+=∴k k k k k u u v u u综上所述,对*N n ∈结论成立.下面用特征值、特征向量和平面向量基本定理求通项公式.n uA 的特征多项式为1111)(2--=---=λλλλλf令0)(=λf 得251,25121-=+=λλ, 对应于21,λλ的特征向量分别为⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡+-=25111α,.25112⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡--=α设.51512512511021⎪⎪⎩⎪⎪⎨⎧-==⇒⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡--++-+=+=⎥⎦⎤⎢⎣⎡n m n m n m n m αα ()⎪⎪⎭⎫ ⎝⎛-=+=⎥⎦⎤⎢⎣⎡=⎥⎦⎤⎢⎣⎡∴2121515110ααααn n n n n A n m A A v u ()⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡----⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡+-+=-=2511)251(2511)251(515121n n n nA A αα⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡--+--+=--11)251()251()251(25151n n n n )( .)251(25151⎥⎦⎤⎢⎣⎡--+=∴n n n u )( 2 Fibonacci 数列的性质我们首先考察性质②:.)1(211n n n n u u u -=--+我们可用数学归纳法直接证明该关系式. 而更为巧妙的证明方法,可借助于如下矩阵恒等式:.011111⎥⎦⎤⎢⎣⎡=⎥⎦⎤⎢⎣⎡-+n n n n nu u u u (*) 证明:(1)2=n 时,用矩阵乘法规则:⎥⎦⎤⎢⎣⎡=⎥⎦⎤⎢⎣⎡=⎥⎦⎤⎢⎣⎡⎥⎦⎤⎢⎣⎡=⎥⎦⎤⎢⎣⎡122321112011101110111u u u u (2)设)2(≥=k k n 时,结论成立,即.011111⎥⎦⎤⎢⎣⎡=⎥⎦⎤⎢⎣⎡-+k k k k ku u u u 当1+=k n 时,⎥⎦⎤⎢⎣⎡⎥⎦⎤⎢⎣⎡=⎥⎦⎤⎢⎣⎡⎥⎦⎤⎢⎣⎡=⎥⎦⎤⎢⎣⎡-++0111011101110111111k k k k kk u u u u .112111⎥⎦⎤⎢⎣⎡=⎥⎦⎤⎢⎣⎡++=+++-++k k k k k k k k k k u u u u u u u u u u 由(1)(2)可知,对)2(*≥∈n N n 时,命题成立.对(*)两边取行列式,再展开化简即可得.)1(211n n n n u u u -=-⋅-+利用(*)我们可以证明Fibonacci 数列的性质①:*),.(11N n m u u u u u m n m n n m ∈+=+-+事实上,12110111-+-+-+-++⎥⎦⎤⎢⎣⎡=⎥⎦⎤⎢⎣⎡n m n m n m n m n m u u u u⎥⎦⎤⎢⎣⎡⎥⎦⎤⎢⎣⎡=⎥⎦⎤⎢⎣⎡⎥⎦⎤⎢⎣⎡=----+-21111101110111n n n nm m m m n mu u u u u u u u .2111121111⎥⎦⎤⎢⎣⎡++++=-------+-+n m n m n m nm n m n m n m m n u u u u u u u u u u u u u u u u比较等式左右两边矩阵中左上角第一个元素即得.11+-++=m n m n n m u u u u u 3 Fibonacci 数列的变化趋势下面从矩阵变换的几何意义考察矩阵1110A ⎡⎤=⎢⎥⎣⎦, 由于⎥⎦⎤⎢⎣⎡+⎥⎦⎤⎢⎣⎡=⎥⎦⎤⎢⎣⎡=000101100111A ,⎥⎦⎤⎢⎣⎡⎭⎬⎫⎩⎨⎧⎥⎦⎤⎢⎣⎡+⎥⎦⎤⎢⎣⎡=⎥⎦⎤⎢⎣⎡∴y x y x A 00010110 ⎥⎦⎤⎢⎣⎡+⎥⎦⎤⎢⎣⎡=⎥⎦⎤⎢⎣⎡⎥⎦⎤⎢⎣⎡+⎥⎦⎤⎢⎣⎡⎥⎦⎤⎢⎣⎡=000010110x x y y x y x ⎥⎦⎤⎢⎣⎡∴y x A 可以看作矩阵A 确定的变换,对点),(y x P 按如下顺序进行变换:−−−−−→−=对称关于直线x y y x ),(),(x y −−−−−−→−x 纵坐标不变横坐标增加),(x y x + 由Fibonacci 数列通项公式和变换的几何意义可知,点⎥⎦⎤⎢⎣⎡10n A 无限靠近直线.x y =参考文献1 吴振奎. 斐波那契数列(世界数学名题欣赏). 沈阳.辽宁教育出版社,1987.2 2 叶运佳. 斐数列{}n F 浅探. 数学通报,2004.33 张慧欣. 也谈斐波那契数列. 数学通报,2006.10通讯地址 江苏省扬州市淮海路180号(扬州大学附属中学) 邮政编码 225002E —mail hjg5808350@yahoo#define R1#define G2#define VS3#define CS4#define VCCS5#define VCVS6#define CCCS7#define CCVS8#define OPAMP9typedef struct tagBranch{int number; //支路号char type; //类型号int nfrom; //始节点int nto; //终节点float value; //参数值int ncfrom; //控制始节点/控制终节点;G/R支路的“设置为电压定义支路”标记int ncto; //控制终节点;G/R支路的“控制用电压定义支路”标记} BRANCH;BRANCH Branch0; *BRANCH;Branch = new BRANCH[BranchNumber+1];int BranchNumber;int NodeNumber;int vBranchNumber;int NN;double val[NN];int row[NN];int col[NN];int up[NN];int down[NN];int left[NN];int right[NN];int rp[NN];int cp[NN];int del[NN];int nza;int n;typedef struct tagLINKED_LIST{int nza; //非零元素个数int n; //矩阵阶数int *row; //元素行号int *col; //元素列号int *up; //元素的上邻元素号int *down; //元素的下邻元素号int *left; //元素的左邻元素号int *right; //元素的右邻元素号int *rp; //行链指针int *cp; //列链指针char *del; //元素删除标志;1=删除} LINKED_LIST;typedef struct tagTRIANGULAR_TABLE{int nza; //非零元素个数int n; //矩阵阶数double *val; //矩阵及右端向量/中间解向量元素值int *roco; //对角元素行列号,U元素列号,L元素行号int *urp; //U阵行指针int *lcp; //L阵列指针int lun; //由符号LU分解确定的需修正的元素个数int fen; //由符号前消确定的需修正的向量元素个数int *lup; //由符号LU分解确定的需修正的元素号int *fep; //前消需修正的元素号} TRIANGULAR_TABLE;typedef struct tagTRIANGULAR_TABLE_C{int nza;int n;int lun;int fen;double *vre;double *vim;int *roco;int *urp;int *lcp;int *lup;int *fep;} tagTRIANGULAR_TABLE_C;#include "XISHU.h"//创建双重链接表void new_list(int rank_max,int nonzero,LINKED_LIST *list) {row=new int[nonzero];col=new int[nonzero];up=new int[nonzero];down=new int[nonzero];left=new int[nonzero];right=new int[nonzero];rp=new int[rank_max];cp=new int[rank_max];del=new int [nonzero];nza=0; //创建时尚无元素int i;for(i=0;i<rank_max;i++){ //初始化rp[i]=0;cp[i]=0;}for(i=0;i<nonzero+1;i++){row[i]=0;col[i]=0;up[i]=0;down[i]=0;left[i]=0;right[i]=0;del[i]=0;}}//-----------------------------------------------------------------char insert_row(int nza,int x,int y,LINKED_LIST *list){int k,kl,z;k=(*list).rp[x];if(k==0){ //第x行还未有非零元素,a[x][y]为第一个元素(*list)->rp[x]=nza;(*list)->left[nza]=0;(*list)->right[nza]=0;return(0);} //成功插入for(;;){ //搜索第x行非零元素z=(*list).col[k]; //a[x][y]为非零元素if(y<z){ //nza在k左kl=(*list).left[k];if(kl==0){ //k为原行首,nza在其左,为新行首(*list)->left[nza]=0;(*list)->right[nza]=k;(*list)->left[k]=nza;(*list)->rp[x]=nza;}else{ //nza在kl和k之间(*list)->left[nza]=kl;(*list)->right[nza]=k;(*list)->left[k]=nza;(*list)->right[k]=nza;}return(0);}else if(y>z){ //nza在k右kl=(*list).right[k];if(kl==0){ //k为原行尾,nza在其中,为新行尾(*list)->right[nza]=0;(*list)->right[k]=nza;(*list)->left[nza]=k;return(0);}k=kl; //右边还有非零元素,继续向右搜索continue;}else{ //y=z,a[x][y]已存在return(1); //已有,未插入}}}//----------------------------------------------------------------char insert_col(int nza,int x,int y,LINKED_LIST *list){int k,kl,z;k=(*list).cp[y];if(k==0){ //第y列还未有非零元素,a[x][y]为第一个元素(*list)->cp[y]=nza;(*list)->up[nza]=0;(*list)->down[nza]=0;return(0);} //成功插入for(;;){ //搜索第y列非零元素z=(*list).row[k]; //a[x][y]为非零元素if(x<z){ //nza在k左kl=(*list).up[k];if(kl==0){ //k为原列首,nza在其上,为新列首(*list)->up[nza]=0;(*list)->down[nza]=k;(*list)->up[k]=nza;(*list)->cp[x]=nza;}else{ //nza在kl和k之间(*list)->up[nza]=kl;(*list)->down[nza]=k;(*list)->up[k]=nza;(*list)->down[k]=nza;}return(0);}else if(x>z){ //nza在k下kl=(*list).down[k];if(kl==0){ //k为原列尾,nza在其下,为新列尾(*list)->down[nza]=0;(*list)->down[k]=nza;(*list)->up[nza]=k;return(0);}k=kl; //下面还有非零元素,继续向下搜索continue;}else{ //x=z,a[x][y]已存在return(1); //已有,未插入}}}//----------------------------------------------------------------//在双链接表list所描述的稀疏矩阵行链中,插入元素a[x][y],返回其标//号;如果未插入,返回0int insert_ele(int x,int y,LINKED_LIST *list){int k,kl,z,nza;nza=(*list).nza;nza++;if(insert_row(nza,x,y,list)==1) return(0); //插入行链,如果已有,则不插入insert_col(nza,x,y,list); //插入列链(*list).del[nza]=0;(*list).row[nza]=x;(*list).col[nza]=y;(*list).nza=nza;return(nza);}//----------------------------------------------------------------//创建三角形表结构变量void new_table(int rank_max,int nonzero,TRIANGULAR_TABLE *table){ //生成三角形表结构table,最大阶数为rank_max,非零元素数为nonzero int i,non;(*table).val=new double[nonzero];(*table)->roco=new int[nonzero];(*table)->urp=new int[rank_max];(*table)->lcp=new int[rank_max];(*table)->lup=new int[nonzero];non=rank_max*5; //一般前消需要修正的元素数不超过阶数的5倍(*table)->fep=new int[non];for(i=0;i<nonzero+1;i++) (*table)->val[i]=0;}//----------------------------------------------------------------//双链表-三角形表转换void list_tablel(LINKED_LIST *list,int *prow,int *pcol,int *old_newr,int *old_newc,TRIANGULAR_TABLE *table){int n; //矩阵阶数int i,ii,jj,kr,kc,x,y,nn;int nza;int si,sj,sm,sim,st,sst,ss[500];n=(*list).n;(*table)->n=n;(*table)->nza=(*list).nza;for(i=1;i<n+1;i++) (*table)->roco[i]=i; //对角元素优先nza=n+1; //已建立n个非零元素for(i=1;i<n+1;i++){(*table)->urp[i]=nza;ii=prow[i]; //取原行号iikr=(*list).rp[ii];sm=0;while(kr!0){ //扫描第i/ii行,将新列号保存在ss[]y=(*list).col[kr];y=old_newc[y]; //将旧列号转换为新列号if(y>i){ //U行元素ss[sm]=y;sm++; //U行非零元个数}kr=(*list).right[kr];}if(sm>0){for(si=0,;si<sm-1;si++){ //将U行非零元列号记入rocol[] sim=si;sst=ss[si];for(sj=si+1;sj<sm;sj++){ //按新列号排序if(sst>ss[sj]){sim=sj;sst=ss[sj];}}(*table)->roco[nza]=sst;nza++;ss[sim]=ss[si];}(*table)->roco[nza]=ss[sm-1];nza++;}(*table)->lcp[i]=nza;jj=pcol[i]; //取原列号jjkc=(*list).cp[jj];sm=0;while(kc!0){ //扫描第i/jj列x=(*list).row[kc];x=old_newr[x]; //将旧行号转换为新行号if(x>i){ //L列元素ss[sm]=x;sm++;}kc=(*list).down[kc];}if(sm>0){for(si=0,;si<sm-1;si++){sim=si;sst=ss[si];for(sj=si+1;sj<sm;sj++){if(sst>ss[sj]){sim=sj;sst=ss[sj];}}(*table)->roco[nza]=sst;nza++;ss[sim]=ss[si];}(*table)->roco[nza]=ss[sm-1];nza++;}}for(i=1;i<nza+1;i++) (*table)->val[i]=0;}//----------------------------------------------------------------//符号LU分解,生成table.lup[]void sym_lu(TRIANGULAR_TABLE *table){int n; //矩阵阶数int k,kk,kkk,r,rr,i,c,cc,j,m,t;int lu; //LU分解修正元素号n=(*table).n;lu=0;for(k=1;k<n;k++){ //符号分解第k步,主元为k号元素r=(*table).lcp[k]; //主列指针c=(*table).urp[k]; //主行指针rr=(*table).urp[k+1]; //主列非零元素号从r到rr-1cc=(*table).lcp[k]; //主行非零元素号从c到cc-1for(kk=r;kk<rr;kk++){ //扫描主列非零元素i=(*table).roco[kk]; //i为主列非零元素行号for(kkk=c;kkk<cc;kkk++){ //扫描主行非零元素j=(*table).roco[kkk]; //j为主行非零元素列号if(i==j) m=j; //对角元素else if(i<j){ //U行元素m=(*table).urp[i];while(j!=(*table)->roco [m]) m++; //扫描第iL行}else{ //L列元素m=(*table).lcp[j];while(i!=(*table)->roco[m]) m++; //扫描第jU列}lu++;(*table)->lup[lu]=m;}}}(*table)->lun=lu; //LU分解需要修正的元素个数}//----------------------------------------------------------------//数值LU分解char num_lu(TRIANGULAR_TABLE *table){int n; //矩阵阶数int k,kk,kkk,r,rr,c,cc,t;int lu; //LU分解修正元素号double x,val;n=(*table).n;lu=0;for(k=1;k<n;k++){ //符号分解第k步,主元为k号元素x=(*table).val[k];if(x==0) return(1);x=1.0/x;c=(*table).urp[k]; //主行指针cc=(*table).lcp[k]; //k-U行非零元素号从c到cc-1for(kk=c;kk<cc;kk++)(*table)->val[kk]=(*table)->val[kk]*x; //归一化U主行r=(*table).lcp[k]; //主列指针rr=(*table).urp[k+1]; //k-L列非零元素号从r到rr-1for(kk=r;kk<rr;kk++){ //扫描k-L主列非零元素for(kkk=c;kkk<cc;kkk++){ //扫描k-U主行非零元素lu++;t=(*table).lup[lu]; //修正元素号(*table)->val[t]=(*table)->val[t]-(*table)->val[kk]*(*table)->val[kkk];}}}return(0);}//----------------------------------------------------------------//右端向量填元处理void vector_fillin(TRIANGULAR_TABLE *table){char f;int n; //矩阵阶数int b; //右端元素向量号int nza; //非零元素个数int k,kk,l,ll,i,r,p;n=(*table).n;nza=(*table).nza;b=(*table).lcp[n]; //右端元素从lup[n]开始存放while (b<nza+1) { //处理第b号右端向量非零元素k=(*table).roco[b]; //向量行号if(k==n){ //最后一个向量元素不会产生填元(*table)->nza=nza;return;}l=(*table).lcp[k]; //第k-L列ll=(*table).urp[k+1]; //第k-L列非零元素号从l到ll-1for(kk=l;kk<ll;kk++){ //扫描k-L主列,kk为其非零元素号f=0;i=(*table)->roco[kk]; //kk号右端向量非零元素行号r=b+1; //b号的下一个右端向量非零元素号while (r<nza+1) { //搜索b以下的右端向量非零元素rif((*table)->roco[r]<i) r++;else if((*table)->roco[r]==i){f=1;break; //已有,此kk非填元}else if((*table)->roco[r]>i){ //b和kk生成r之上的i行向量填元nza++;p=nza;while (p>r) { //r及其后的向量元素后移一位(*table)->roco[p]=(*table)->roco[p-1];p--;}(*table)->roco[r]=i; //插入填元f=1;break;}}if(f==0){nza++;(*table)->roco[nza]=i;}}b++;}(*table)->nza=nza;}//----------------------------------------------------------------//符号前消void sym_fe(TRIANGULAR_TABLE *table){int n; //矩阵阶数int b; //右端元素向量号int nza; //非零元素个数int fe;int k,kk,l,ll,i,r;n=(*table).n;nza=(*table).nza;b=(*table).lcp[n]; //右端元素从lup[n]开始存放fe=0; //fep[]标号while (b<nza) { //处理第b号右端向量非零元素k=(*table).roco[b]; //向量行号l=(*table).lcp[k]; //第k-L列ll=(*table).urp[k+1]; //第k-L列非零元素号从l到ll-1r=b+1;for(kk=l;kk<ll;kk++){ //扫描k-L主列,kk为其非零元素号i=(*table)->roco[kk]; //kk号右端向量非零元素行号while (r<nza+1) { //搜索b以下的右端向量非零元素rif((*table)->roco[r]<i){fe++;(*table)->fep[fe]=r;r++;break;}r++;}}b++;}(*table)->fen=fe;}//----------------------------------------------------------------//数值前消char num_fe(TRIANGULAR_TABLE *table){int n; //矩阵阶数int b; //右端元素向量号int nza; //非零元素个数int fe;int k,kk,kkk,l,ll;double x;n=(*table).n;nza=(*table).nza;b=(*table).lcp[n]; //右端元素从lup[n]开始存放fe=0; //fep[]标号while (b<nza) { //处理第b号右端向量非零元素k=(*table).roco[b]; //向量行号x=(*table).val[k];if(fabs(x)<1.0e-30) return(1);else x=1.0/x;x=(*table).val[b]*x;(*table).val[b]=x;l=(*table).lcp[k]; //第k-L列ll=(*table).urp[k+1]; //第k-L列非零元素号从l到ll-1for(kk=l;kk<ll;kk++){ //扫描k-L主列,kk为其非零元素号fe++;kkk=(*table).fep[fe];(*table)->val[kkk]=(*table)->val[kkk]-(*table)->val[kk]*x;}b++;}k=(*table).roco[nza]; //向量行号x=(*table).val[k];if(fabs(x)<1.0e-30) return(1);else x=1.0/x;(*table)->val[nza]=(*table)->val[nza]*x;return(0);}//----------------------------------------------------------------//后代程序void num_bs(TRIANGULAR_TABLE *table,double *x){int n; //矩阵阶数int nza,nn;int i,m,j,l,ll;double xx;n=(*table).n;nza=(*table).nza;l=(*table).lcp[n];nn=n+1;for(i=1;i<nn;i++) x[i]=0;ll=nza+1;for(m=l;m<ll;m++){ //将中间解向量值传送到解向量i=(*table).roco[m];x[i]=(*table)->val[m];}nn=n-1;for(i=nn;i>0;i--){ //从后往前代入xx=x[i];l=(*table).urp[i];ll=(*table).lcp[i];for(m=l;m<ll;m++){ //扫描i-U行非零元素j=(*table).roco[m];xx=xx-(*table).val[m]*x[j];}x[i]=xx;}}#include "linear.h"#include "XISHU.h"//输入网络结构数据,构成Branch[]数组//----------------------------------------------------------------//-----------------------------------------------------------------//实现Branch[]数组按支路号排序void sortBranch(BRANCH *Branch, int BranchNumber)//根据支路号对Branch数组排序{int len,i,j,k,l,m;len=sizeof(Branch0);for(i=1;i<BranchNumber+1;i++){k=Branch[i].number;m=i;for(j=i+1;j<BranchNumber+1;j++){l=Branch[j].number;if(k>l){k=l;m=j;}}memcpy(&Branch0,Branch+i,len);memcpy(Branch+i,Branch+m,len);memcpy(Branch+m,&Branch0,len);}}//----------------------------------------------------------------//-----------------------------------------------------------------//提取电压定义支路void vFoud()//确定电压定义支路的条数bv,并顺序编号;//同时建立一般支路编号bNUM和电压定义支路编//号vbNUM之间的影射关系{int vBranchNumber; //电压定义支路表int *vbNUM_bNUM; //vbNUM=〉bNUM 映射表int *bNUM_vbNUM; //bNUM=〉vbNUM 映射表int i,j,k,t,tt;bNUM_vbNUM = new int[BranchNumber+1];vBranchNumber=0;//初始化for(i=1;i<BranchNumber+1;i++)//建立bNUM_vbNUM映射表bNUM_vbNUM[i]=0;for(i=1;i<BranchNumber+1;i++){t=Branch[i].type;if(t==VS||t==VCVS||t==OPAMP){//必然是电压定义支路vBranchNumber++;bNUM_vbNUM[i]=vBranchNumber;}else if(t==CCVS){vBranchNumber++;bNUM_vbNUM[i]=vBranchNumber;//受控之路是电压定义支路k=Branch[i].ncfrom;//电流控制源的控制支路号tt=Branch[k].type;if((tt==G||tt==R)&Branch[k].ncfrom==0&Branch[k].ncto==0){//if(Branch[k].ncto!=1)vBranchNumber++;bNUM_vbNUM[k]=vBranchNumber;Branch[k].ncto=1;}}else if(t==CCCS){k=Branch[i].ncfrom;tt=Branch[k].type;if((tt==G||tt==R)&Branch[k].ncfrom==0&Branch[k].ncto==0){//if(Branch[k].ncto!=1)vBranchNumber++;bNUM_vbNUM[k]=vBranchNumber;Branch[k].ncto=1;}}else if((tt==G||tt==R)&Branch[i].ncfrom==1){//指定为电压定义支路的R/G vBranchNumber++;bNUM_vbNUM[i]=vBranchNumber;}}//--------------------------------------------------------------------------------------//--------------------------------------------------------------------------------------vbNUM_bNUM = new int[vBranchNumber+1];for(i=1;i<BranchNumber+1;i++){//建立vbNUM_bNUM映射表j=bNUM_vbNUM[i];vbNUM_bNUM[j]=i;}cout<<"\nvBranchNumber="<<vBranchNumber;}//-------------------------------------------------------------------//--------------------------------------------------------------------// 建立改进节电方程稀疏矩阵的双链表结构#define RANK100#define NONZERO1000LINKED_LIST mna_list;TRIANGULAR mna_triangular_table;int prow[RANK]; //各步主行号,新=>旧int pcol[RANK]; //各步主列号,新=>旧int old_newr[RANK]; //旧行号=>新行号int old_newc[RANK]; //旧列号=>新列号double *x; //按优化排序后顺序存放的解数组指针new_list(RANK,NONZERO,&mna_list); //生成改进节电方程矩阵的双链表结构mna_list.n=NodeNumber+vBranchNumber; //赋方程阶数BRANCH *br;int i,j,k,kk,nb,t,tt,nf,nt,ncf,nct;nb=NodeNumber+vBranchNumber+1; //方程阶数+1x=new_double[nb]; //按优化顺序后顺序存放的解数组for(i=1;i<BranchNumber+1;i++){ //扫描电路/支路数组,插入非零系数结构br=Branch+i;t=br->type; //支路类型nf=br->nfrom; //始节点nt=br->nto; //终节点ncf=br->ncfrom; //控制始节点nct=br->ncto; //控制终节点//----------------------------------------------------------------if(t==R){ //电阻支路if(ncf==0&nct==0){ //非电压定义支路if(nf==0) insert_ele(nt,nt,&mna_list);else if(nt==0) insert_ele(nf,nf,&mna_list);else {insert_ele(nf,nf,&mna_list);insert_ele(nt,nt,&mna_list);insert_ele(nf,nt,&mna_list);insert_ele(nt,nf,&mna_list);}}else{ //电压定义电阻支路k=br->Number;k=bNUM_vbNUM[k]; //电压定义支路号k=k+NodeNumber;insert_ele(nf,k,&mna_list);insert_ele(nt,k,&mna_list);insert_ele(k,nf,&mna_list);insert_ele(k,nt,&mna_list);insert_ele(k,k,&mna_list);}}//---------------------------------------------------------------else if(t==G){ //电导支路if(ncf==0&nct==0){ //非电压定义支路if(nf==0) insert_ele(nt,nt,&mna_list);else if(nt==0) insert_ele(nf,nf,&mna_list);else {insert_ele(nf,nf,&mna_list);insert_ele(nt,nt,&mna_list);insert_ele(nf,nt,&mna_list);insert_ele(nt,nf,&mna_list);}}else{ //电压定义电阻支路k=br->Number;k=bNUM_vbNUM[k]; //电压定义支路号k=k+NodeNumber;insert_ele(nf,k,&mna_list);insert_ele(nt,k,&mna_list);insert_ele(k,nf,&mna_list);insert_ele(k,nt,&mna_list);insert_ele(k,k,&mna_list);}}//------------------------------------------------------------------else if(t==VCCS){ //电压控制电流源支路insert_ele(nf,ncf,&mna_list);insert_ele(nf,nct,&mna_list);insert_ele(nt,ncf,&mna_list);insert_ele(nt,nct,&mna_list);}//----------------------------------------------------------------else if(t==CCCS){ //电流控制电流源支路k=ncf; //控制支路号k=bNUM_vbNUM[k]; //电压定义支路号k=k+NodeNumber;insert_ele(nf,k,&mna_list);insert_ele(nt,k,&mna_list);}//----------------------------------------------------------------else if(t==VCVS){ //电压控制电压源支路k=br->Number; //支路号k=bNUM_vbNUM[k]; //电压定义支路号k=k+NodeNumber;insert_ele(nf,k,&mna_list);insert_ele(nt,k,&mna_list);insert_ele(k,nf,&mna_list);insert_ele(k,nt,&mna_list);insert_ele(k,ncf,&mna_list);insert_ele(k,nct,&mna_list);}//----------------------------------------------------------------else if(t==CCVS){ //电流控制电压源支路kk=br->ncf; //控制支路号kk=bNUM_vbNUM[kk];kk=kk+NodeNumber;k=br->Number; //支路号k=bNUM_vbNUM[k]; //电压定义支路号k=k+NodeNumber;insert_ele(nf,k,&mna_list);insert_ele(nt,k,&mna_list);insert_ele(k,nf,&mna_list);insert_ele(k,nt,&mna_list);insert_ele(k,kk,&mna_list);}//----------------------------------------------------------------else if(t==OPAMP){ //理想运算放大器k=br->Number; //支路号k=bNUM_vbNUM[k]; //电压定义支路号k=k+NodeNumber;insert_ele(nf,k,&mna_list);insert_ele(nt,k,&mna_list);insert_ele(k,ncf,&mna_list);insert_ele(k,nct,&mna_list);}//----------------------------------------------------------------else if(t==VS){ //独立电压源k=br->Number; //支路号k=bNUM_vbNUM[k]; //电压定义支路号k=k+NodeNumber;insert_ele(nf,k,&mna_list);insert_ele(nt,k,&mna_list);insert_ele(k,nf,&mna_list);insert_ele(k,nt,&mna_list);}}//----------------------------------------------------------------//----------------------------------------------------------------//符号解//即优化排序,双链表,三角形表转换,符号LU分解,右端向量填元处理和//符号前消//利用稀疏矩阵库int n;n=mna_list;markowitzl(RANK,NONZERO,&mna_list,prow,pcol); //Markowitz优化排序old_new(n,prow,pcol,old_newr,old_newc); //建立排序前=>后行/列号映射new_table(RANK,NONZERO,&mna_triangular_table); //创建三角形表list_tablel(&mna_list,prow,pcol,old_newr,old_newc,&mna_triangular_table); //双链表-三角形表转换sym_lu(&mna_triangular_table); //符号LU分解//符号插入右端向量非零元素for(i=1;i<BranchNumber+1;i++){ //扫描电路/支路数组br=Branch+i;t=br->type; //支路类型nf=br->nfrom; //始节点nt=br->nto; //终节点//----------------------------------------------------------------if(t==CS){ //独立电流源insert_ele(nf,&mna_triangular_table,old_newr);insert_ele(nt,&mna_triangular_table,old_newr);}//----------------------------------------------------------------else if(t==VS){ ////独立电压源k=br->Number; //支路号k=bNUM_vbNUM[k]; //电压定义支路号k=k+NodeNumber;insert_ele(k,&mna_triangular_table,old_newr);}}vector_fillin(&mna_triangular_table); //确定和插入右端向量填元sym_fe(&mna_triangular_table); //符号前消//----------------------------------------------------------------//-----------------------------------------------------------------//数值解//装配数值,进行数值求解//利用稀疏矩阵库//----------------------------------------------------------------//装配系数数值int ni,nj,nt,nn;for(i=1;i<BranchNumber+1;i++){ //扫描电路/支路数组,插入非零系数结构br=Branch+i;t=br->type; //支路类型nf=br->nfrom; //始节点nt=br->nto; //终节点ncf=br->ncfrom; //控制始节点nct=br->ncto; //控制终节点val=br->value; //参数值//形成系数矩阵//------------------------------------------------------------------if(t==R){ //电阻支路if(ncf==0&nct==0){ //非电压定义支路val=1.0/val;if(nf==0){ni=old_newr[nt];nj=old_newc[nt];nn=ele_num(ni,nj,&mna_triangular_table);mna_triangular_table.val[nn]+=val;}else if(nt==0){ni=old_newr[nf];nj=old_newc[nf];nn=ele_num(ni,nj,&mna_triangular_table);mna_triangular_table.val[nn]+=val;}else{ni=old_newr[nf];nj=old_newc[nf];nn=ele_num(ni,nj,&mna_triangular_table);mna_triangular_table.val[nn]+=val;ni=old_newr[nt];nj=old_newc[nt];nn=ele_num(ni,nj,&mna_triangular_table);mna_triangular_table.val[nn]+=val;ni=old_newr[nf];nj=old_newc[nt];nn=ele_num(ni,nj,&mna_triangular_table);mna_triangular_table.val[nn]-=val;ni=old_newr[nt];nj=old_newc[nf];nn=ele_num(ni,nj,&mna_triangular_table);mna_triangular_table.val[nn]-=val;}}else{ //电压定义电阻支路k=br->Number;k=bNUM_vbNUM[k]; //电压定义支路号k=k+NodeNumber;ni=old_newr[nf];nj=old_newc[k];nn=ele_num(ni,nj,&mna_triangular_table);mna_triangular_table.val[nn]+=val;ni=old_newr[nt];nj=old_newc[k];nn=ele_num(ni,nj,&mna_triangular_table);mna_triangular_table.val[nn]-=val;ni=old_newr[k];nj=old_newc[nf];nn=ele_num(ni,nj,&mna_triangular_table);mna_triangular_table.val[nn]=1.0;ni=old_newr[k];nj=old_newc[nt];nn=ele_num(ni,nj,&mna_triangular_table);mna_triangular_table.val[nn]=-1.0;ni=old_newr[k];nj=old_newc[k];nn=ele_num(ni,nj,&mna_triangular_table);mna_triangular_table.val[nn]=-1.0*val;}}//----------------------------------------------------------------else if(t==G){ //电导支路if(ncf==0&nct==0){ //非电压定义支路if(nf==0){ni=old_newr[nt];nj=old_newc[nt];nn=ele_num(ni,nj,&mna_triangular_table);mna_triangular_table.val[nn]+=val;}else if(nt==0){ni=old_newr[nf];nj=old_newc[nf];nn=ele_num(ni,nj,&mna_triangular_table);mna_triangular_table.val[nn]+=val;}else{ni=old_newr[nf];nj=old_newc[nf];nn=ele_num(ni,nj,&mna_triangular_table);mna_triangular_table.val[nn]+=val;ni=old_newr[nt];nj=old_newc[nt];nn=ele_num(ni,nj,&mna_triangular_table);mna_triangular_table.val[nn]+=val;ni=old_newr[nf];nj=old_newc[nt];nn=ele_num(ni,nj,&mna_triangular_table);mna_triangular_table.val[nn]-=val;ni=old_newr[nt];nj=old_newc[nf];nn=ele_num(ni,nj,&mna_triangular_table);mna_triangular_table.val[nn]-=val;}}else{ //电压定义电阻支路k=br->Number;k=bNUM_vbNUM[k]; //电压定义支路号k=k+NodeNumber;ni=old_newr[nf];nj=old_newc[k];nn=ele_num(ni,nj,&mna_triangular_table);mna_triangular_table.val[nn]=1.0;ni=old_newr[nt];nj=old_newc[k];nn=ele_num(ni,nj,&mna_triangular_table);mna_triangular_table.val[nn]=-1.0;ni=old_newr[k];nj=old_newc[nf];nn=ele_num(ni,nj,&mna_triangular_table);mna_triangular_table.val[nn]=1.0;ni=old_newr[k];nj=old_newc[nt];nn=ele_num(ni,nj,&mna_triangular_table);mna_triangular_table.val[nn]=-1.0;ni=old_newr[k];nj=old_newc[k];nn=ele_num(ni,nj,&mna_triangular_table);mna_triangular_table.val[nn]=-1.0/val;}}//----------------------------------------------------------------else if(t==BCCS){ //电压控制电流源支路ni=old_newr[nf];nj=old_newc[ncf];nn=ele_num(ni,nj,&mna_triangular_table);mna_triangular_table.val[nn]+=val;ni=old_newr[nf];nj=old_newc[nct];nn=ele_num(ni,nj,&mna_triangular_table);mna_triangular_table.val[nn]-=val;ni=old_newr[nt];nj=old_newc[ncf];nn=ele_num(ni,nj,&mna_triangular_table);mna_triangular_table.val[nn]-=val;ni=old_newr[nt];nj=old_newc[nct];nn=ele_num(ni,nj,&mna_triangular_table);mna_triangular_table.val[nn]+=val;}//----------------------------------------------------------------else if(t==CCCS){ //电流控制电流源支路k=ncf; //控制支路号k=bNUM_vbNUM[k]; //电压定义支路号k=k+NodeNumber;ni=old_newr[nf];nj=old_newc[k];nn=ele_num(ni,nj,&mna_triangular_table);mna_triangular_table.val[nn]=val;ni=old_newr[nt];。

fibonacci数列与行列式

fibonacci数列与行列式
推论设 α , b , c 是三 个互 不相同的数,则
4止一一一 br
0,r
(α-c)(b - c) +(b -α) (c -α)+( c -b)(α - b) 这是定理 3 中的 当 n= 3 时的特例 。

~
(下转第 37 页)
第 2 期
刘 可春等 : 绿 叶 宝对 芹 菜 、西 红 柿和结球生 菜 的增产效果试验初报
3
b + c) (α- c)
α3( b _ c) _ b ( α- c) + c ( α - b)
=
(α - b)(b- c)( α - c) (α + b + c)
由于 α , b , c 互 不相 等 ,两边除以( a - b) (b- c) ( a - c) , 即得所 要证 的恒 等式。
4
范德蒙行列式的应用
~∞ Fn
lim~=
11-
F
1
-.:L立ι」
. = 0. 618
可以看 出数列|T| 当 户时的极限为 0 创这就是黄金分割点 的位置。黄金分
割的应用极为广泛生 产 、 经济应用和科学管理 中 普遍使用的 优选法。.618 法"就 是其 中
重要的 一 种 。
斐波那 契 ( Fibonacci) 数列应用也很 广泛 ,下仅举两 例:设有 一 楼梯共有 n 级,如 果每
(1)
α

b
3
b3 - c b- c

3 C C
2
= (α = (α = (α = (α 最 后由 (1) , (2) 两式得
3
b)(bb)(bb)(b-
C)Iα2 +α1b+b2

斐波那契数列矩阵求法

斐波那契数列矩阵求法

斐波那契数列矩阵求法
斐波那契数列是指一个数列,其中每个数是前面两个数的和,也就是说每个数都是从前面两个数推导出来的,这个数列的前两个数是0和1。

数列开始如下:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, ...
在算法中,斐波那契数列可以使用矩阵乘法的方式来求解。

具体来说,可以先将数列转换成一个向量矩阵,然后通过矩阵幂运算来获得相应的斐波那契数列。

矩阵乘法是指两个矩阵相乘并得到一个新的矩阵。

在本案例中,可以使用以下矩阵来表示斐波那契数列:
F = [0 1]
[1 1]
根据这个矩阵,可以用以下公式推导出斐波那契数列的矩阵:
F^n = [Fn-1 Fn]
[Fn Fn+1]
其中n表示斐波那契数列的第n个数,Fn表示斐波那契数列
中第n个数的值。

由此可以得到以下矩阵幂计算公式:
F^n = F^(n-1) * F
这个公式说明,需要将(F^(n-1))和F相乘,就可以得到F^n了。

在这个过程中,可以使用递归来进行,这样每次计算就是在
(F^(n-1))的基础上进行的,大大提高了效率和速度。

使用矩阵乘法计算斐波那契数列的过程可以通过以下几个步骤完成:
1. 将斐波那契数列转换为矩阵F。

2. 使用上述公式计算出F^n矩阵。

3. 从F^n矩阵中提取Fn值。

需要注意的是,在进行递归计算时,需要考虑递归结束的条件,比如当n=1或n=2时,可以直接返回相应的斐波那契数列的值。

总之,使用矩阵乘法计算斐波那契数列可以显著提高计算效率和速度,是一种十分实用的算法。

斐波那契数列与行列式_郝秀梅

斐波那契数列与行列式_郝秀梅
cf口口fjl一日6l111i首先将d按第一行展开得再将原行列式dl0o1i一66由于nbc互不相等两边除以一66一cdc即得所要证的恒等式范德蒙行列式的应用定理3nnrtq期郝秀梅斐嫂那契效列与行列式
山 东 科 学 第 14 卷 第 2 期 V o l114 N o 12 2001 年 6 月 J un 12001 SHANDON G SC IEN CE
(F ibonacci) 数列有关等等。
3 行列式在证明恒等式方面的应用
定理 2 设 a , b, c 是三个互不相同的任意数, 则
a
3 3 3
( a - b) ( a - c )
+
b
( b - c) ( b - a )
a D =
3
+
c
( c - a ) ( c - b)
3
= a + b + c.
证 令
F ibonacc i num ber of perm uta tion and determ inan t
2 2
a1
a3 a a3
2 2 3
… … …
an an
2
a a3
2 3
… …
a1
an
2

n- 1

n- 1

1
-
a a1
2 1

n- 1

n- 1

1
+ …
… an n
… an n
a2 a a2
2 2
… a n… a n…
1
an
1 1
+ ( - 1) n + 1
a a1

斐波那契序列

斐波那契序列

斐波那契序列(转的)[定理1] 标准Fibonacci序列(即第0项为0,第1项为1的序列)当N大于1时,一定有f(N)和f(N-1)互质其实,结合―互质‖的定义,和一个很经典的算法就可以轻松证明对,就是辗转相除法互质的定义就是最大公约数为1数学归纳法是很有用的证明方法,我们接下来这个定理用数学归纳法就很好证明:[定理2]若i为奇数,f(i)*f(i)=f(i-1)*f(i+1)+1,否则f(i)*f(i)=f(i-1)*f(i+1)-1对,这个定理用数学归纳法可以轻松证明,大家有兴趣可以自己尝试[定理3] f(n)=f(i)*f(n-i-1)+f(i+1)*f(n-i)f(n)=f(1)*f(n-2)+ f(2)*f(n-1)=f(2)*f(n-3)+ f(3)*f(n-2)=f(3)*f(n-4)+ f(4)*f(n-3)看来没有错,证明方法就是这样这个公式也可以用来计算较大的fibonacci数除以某个数的余数设i=n/2 不过,为了保证计算能延续下去需要每次保留三个值这样,下一次计算就可以利用这三个值来求出两个值,再相加就可以得到第三个值譬如,计算出f(5),f(6),f(7),可以计算出f(11)、f(12),然后推出f(13)就是刚才洛奇的悲鸣(364738334)所提到的矩阵方法我们知道我们若要简单计算f(n),有一种方法就是先保存a=f(0),b=f(1),然后每次设:a’=b b’=a+b并用新的a’和b’来继续这一运算如果大家熟悉利用―矩阵‖这一工具的话,就知道,如果把a、b写成一个向量[a,b],完成上述操作相当于乘以矩阵0 11 1也就是说,如果我们要求第100个fibonacci数,只需要将矩阵[0,1]乘上0 11 1的一百次方,再取出第一项因为我们知道,矩阵运算满足结合律,一次次右乘那个矩阵完全可以用乘上那个矩阵的N 次方代替,更进一步,那个矩阵的N次方就是这样的形式:f(n-1) f(n)f(n) f(n+1)而求矩阵的N次方,由于矩阵乘法满足结合律,所以我们可以用log(N)的算法求出——这个算法大家都会么?一个是二分,一个是基于二进制的求幂二分的原理:要求矩阵的N次方A(N),设i=N/2若N%2==1,则A(N)=A(i)*A(i)*A(1)若N%2==0,则A(N)=A(i)*A(i)基于二进制的原理:将N拆为二进制数,譬如13=1101那么A^13= A^8 * A^4 * A^1 (这里^表示幂运算)也就是说,由A^1开始,自乘得到A^2,然后自乘得到A^4,如果N对应位为1,则将这个结果乘到目标上去这样的话,将所有乘法改为模乘,就可以得到一个较大Fibonacci数除以M的余数若不用递归,其实类似/JudgeOnline/problem?id=3070这里用的fib矩阵略有不同,是f(n+1) f(n)f(n) f(n-1)但实际上可以验证效果是一样的这题是要求求F(n)的最后四位数,所有乘法过程增加一个模10000的步骤即可,大家可以收藏稍候AC关于矩阵我们告一段落,等下会回来继续探讨利用矩阵来解决复杂些的Fibonacci问题/showproblem.php?pid=1568我们来看这题,这题要求求出Fibonacci某项的前四位当然,用矩阵也可以解决这道题——只要将乘法改为乘并保留前四位我们采用double 保留整数部分四位这题最好还是double吧不过显然有更好的解法——如果我们知道Fibonacci序列的通项公式F(n) = (((1+Sqrt(5))/2)^n – ((1-Sqrt(5))/2)^n)*1/Sqrt(5)不过组合数学里也有这一公式的推导方法叫做―线性齐次递推式‖这个解法的核心是,通解是某个数的幂将f(n)=x^n代入递推方程,可以解出三个通解0和(1+sqrt(5))/2通常把―0‖称作平凡解,那么特解就是通解的某个线性组合再代入f(0)=0 f(1)=1,就可以得出我们刚才的公式不过通常情况下,我们只需要记住那个公式就可以了提醒大家,记忆公式的时候千万别忘记了系数1/sqrt(5)因为(1-sqrt(5))/2的绝对值小于1所以当i较大的时候,往往可以忽略掉这一项f(i)≈((1+Sqrt(5))/2)^n/sqrt(5);所以,刚才列举出的HDOJ的1568,可以很简单的30以内直接求解,30以上采用这个公式,还是用log(N)求幂的算法求解恩,就是公式的前半部分/showproblem.php?pid=1021或/show_problem.php?pid=2060Fibonacci某项是否被3整除[定理5] 标准Fibonacci序列对任意大于2的正整数的余数序列,必然是以―0 1‖为循环节开头的序列显然0、1是序列开头,也就是说序列开头就是循环节开头循环长度的计算貌似是个比较难的问题,我一时还没有想到有效解法,不过,要说明的是,计算复杂度时,这个循环节长度应该按复杂度O(N^2)计算恩,证明方法是利用同余定理、反证法,还有我们之前证明过的相邻项一定互质的定理,留给大家家庭作业/showproblem.php?pid=1588这是前天比赛关于Fibonacci的一道题,大家先看看题。

关于fibonacci行列式的性质

关于fibonacci行列式的性质

关于fibonacci行列式的性质
Fibonacci行列式作为数学理论中一个经典的若干种数列序列,因为它的非常
强大的推广性和几何应用性,受到了广大科学家和数学爱好者的青睐和关注。

Fibonacci行列式的本质特质由一系列的数字构成,其中每一个数字都是该行
列式中紧邻数字两位的和,其计算公式为`Fn = Fn-1 + Fn-2`,其中,`Fn`是第
`n`位数字的值,而第`n-1`位和第`n-2`位则都是第`n`位之前的两位,在数学上,可以将Fibonacci行列式抽象为一个递推关系,并可以归结为一项数学定理,即:斐波纳契序列的后一项是前两项之和。

从一系列自然现象出发,人们可以发现Fibonacci行列式广泛存在于动植物界,比如昆虫、鸟类、植物,以及数学几何形状等,其有意识地或无意识地利用Fibonacci行列式的性质进行构造,这些形式往往被赋予更多的美感、平衡感和秩序。

同时,Fibonacci行列式的性质也体现在一些金融模式中,例如股票投资、融
资等,使用金融学上的斐波纳契行列式可以从一定程度上出,以及合理运用数学思想,进行可靠的投资。

总之,Fibonacci行列式的多种性质和应用,为世界各行各业的发展带来种种
帮助,可以说斐波纳契行列式的强大力量无处不在,使投资、科学研究和生活上的理论得以不断完善,对于互联网领域的发展也提供了更多的可能性,正可谓无所不能。

斐波那契数列矩阵求法

斐波那契数列矩阵求法

斐波那契数列矩阵求法斐波那契数列是一个非常著名的数列,其特点是每一项都是前两项的和,即F(n)=F(n-1)+F(n-2),其中F(0)=0,F(1)=1。

斐波那契数列在数学、计算机科学、自然科学等领域都有着广泛的应用。

在计算斐波那契数列时,最常用的方法是递归。

但是递归方法在计算大量斐波那契数时,由于重复计算的问题,导致效率非常低。

所以我们需要寻找一种更加高效的计算方法。

矩阵表示方法就是一种高效的斐波那契数列计算方法。

它的基本思想是:将斐波那契数列的前两位写成矩阵形式,然后根据斐波那契数列的递推公式,依次计算出每个矩阵,最终的结果就是斐波那契数列的值。

接下来我们将详细介绍斐波那契数列矩阵求法的具体实现过程。

我们先将斐波那契数列的前两项写成矩阵形式如下:$$\begin{pmatrix}1 & 1 \\1 & 0 \\\end{pmatrix}\begin{pmatrix}F(n-1) \\F(n-2) \\\end{pmatrix}=\begin{pmatrix}F(n-1) + F(n-2) \\F(n-1) \\\end{pmatrix}=\begin{pmatrix}F(n) \\F(n-1) \\\end{pmatrix}$$根据递推公式,我们可以将矩阵相乘的过程重复进行,得到斐波那契数列的矩阵表示:2.矩阵快速幂算法上面的矩阵表示方法中有一个重要的步骤:将矩阵连乘$n$次。

在$n$较小的情况下,可以简单地使用循环来实现,但是当$n$很大时,这种方法的效率非常低下。

这时候,我们可以使用矩阵快速幂算法,将$n$的指数级别时间复杂度降低到对数级别。

我们先考虑$n$是偶数的情况。

将矩阵$A^n$拆分为$(A^{\frac{n}{2}})^2$,此时矩阵相乘的次数减少了一半,然后可以继续将$(A^{\frac{n}{2}})^2$拆分为$(A^{\frac{n}{4}})^4$……如此往复,直到$n$为1.可以发现,通过这种方式,我们可以将矩阵相乘的次数迅速降低到对数级别,从而有效地提高算法的效率。

斐波那契数列的矩阵和行列式表示

斐波那契数列的矩阵和行列式表示

斐波那契数列的矩阵和行列式表示
斐波那契数列是一种非常有趣的数字序列,它可以用来描述一个自然数列中相邻两个数字之间的比例。

它表示的关系可以从一个简单的矩阵开始推导,它的行列式也可以用来描述斐波那契数列。

矩阵表示中,斐波那契数列有一个2x2的方阵,如下:
[(1,1),(1,0)]
每一行表示一个斐波那契数,而行列式则表示两个斐波那契数之间的关系。

这个行列式可以写成1×0 - 0×1 = 1 。

这表明,任何两个相邻的斐波那契数的乘积都等于其中一个斐波那契数。

接下来,我们来看看斐波那契数列的行列式表示。

这里可以使用一个3x3的矩阵表示斐波那契数列,它的行列式表示如下:
[(1,1,1),(1,1,0),(1,0,0)]
行列式表示斐波那契数列的关系是1×0×0 - 1×1×0 + 1×1×1 = 1 。

可以看出,任何三个相邻的斐波那契数的乘积都等于其中一个斐波那契数,因此行列式表示斐波那契数列的乘积关系。

因此,我们可以通过矩阵和行列式来表示斐波那契数列。

这些数学形式的表示可以更好地帮助我们了解斐波那契数列的特性,并帮助我们分析其他数列和模式。

斐波那契数列的

斐波那契数列的

斐波那契数列的斐波那契数列是一个有趣而又复杂的数学问题,它可以用一组有规则的数字序列来描述,并且在各个领域都有广泛的应用。

斐波那契数列是从第三项开始的一个等比数列,每一项的值都是前两项的和。

由于它有很多有趣的性质,因此受到了众多学者的关注和研究,而且被广泛应用到工程、经济学、生物学等不同领域。

首先,让我们来看一下斐波那契数列的定义,它是由以下等式定义的:f(n)=f(n-1)+f(n-2),其中n≥3,f(1)=f(0)=1。

从这里可以看出,斐波那契数列是一个等比数列,每一项的值都是前两项之和。

斐波那契数列也可以用图表来表示:1,1,2,3,5,8,13,21,34,55,89,144,233……斐波那契数列有很多有趣的性质,其中最常见的一个就是每个数字都是前面两个数字的和。

由此可以推出后面的数字,这样就可以生成一个无限的等比数列。

此外,斐波那契数列还有一种特殊的性质,就是其中每两个相邻的数字都是有一定比例关系的,这个比例称为黄金分割比,即前后两个数字的比值约为1.618,被称为黄金分割比。

此外,斐波那契数列还有一个很有趣的性质,就是它的前面的数字中,每次出现的数字都是它的因数,例如:144的因数有1,2,3,4,6,8,9,12,16,18,24,36,48,72,144,而斐波那契数列前面的几个数字正是这些因数,即1,1,2,3,5,8,13,21,34,55,89。

斐波那契数列不仅有着许多独特的性质,而且也因其强大的应用性而受到了学术界的广泛研究。

斐波那契数列在工程,经济,生物学等各个领域都有广泛的应用,比如在工程中,我们可以使用斐波那契数列来分析结构物的稳定性,在经济学中,它可以帮助我们了解货币市场的变化趋势,而在生物学领域,它可以帮助我们研究突变和定型等诸多问题。

总之,斐波那契数列是一个具有深远影响的数学问题,它的出现不仅创造了许多有趣的数学性质,而且还被广泛应用到了工程、经济学、生物学等多个领域,成为了研究突变和定型等各种问题的重要工具。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档