试验一斐波那契数列

温柔似野鬼°
853次浏览
2021年02月17日 16:32
最佳经验
本文由作者推荐

新年贺语-

2021年2月17日发(作者:中国土豪)


试验一



斐波那契数列




一、



实验目的与要求



1

< br>.认识


Fibonacci


数列,体验发现其通项公式的 过程;



2


.了解

matlab


软件中进行数据显示与数据拟合的方式;


< /p>


3


.掌握


matlab

< br>软件中


plot, polyfit


等函数的基本用法;



4


.提高对数据进行分析与处理的能力。




二、



问题描述



某人养了一对兔,一个月后 生育了一对小兔。假设小兔一个月后就可以长


大成熟,而每对成熟的兔每月都将生育一对 小兔,且兔子不会死亡。问:一年后


共有多少对兔子?




三、



问题分析



这个问题,最早由意大利数 学家斐波那契


(Fibonacci)


,于

1202


年在其著


作《珠算原理》中提出。根据问题的假设 ,兔子的总数目是如下数列:



1


,< /p>


1



2



3



5


< p>
8



13



21



34



55



89



144



233


,…



问题的答案就是此数列的第


12

< p>
项,即一年后共有


144


对兔子。



这个数列通常被称为斐波那契


(Fibonacci )


数列,研究这个问题就是研究


Fibonacci

< p>
数列。把这个问题作更深入的研究,我们会问:第


n


个月后,总共有


多少对兔子?即


Fibonacci


数列的第


n


项是多少?这就需要我们探素


Fibonacci


数列的通项公式。根据问题的描述,我们知道第< /p>


n+2


个月后兔子的对数,等于



n+1


个月后兔子的对数(表示原来就有的老兔子对数),加上第


n


个月后兔


子的对数


(表示生育出来的新兔子对数)



这样就得到关于

< p>
Fibonacci


数列的一


个递推公式:



F


n


< p>
2



F


n



1



F

n



利用


matlab

< p>
软件的数据可视化功能将这些数据显示成平面曲线的形式后,


我们可以观察 到


Fibonacci


数列的变化规律;


通过


matlab


软件的数据拟合功能,

我们可以大概知道


Fibonacci


数列的函数关系式,


结合上面的递推公式,


就可以


推导出来


Fibonacci


数列的通项公式。




四、



背景知识介绍



1




数据的可视化。



将离散的数据:


F


1


,


F


2


,


F


3


,


F


4


,

< br>,


F


n


,




看成平面坐标系里的点:


(1< /p>


,


F


1


),(2 ,


F


2


),(3,

F


3


),(4,


F


4


),


,(


n


,


F


n


),

< br>,



利用


matlab


软件的


plot


函数在平面坐标系里划出一个点 列,


就可以实现离


散数据的可视化。


p lot


函数的基本使用格式为:


plot(y)



其中参数


y


表示竖坐标,< /p>


即需要显示的数据。




1




y=1:20;y=y.^3;plot(y)


2




数据的拟合。



数据拟合就是寻找一个 目标函数,作为被拟合数据的近似函数关系。目标


函数的类型,可以是多项式、指数函数 等。作数据拟合,首先需要估计目标函数


的类型,


这一点可以通 过数据可视化来观察得到,


而一阶多项式是最常见的目标


函数,


此时称为线性回归。


确定拟合系数的原则是最小二乘法,


即所有误差的平


方和取最小值。在


matla b


软件中以多项式为目标函数作数据拟合的函数是


polyfi t


,它的基本使用格式为:


polyfit

(x,y,n)




其中


(x,y)


是被拟合的数据,即平面上的一个点列,而


n


是事先确定的多项


式的阶数。




2



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.2676t


2


- 3.6053t + 13.4597



3




数列的通项公式。



寻找一个整标函数 ,使得它在


n


处的函数值,等于数列的第


n


项的值,这个


函数就是数列的通项公式。

< br>


4




黄金分割。



把一条线段分割为两部分 ,使其中一部分与全长之比等于另一部分与这部


分之比(如下图)


。其比值是一个无理数


(


5



1)



2


,取其前三 位数字的近似值



0.618


。由于按 此比例设计的造型十分协调美观,因此称之为黄金分割。






五、



实验过程



本试验将

