试验一斐波那契数列
新年贺语-
试验一
斐波那契数列
一、
实验目的与要求
1
< br>.认识
Fibonacci
数列,体验发现其通项公式的
过程;
2
.了解
matlab
软件中进行数据显示与数据拟合的方式;
<
/p>
3
.掌握
matlab
< br>软件中
plot,
polyfit
等函数的基本用法;
4
.提高对数据进行分析与处理的能力。
二、
问题描述
某人养了一对兔,一个月后
生育了一对小兔。假设小兔一个月后就可以长
大成熟,而每对成熟的兔每月都将生育一对
小兔,且兔子不会死亡。问:一年后
共有多少对兔子?
三、
问题分析
这个问题,最早由意大利数
学家斐波那契
(Fibonacci)
,于
1202
年在其著
作《珠算原理》中提出。根据问题的假设
,兔子的总数目是如下数列:
1
,<
/p>
1
,
2
,
3
,
5
,
8
,
13
,
21
,
34
,
55
,
89
,
144
,
233
,…
问题的答案就是此数列的第
12
项,即一年后共有
144
对兔子。
这个数列通常被称为斐波那契
(Fibonacci
)
数列,研究这个问题就是研究
Fibonacci
数列。把这个问题作更深入的研究,我们会问:第
n
个月后,总共有
多少对兔子?即
Fibonacci
数列的第
n
项是多少?这就需要我们探素
Fibonacci
数列的通项公式。根据问题的描述,我们知道第<
/p>
n+2
个月后兔子的对数,等于
第
n+1
个月后兔子的对数(表示原来就有的老兔子对数),加上第
p>
n
个月后兔
子的对数
(表示生育出来的新兔子对数)
。
这样就得到关于
Fibonacci
数列的一
个递推公式:
F
n
2
F
n
1
F
n
利用
matlab
软件的数据可视化功能将这些数据显示成平面曲线的形式后,
我们可以观察
到
Fibonacci
数列的变化规律;
通过
matlab
软件的数据拟合功能,
我们可以大概知道
Fibonacci
数列的函数关系式,
结合上面的递推公式,
就可以
推导出来
Fibonacci
数列的通项公式。
四、
背景知识介绍
1
.
数据的可视化。
将离散的数据:
p>
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];
polyfit
(x,y,2)
结果:
p>
0.2676t
2
- 3.6053t
+ 13.4597
3
.
数列的通项公式。
寻找一个整标函数
,使得它在
n
处的函数值,等于数列的第
n
项的值,这个
函数就是数列的通项公式。
< br>
4
.
黄金分割。
把一条线段分割为两部分
,使其中一部分与全长之比等于另一部分与这部
分之比(如下图)
。其比值是一个无理数
(
5
1)
2
,取其前三
位数字的近似值
是
0.618
。由于按
此比例设计的造型十分协调美观,因此称之为黄金分割。
五、
实验过程
本试验将
< br>Fibonacci
数列的有限项,
看成是待处理的数据
。
首先利用
matlab
软件的可视化
功能,
将这些数据显示在平面坐标系中,
观察其图形类似什么曲
线,
结论是:指数函数的曲线。进一步,利用指数函数与对数函数的互逆关系,将原
p>
有数据取对数,再观察其曲线形状是否类似直线,以验证原来的观察是否正确。
通过观察到的目标函数,
然后利用
matlab
p>
软件的数据拟合功能,
得到
Fibonac
ci
数列通项公式的近似关系。
最后,
从近似关系出发,
推导出来
Fibonacci
数列的
通项公式。
1
.
观察数据的大概函数关系。
为了研究
Fibonacci
数列的变化规律,我们取此数列的前
30
项来观察。利
用
Matlab
软件的数据可视化功能,将这些数据显示在平面坐标系中,观察其中
蕴涵的函数关系。具体的实现流程为:(
1
)
定义数组
fn
;(
2
< br>)显示数组
fn
。
具体的代码如
下:
function plotfibo(n) %
定义函数显示
Fibonacci
数列前
p>
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
.
进一步验证上一步得到的结论。
经过
上一步的观察,觉得这些数据应该是指数函数的形式。为了进一步验
证这个结论是否正确
,
可以利用指数函数与对数函数的互逆关系。
如果这些数据
p>
确实是指数函数的形式,则经过取对数后应该是一个线性关系,即一阶多项式,
从图形上看应该象一条直线。因此,再利用
Matlab
软件的数据可视化功能,将
这些数据取对数后显示在平面坐标系中,
观察它是否象一条直线。
具体的实现流
程为:(
1
)定义数组
fn
;
(
2
)数组
fn
取对数;(
3
)显示数组
fn
。具体的代
码如下:
function plotlnfibo(n) %
显示取对
数后的前
n
项
fn=[1,1]; %
将数列的前两项放到
数组
fn
中
for i=3:n %fn
的第
3
项到第
n
项
fn=[fn,fn(i-2)+fn(i-1)]; %<
/p>
将第
i
项添加到数组
fn
中
end
%
循环结束
fn=log(fn)
%
将原来的数据取对数
plot(fn) %
将装有数列前
n
项的数组显示出来
这个函数的调用方式是:
plotlnfibo(30)
,<
/p>
显示出来的图像为图
5
,
经观察,
觉得它确实象一条直线。可以改变参数
n
p>
的值,反复观察。
图
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;
%
定义横坐标