1、斐波那契数列斐波那契数列斐波那契数列斐波那契数列实验二实验二斐斐波波那那契契,意意大大利利数数学学家家列列昂昂纳纳多多斐斐波波那那契契(Leonardo Leonardo FibonacciFibonacci,1170-12401170-1240,籍籍贯贯大大概概是是比比萨萨)。他他被被人人称称作作“比比萨萨的的列列昂昂纳纳多多”。12021202年年,他他撰撰写写了了珠珠算算原原理理(Liber Liber AbacciAbacci)一一书书。他他是是第第一一个个研研究究了了印印度度和和阿阿拉拉伯伯数数学学理理论论的的欧欧洲洲人人。他他的的父父亲亲被被比比萨萨的的一一家家商商业业团团体体聘聘
2、任任为为外外交交领领事事,派派驻驻地地点点相相当当于于今今日日的的阿阿尔尔及及利利亚亚地地区区,列列昂昂纳纳多多因因此此得得以以在在一一个个阿阿拉拉伯伯老老师师的的指指导导下下研研究究数数学学。他他还还曾曾在在埃埃及及、叙叙利利亚亚、希希腊腊、西西里和普罗旺斯研究数学。西西里和普罗旺斯研究数学。一、实验目的一、实验目的一、实验目的一、实验目的认识认识Fibonacci数列,数列,体验发现其通项公式的过程。体验发现其通项公式的过程。了解了解matlab软件中,软件中,进行数据显示与数据拟合的方式。进行数据显示与数据拟合的方式。提高对数据进行分析与处理的能力。提高对数据进行分析与处理的能力。二、问
3、题描二、问题描二、问题描二、问题描述述述述意大利斐波那契意大利斐波那契意大利斐波那契意大利斐波那契(Fibonacci)(Fibonacci),12021202年年年年 一般而言,兔子在出生两个月后,就一般而言,兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出有繁殖能力,一对兔子每个月能生出一对小兔子来。如果所有兔都不死,一对小兔子来。如果所有兔都不死,那么一年以后可以繁殖多少对兔子?那么一年以后可以繁殖多少对兔子?三、问题分三、问题分三、问题分三、问题分析析析析称为称为Fibonacci数列数列。递推公式:递推公式:1,1,2,3,5,8,13,21,34,55,兔子对的兔子对的数目数
4、目依次如下:依次如下:所求答案所求答案:Fibonacci数列的第数列的第12项。项。Fibonacci数列的数列的一般规律一般规律是什么?是什么?四、背景知识四、背景知识四、背景知识四、背景知识1 1、最小二乘和数据拟合、最小二乘和数据拟合2024/3/11 周一多项式拟合多项式拟合当数据点互异时plot(x,y,s):将所给的点列连接成一条折线将所给的点列连接成一条折线 x-点列的横坐标,点列的横坐标,y-点列的竖坐标点列的竖坐标s-图形的格式字符串图形的格式字符串 例例:给定数据,给定数据,x1=1,3,4,5,6,7,8,9,10;y1=10,5,4,2,1,1,2,3,4;描绘其图形
5、描绘其图形代码:代码:x1=1,3,4,5,6,7,8,9,10;y1=10,5,4,2,1,1,2,3,4;plot(x1,y1)2 2、画图和多项式拟合命令、画图和多项式拟合命令2024/3/11 周一p=polyfit(x,y,n):用用n次次多项式拟合多项式拟合数据列数据列 返回多项式的系数,次序是由高阶到低阶返回多项式的系数,次序是由高阶到低阶例例:x=1,3,4,5,6,7,8,9,10;y=10,5,4,2,1,1,2,3,4;拟合:拟合:p=polyfit(x,y,2)结果:结果:0.2676 -3.6053 13.4597数值数值:f=polyval(p,x)结果:结果:f=
6、10.1219 5.0519 3.3196 2.1224 1.4604 1.3335 1.7417 2.6851 4.1636即即2次多项式为次多项式为p1=0.2676x2-3.6053x+13.4597拟合效果展示:拟合效果展示:代码代码:x=1,3,4,5,6,7,8,9,10;y=10,5,4,2,1,1,2,3,4;p=polyfit(x,y,2);plot(x,y,ro,x,polyval(p,x),b)legend(数据点数据点,拟拟合曲合曲线线);2024/3/11 周一五、实验过五、实验过五、实验过五、实验过程程程程1.1.观察数据间的大概函数关系观察数据间的大概函数关系观察
7、数据间的大概函数关系观察数据间的大概函数关系 2.2.进一步验证上一步得到的结论进一步验证上一步得到的结论进一步验证上一步得到的结论进一步验证上一步得到的结论 3.3.获得数据的近似函数关系式获得数据的近似函数关系式获得数据的近似函数关系式获得数据的近似函数关系式 4.4.观察拟合数据与原始数据的吻合程度观察拟合数据与原始数据的吻合程度观察拟合数据与原始数据的吻合程度观察拟合数据与原始数据的吻合程度 5.5.猜测猜测猜测猜测FibonacciFibonacci数列的通项公式数列的通项公式数列的通项公式数列的通项公式 6.6.证明证明证明证明FibonacciFibonacci数列的通项公式数列
8、的通项公式数列的通项公式数列的通项公式 1.1.观察数据间的大概函数关系观察数据间的大概函数关系观察数据间的大概函数关系观察数据间的大概函数关系将以下点列显示在平面坐标系中:将以下点列显示在平面坐标系中:观察其中蕴涵的函数关系观察其中蕴涵的函数关系 结论结论:曲线的形状象指数函数的曲线:曲线的形状象指数函数的曲线 查看代码2.2.进一步验证上一步得到的结论进一步验证上一步得到的结论进一步验证上一步得到的结论进一步验证上一步得到的结论再将以下点列显示在平面坐标系中:再将以下点列显示在平面坐标系中:观察其中蕴涵的函数关系观察其中蕴涵的函数关系 结论结论:曲线的形状确实象一条直线:曲线的形状确实象一
9、条直线 查看代码3.3.获得数据的近似函数关系式获得数据的近似函数关系式获得数据的近似函数关系式获得数据的近似函数关系式FibonacciFibonacci数列的数据关系是指数函数,数列的数据关系是指数函数,取对数后是线性函数,即一阶多项式,取对数后是线性函数,即一阶多项式,用一阶多项式拟合出取对数后的函数关系式用一阶多项式拟合出取对数后的函数关系式 得到得到FibonacciFibonacci数列通项公式的近似表达式:数列通项公式的近似表达式:查看代码4.4.观察拟合数据与原始数据的吻合程度观察拟合数据与原始数据的吻合程度观察拟合数据与原始数据的吻合程度观察拟合数据与原始数据的吻合程度紅点:
10、紅点:蓝线:蓝线:查看代码查看代码5.5.猜测猜测猜测猜测FibonacciFibonacci数列的通项公式数列的通项公式数列的通项公式数列的通项公式将上式代入递推公式中得:考虑到该数列趋向无穷,故通项公式取为:考虑到该数列趋向无穷,故通项公式取为:然而然而,上式并不满足:上式并不满足:进一步修正进一步修正这样,得到这样,得到Fibonacci数列通项的新猜测:数列通项的新猜测:这样,得到这样,得到Fibonacci数列通项:数列通项:称为称为比内公式比内公式。(Binet,法国,法国,1843年发现年发现)6.6.推导推导推导推导FibonacciFibonacci数列的通项公式数列的通项公
11、式数列的通项公式数列的通项公式FibonacciFibonacci数列具有如下递推关系数列具有如下递推关系 这是一个二阶常系数线性齐次差分方程这是一个二阶常系数线性齐次差分方程 仿照二阶常系数线性齐次微分方程来求解仿照二阶常系数线性齐次微分方程来求解 特征方程特征方程 两个特征根两个特征根 差分方程的通解差分方程的通解 取取n=1n=1和和n=2n=2代入上面的公式中,解得代入上面的公式中,解得 从而得到从而得到 六、化学反应中生成物的浓度问题六、化学反应中生成物的浓度问题六、化学反应中生成物的浓度问题六、化学反应中生成物的浓度问题1、描绘、描绘生成物浓度的散点图生成物浓度的散点图代码:代码:
12、t=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16;y=4.00,6.40,8.00,8.80,9.22,9.50,9.70,9.86;y=y,10.00,10.20,10.32,10.42,10.50,10.55,10.58,10.60;plot(t,y,r+)xlabel(时间);ylabel(浓度);legend(生成物浓度散点图生成物浓度散点图)从图形看,显然是非线性关系,数据点列呈现从图形看,显然是非线性关系,数据点列呈现单调上升趋势,开始上升较快随后逐渐变慢,单调上升趋势,开始上升较快随后逐渐变慢,故宜采用多项式、双曲型函数、指数型函数或故宜采用多项式
13、、双曲型函数、指数型函数或对数型函数做拟合等对数型函数做拟合等2、采用、采用2,4和和6阶多项式进行拟合阶多项式进行拟合代码:代码:p2=polyfit(t,y,2);p4=polyfit(t,y,4);p6=polyfit(t,y,6);R1=dot(y-polyval(p6,t),y-polyval(p6,t)%计算拟合残差plot(t,y,r+,t,polyval(p2,t),t,polyval(p4,t),t,polyval(p6,t)legend(测量数据测量数据,2阶拟合阶拟合,4阶拟合阶拟合,6阶拟合阶拟合)6阶多项式拟合效果较好阶多项式拟合效果较好3、采用双曲函数进行拟合:、采
14、用双曲函数进行拟合:代码:代码:p1=polyfit(1./t,1./y,1);plot(t,y,r+,t,1./polyval(p1,1./t)R2=dot(y-1./polyval(p1,1./t),y-1./polyval(p1,1./t)legend(测量数据测量数据,双曲型拟合双曲型拟合)七、结论与应用七、结论与应用七、结论与应用七、结论与应用1.Fibonacci1.Fibonacci数列的阶数列的阶数列的阶数列的阶 2.Fibonacci2.Fibonacci数列与黄金分割数的关系数列与黄金分割数的关系数列与黄金分割数的关系数列与黄金分割数的关系 可以验证可以验证 http:/
15、0 0 0 01 1-1 0 0 00 1 1-1 0 0 0 0 0 0 1 13.Fibonacci3.Fibonacci数列通项公式的其它形式数列通项公式的其它形式数列通项公式的其它形式数列通项公式的其它形式 4.4.自然界中的自然界中的自然界中的自然界中的FibonacciFibonacci数列数列数列数列 花瓣的数量,一般都是花瓣的数量,一般都是FibonacciFibonacci数数 斐波那契螺旋斐波那契螺旋如果顺时针与逆时针螺旋的数目,如果顺时针与逆时针螺旋的数目,是斐波那契数列中相邻的是斐波那契数列中相邻的2 2项,项,可称其为可称其为斐波那契螺旋斐波那契螺旋,也被称作,也被称
16、作黄金螺旋黄金螺旋 计算机绘制的斐波那契螺旋计算机绘制的斐波那契螺旋 斐波那契螺旋与黄金矩型斐波那契螺旋与黄金矩型 5.5.应用应用应用应用 FibonacciFibonacci数列数列在纯粹数学、运筹优化、在纯粹数学、运筹优化、计算机科学等领域具有重大的应用价值计算机科学等领域具有重大的应用价值 本实验所采用的方法,本实验所采用的方法,可以用来进行一般的数据处理与分析可以用来进行一般的数据处理与分析。显示显示显示显示FibonacciFibonacci数列前数列前数列前数列前n n项项项项 function plotfibo(n)%function plotfibo(n)%显示显示显示显示F
17、ibonacciFibonacci数列前数列前数列前数列前n n项项项项 fn=1,1;%fn=1,1;%将数列的前两项放到数组将数列的前两项放到数组将数列的前两项放到数组将数列的前两项放到数组fnfn中中中中 for i=3:n%fnfor i=3:n%fn的第的第的第的第3 3项到第项到第项到第项到第n n项项项项 fn=fn,fn(i-2)+fn(i-1);%fn=fn,fn(i-2)+fn(i-1);%将第将第将第将第i i项添加到数组项添加到数组项添加到数组项添加到数组fnfn中中中中 end%end%循环结束循环结束循环结束循环结束 plot(fn)%plot(fn)%将装有数列前
18、将装有数列前将装有数列前将装有数列前n n项的数组显示出项的数组显示出项的数组显示出项的数组显示出来来来来返回显示取对数后的前显示取对数后的前显示取对数后的前显示取对数后的前n n项项项项 function plotlnfibo(n)%function plotlnfibo(n)%显示取对数后的前显示取对数后的前显示取对数后的前显示取对数后的前n n项项项项 fn=1,1;%fn=1,1;%将数列的前两项放到数组将数列的前两项放到数组将数列的前两项放到数组将数列的前两项放到数组fnfn中中中中 for i=3:n%fnfor i=3:n%fn的第的第的第的第3 3项到第项到第项到第项到第n n
19、项项项项 fn=fn,fn(i-2)+fn(i-1);%fn=fn,fn(i-2)+fn(i-1);%将第将第将第将第i i项添加到数组项添加到数组项添加到数组项添加到数组fnfn中中中中 end%end%循环结束循环结束循环结束循环结束 fn=log(fn)%fn=log(fn)%将原来的数据取对数将原来的数据取对数将原来的数据取对数将原来的数据取对数 plot(fn)%plot(fn)%将装有数列前将装有数列前将装有数列前将装有数列前n n项的数组显示出项的数组显示出项的数组显示出项的数组显示出来来来来返回根据取对数后的数据,拟合出线性表达式根据取对数后的数据,拟合出线性表达式根据取对数后
20、的数据,拟合出线性表达式根据取对数后的数据,拟合出线性表达式 function fitlnfibo(n)%function fitlnfibo(n)%先取对数,再拟合先取对数,再拟合先取对数,再拟合先取对数,再拟合 fn=1,1;%fn=1,1;%将数列的前两项放到数组将数列的前两项放到数组将数列的前两项放到数组将数列的前两项放到数组fnfn中中中中 for i=3:n%fnfor i=3:n%fn的第的第的第的第3 3项到第项到第项到第项到第n n项项项项 fn=fn,fn(i-2)+fn(i-1);%fn=fn,fn(i-2)+fn(i-1);%将第将第将第将第i i项添加到数组项添加到数
21、组项添加到数组项添加到数组fnfn中中中中 end%end%循环结束循环结束循环结束循环结束 xn=1:n;%xn=1:n;%定义横坐标定义横坐标定义横坐标定义横坐标 fn=log(fn)%fn=log(fn)%将原来的数据取对数将原来的数据取对数将原来的数据取对数将原来的数据取对数 polyfit(xn,fn,1)%polyfit(xn,fn,1)%拟合装有数列前拟合装有数列前拟合装有数列前拟合装有数列前n n项的数组项的数组项的数组项的数组返回显示拟合数据与原始数据的前显示拟合数据与原始数据的前显示拟合数据与原始数据的前显示拟合数据与原始数据的前n n项项项项 function plotf
22、ibo2(n)%function plotfibo2(n)%显示拟合数据与原始数据的前显示拟合数据与原始数据的前显示拟合数据与原始数据的前显示拟合数据与原始数据的前n n项项项项 fn1=;%fn1=;%装拟合数据的数组装拟合数据的数组装拟合数据的数组装拟合数据的数组 for i=1:n%fn1for i=1:n%fn1的第的第的第的第1 1项到第项到第项到第项到第n n项项项项 fn1=fn1,0.4476*1.618i;%fn1=fn1,0.4476*1.618i;%将第将第将第将第i i项添加到数组项添加到数组项添加到数组项添加到数组fn1fn1中中中中 end end fn2=1,1;
23、%fn2=1,1;%装原始数据的数组,前两项放到数组装原始数据的数组,前两项放到数组装原始数据的数组,前两项放到数组装原始数据的数组,前两项放到数组fn2fn2中中中中 for i=3:n%fn2for i=3:n%fn2的第的第的第的第3 3项到第项到第项到第项到第n n项项项项 fn2=fn2,fn2(i-2)+fn2(i-1);%fn2=fn2,fn2(i-2)+fn2(i-1);%将第将第将第将第i i项添加到数组项添加到数组项添加到数组项添加到数组fn2fn2中中中中 end end x=1:n;x=1:n;plot(x,fn1,x,fn2,r*)%plot(x,fn1,x,fn2,
24、r*)%显示显示显示显示,fn1,fn1兰线,兰线,兰线,兰线,fn2fn2红星红星红星红星返回显示取对数后的拟合数据与原始数据显示取对数后的拟合数据与原始数据显示取对数后的拟合数据与原始数据显示取对数后的拟合数据与原始数据 function plotfibo3(n)%function plotfibo3(n)%显示拟合数据与原始数据的前显示拟合数据与原始数据的前显示拟合数据与原始数据的前显示拟合数据与原始数据的前n n项项项项 fn1=;%fn1=;%装拟合数据的数组装拟合数据的数组装拟合数据的数组装拟合数据的数组 for i=1:n%fn1for i=1:n%fn1的第的第的第的第1 1项
25、到第项到第项到第项到第n n项项项项 fn1=fn1,-0.8039+0.4812*i;%fn1=fn1,-0.8039+0.4812*i;%将第将第将第将第i i项添加到数组项添加到数组项添加到数组项添加到数组fn1fn1中中中中 end end fn2=1,1;%fn2=1,1;%装原始数据的数组,前两项放到数组装原始数据的数组,前两项放到数组装原始数据的数组,前两项放到数组装原始数据的数组,前两项放到数组fn2fn2中中中中 for i=3:n%fn2for i=3:n%fn2的第的第的第的第3 3项到第项到第项到第项到第n n项项项项 fn2=fn2,fn2(i-2)+fn2(i-1);%fn2=fn2,fn2(i-2)+fn2(i-1);%将第将第将第将第i i项添加到数组项添加到数组项添加到数组项添加到数组fn2fn2中中中中 end end x=1:n;x=1:n;plot(x,fn1,x,log(fn2),r*)%plot(x,fn1,x,log(fn2),r*)%显示显示显示显示,fn1,fn1兰线,兰线,兰线,兰线,fn2fn2红星红星红星红星返回2024/3/11 周一第二次上课作业第二次上课作业 教材教材P18-19:第:第2和和6题题