< br>Fibonacci


数列的有限项,


看成是待处理的数据 。


首先利用


matlab


软件的可视化 功能,


将这些数据显示在平面坐标系中,


观察其图形类似什么曲 线,


结论是:指数函数的曲线。进一步,利用指数函数与对数函数的互逆关系,将原


有数据取对数,再观察其曲线形状是否类似直线,以验证原来的观察是否正确。


通过观察到的目标函数,


然后利用


matlab


软件的数据拟合功能,


得到


Fibonac ci


数列通项公式的近似关系。


最后,


从近似关系出发,


推导出来


Fibonacci


数列的


通项公式。



1




观察数据的大概函数关系。



为了研究


Fibonacci


数列的变化规律,我们取此数列的前


30


项来观察。利



Matlab


软件的数据可视化功能,将这些数据显示在平面坐标系中,观察其中


蕴涵的函数关系。具体的实现流程为:(


1


) 定义数组


fn


;(


2

< br>)显示数组


fn



具体的代码如 下:



function plotfibo(n) %


定义函数显示


Fibonacci


数列前


n




fn=[1,1]; %


将数列的前两项放到数组


fn




for i=3:n %fn


的第


3


项到第


n




AM:AB=MB:AM


fn=[fn,fn(i-2)+fn(i-1)]; %


将第


i


项添加到数组


fn




end %


循环结束



plot(fn) %


将装有数列前


n


项的数组显示出来< /p>



这个函数的调用方式是:


plotfi bo(30)


,显示出来的图像为图


1


,经观察,


觉得曲线的形状象指数函数的曲线,


其数据无限增大 。


可以改变参数


n


的值,



复观察。













1 n=30



2 n=50













3 n=500



4 n=1000



2




进一步验证上一步得到的结论。



经过 上一步的观察,觉得这些数据应该是指数函数的形式。为了进一步验


证这个结论是否正确 ,


可以利用指数函数与对数函数的互逆关系。


如果这些数据


确实是指数函数的形式,则经过取对数后应该是一个线性关系,即一阶多项式,


从图形上看应该象一条直线。因此,再利用


Matlab

软件的数据可视化功能,将


这些数据取对数后显示在平面坐标系中,


观察它是否象一条直线。


具体的实现流


程为:(


1


)定义数组


fn


; (


2


)数组


fn


取对数;(


3


)显示数组


fn


。具体的代


码如下:



function plotlnfibo(n) %


显示取对 数后的前


n




fn=[1,1]; %


将数列的前两项放到 数组


fn




for i=3:n %fn


的第

< p>
3


项到第


n


< p>


fn=[fn,fn(i-2)+fn(i-1)]; %< /p>


将第


i


项添加到数组

fn




end %


循环结束



fn=log(fn) %


将原来的数据取对数



plot(fn) %


将装有数列前


n


项的数组显示出来



这个函数的调用方式是:


plotlnfibo(30)


,< /p>


显示出来的图像为图


5



经观察,


觉得它确实象一条直线。可以改变参数


n


的值,反复观察。














5 n=30



6 n=50












7 n=500



8 n=1000



3




获得数据的近似关系式。



经过以上第 一步的观察,确定


Fibonacci


数列的数据是指数函数的 关系,


第二步验证了第一步得到的结论,


因此我们认为


Fibonacci


数列的数据关系就是


指数函 数,取对数后就是线性函数,即一阶多项式。利用


Matlab


软件的数据拟


合功能,


通过取对数后的数据,

< br>用一阶多项式拟合出它的函数关系式,


可以得到


Fibo nacci


数列通项公式的一个近似表达式。具体的实现流程为:(

1


)定义数



fn




2


数组


fn


取对数;



3



用一阶多项式拟合数组


fn



具体的代码如下:



function fitlnfibo(n) %


根据取对数后的数据,拟合出线性表达式



fn=[1,1]; %


将数列的前两项放到数组


fn




for i=3:n %fn


的第


3


项到第


n




fn=[fn,fn(i-2)+fn(i-1)]; %


将第


i


项添加到数组


fn




end %


循环结束



xn=1:n; %


定义横坐标


新年贺语-


新年贺语-


新年贺语-


新年贺语-


新年贺语-


新年贺语-


新年贺语-


新年贺语-