You are on page 1of 9

数学与统计学院课程设计(实习)报告 第 1 页

求解递推数列第 n 项的 MATLAB 实现
1 绪论
1.1 MATLAB 简介

随着计算机技术的不断发展,计算机已成为应用数学工作者解决数学问题的主要
运算工具,数学运算软件如:MATLAB,Mathematica,Maple 等,已经被广泛使用。
MATLAB 是面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数
值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能
集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须要进行有效数值计
算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式
程序设计语言的的编辑模式。MATLAB 可以进行矩阵运算、绘制函数和数学、实现算法、
创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理
与通讯、图像处理、信号检测、金融建模设计与分析等领域。

1.2 课题的背景

在生活中,很多计数问题到最后都归结为一些递推公式,如果单依赖数学的方法 ,
有些递推公式按照如今的数学发展水平是很难找出通项公式的,在解决实际问题中,
不免涉及到求解第 n 项的值,如果 n 比较大,手算的话得从第一项一直计算到第 n 项,
也许算到其中的某一项突然算错了,最后得到的值和预估的值不一样,又得从头算起,
这样费时费力。数学软件的形成为这一计算提供了很大的方便,只需要根据递推关系编
一个程序,很快就能得出计算结果。本文选了特殊的并且很有代表性的四个递推数列,
给出求解其第 n 项的算法,解决和递推数列相关的应用型问题。

1.3 MATLAB 相比于其他程序设计语言的优点

MATLAB 作为一个数学运算工具,它将矩阵作为基本的存储单元。矩阵运算很快 ,
代码复杂度小。它定义数据时无需声明数据类型,各种函数的运算可以直接进行符号运
算,更加的面向于用户。MATLAB 的工具箱也很丰富,在图像处理、信号处理、仿真等
方面的工具箱里的工具、示例非常多,功能非常强大。

2 用 MATLAB 求解递推数列第 项
数列是按一定次序排列的一列数。数列中的每一个数都叫做这个数列的项。排在第
一位的数称为这个数列的第 1 项,排在第二位的数称为这个数列的第 2 项……排在第
数学与统计学院课程设计(实习)报告 第 2 页

位的数称为这个数列的第 项。如果数列 的第 项与它前一项或几项的关系可以


用一个式子来表示,那么这个公式叫做这个数列的递推公式。而用递推公式表示的数列
就叫做递推数列。
不是所有的递推数列在至今的数学发展的水平下都能求得通项公式,对于这些数
列,可以用 MATLAB 编程求解第 项,如此既方便了很多实际问题,也便于数列通项
公式的研究。

2.1 Fibonacci 数列

2.1.1 Fibonacci 数列简介

Fibonacci 数列,又称黄金分割数列、小兔子数列,因数学家斐波那契以兔子繁殖为
例而引入。在现代物理、化学、准晶体等领域,Fibonacci 数列都有直接应用。
数学上,Fibonacci 被递归的方法定义为:

 f (n)  f (n

 f (0)  1, f
Fibonacci 数列有很多漂亮的数学性质,比如:从第二项开始,每个奇数项的平方都
比前后两项之积少 1,每个偶数项的平方都比前后两项之积多 1;第 项代表了集合
中所有不包含相邻正整数的子集个数。
Fibonacci 数列中的 Fibonacci 数经常出现在我们的生活中,比如松果、凤梨、树叶的
排列、某些花朵的花瓣数,超越数 ,黄金矩阵、黄金分割、等螺旋线、杨辉三角等。

2.1.2 求解 Fibonacci 数列第 项算法

1.递归算法
%建立 M 函数文件
function f=fib(n)
if n==0||n==1
f=1;
%特殊情况,递归结束的标志
else
f=fib(n-1)+fib(n-2);
%递归调用fib函数
end
end
2.循环算法
数学与统计学院课程设计(实习)报告 第 3 页

%建立 M 函数文件
function f=fib(n)
a=1;b=1;
if n==0||n==1
f=1;
%前两项为特殊情况
else
for x=2:2:n %两个项一循环
a=a+b;
%奇数项把前面最近的偶数项和奇数项加起来
b=a+b;
%偶数项把前面最近的奇数项和偶数项加起来
end
if mod(n,2)
f=b;
%奇数时函数返回b
else
f=a;
%偶数时函数返回a
end
end
end
3.矩阵计算
原理:Fibonacci 数列的递推公式可以转换为:

 f ( n  1)  1
%建立 M 函数文件
 f ( n)  1 
function f=fib(n)
a=[
11
  
数学与统计学院课程设计(实习)报告 第 4 页

10
];
b=a^(n-1)*[1;1];
f=b(1);
end

2.1.3 Fibonacci 数应用

问:把一对兔子(雌、雄各一只)在某年的开始放到围栏中,每个月这对兔子都生
出一对新兔,其中雌、雄各一只。由第二个月开始,每对新兔每个月也生出一对新兔,
也是雌、雄各一只,问一年后围栏中有多少对兔子?
解:对于 令 表示第 个月开始时围栏中的兔子对数,显然有
, 。在第 个月的开始,那些第 个月初已经在围栏中的兔子仍然存
在,而且每对在第 个月初就存在的兔子将在第 个月生出一对新兔来,再令
有:

 f ( n)  f (n

 f (0)  1, f (
用 MATLAB 求解,在控制台下输入代码
fib(12)
得 ans=233
用 MATLAB 画出小兔子数列的增长曲线,在 M 文件里输入代码
for n=1:12
A(1,n)=fib(n);
%循环得出第 n 月的小兔子个数
end
plot(1:12,A)
%以横坐标为月份,纵坐标为小兔子个数作图
得出的 figure 如下图:
数学与统计学院课程设计(实习)报告 第 5 页

图 2.1 小兔子数列增长曲线

2.2 Catalan 数列

2.2.1 Catalan 数列简介

Catalan 数 是 组 合 数 学 中 常 出 现 在 各 种 计 算 问 题 中 的 数 列 , 前 几 项 为 :
1,1,2,5,14,132,429,1430,…
Catalan 数满足递推式:

 h( n)  h
目前发现的 Catalan 数的应用已有上百种,比如:括号化乘积表达式的方案数;一
个栈的进栈序列为 1,2,3,…, ,的出栈序列;凸多边形的三角划分;给定 个节点组成


二叉树的种数,非降路径不穿过对角线的路径的方法数。

2.2.2 求解 Catalan 数列第 项算法

%建立 M 函数文件

 h (0)
function c=catalan(n)
if n==0||n==1
c=1;
 1
%特殊情况,递归结束的标志
else
c=0;
for x=0:(n-1)
数学与统计学院课程设计(实习)报告 第 6 页

c=c+catalan(x)*catalan(n-1-x);
%递归调用catalan函数
end
end
end

2.2.3 Catalan 数列应用

给定一个平面点集 ,如果对 中任意两点 和 ,连接 和 的线段上的所


有的点都在 中,则称点集是凸的。
问:设 是一个 6 条边的凸多边形区域,用 3 条不在内部相交的对角线把 分成
4 个三角形。求有多少种不同的分法?
解:令 表示分一个 条边的凸多边形为三角形的方法数。定义 .当
时, 边形就是三角形,所以 .当 时,考虑一个有 条边的凸多边
形区域 。任取多边形的一条边 , 的两个端点记作 , 。以 为一条边,
以多边形的任一端点 与 , 的连线为两条边构成三角形
。 把 分割成 和 两部分。 为 边形, 为 边形,因此
可以用 种方法来划分, 可以用 种方法来划分。这就得到了下面的递推方程:

等价于第 项 catalan 数
用 MATLAB 求解,在控制台下输入代码
catalan(5)
得 ans=42

2.3 第二类 Stirling 数

2.3.1 第二类 Stirling 数简介

Stirling 数出现在许多组合枚举问题中。把 个不同的球放到 个相同的盒子里,

假设没有空盒,则放球方案数记作 ,称为第二类 Stirling 数。

例如,把 四个球放到两个盒子里,不允许有空盒,则放球的方法数有以
下 7 种:

a |
.
数学与统计学院课程设计(实习)报告 第 7 页

所以
4
 7
2
第二类 Stirling 数具有的性质:
1.初始条件:

2.满足下面的递推方程:

nn 
 n  1
证明:要把
有的放法分成两类:
个不同的球恰好放入



 r 
 r 0,
 

个盒子,先取一个球,比如是 ,然后把所

0   r 
单独放在一个盒子里,放法为

不是单独放在一个盒子里,可以先把其余的

种放法。对于其中的任何一种放法,加入
   的方法有
个球放到 个盒子里,有

种,由乘法法则,放球的方法

 n  1
r 
数是  r 
根据加法法则,等式成立。

2.3.2 求解第二类 Stirling 数 项算法

%建立 M 函数文件
function s=striling(n,r)
if n==r||r==1
s=1;
%特殊情况,递归结束的标志
elseif r==0||n<r
s=0;
else
s=r*striling(n-1,r)+striling(n-1,r-1);
数学与统计学院课程设计(实习)报告 第 8 页

%递归调用striling函数
end
end

2.4 杨辉三角

2.4.1 杨辉三角简介

杨辉三角,又称贾宪三角,帕斯卡三角形,是二项式系数在三角形中的一种几何
排列。杨辉三角有多种重要的性质。
前提:端点的数为 1。
1. 每个数等于它上方两数之和。
2. 每行数字左右对称,由 1 开始逐渐变大。
3. 第 行的数字有 项。
4. 第 行数字和为 。
5. 第 行的个数可表示为 , 即为从 个不同元素中取 个元
素的组合数。
6. 第 行的第 个数和第 个数相等。
7. 的展开式中各项系数依次对应杨辉三角的第 行中的每一项。
8. 将第 行第 个数,跟第 行第 个数,第 行第 个数……连
成一线,这些数的和是第 个斐波那契数;将第 行第 个数 ,跟第
行第 个数,第 行第 个数……这些数之和是第 个斐波那契数。

1                           1

2                          1   1   

3                        1   2   1   

4                      1   3   3   1   

5                    1   4   6   4   1   

6                  1   5   10  10  5   1   

7                1   6   15  20  15  6   1   

8              1   7   21  35  35  21  7   1   

9            1   8   28  56  70  56  28  8   1   

10          1   9   36  84  126 126 84  36  9   1   

11        1   10  45  120 210 252 210 120 45  10  1   

12      1   11  55  165 330 462 462 330 165 55  11  1    

13    1   12  66  220 495 792 924 792 495 220 66  12  1
数学与统计学院课程设计(实习)报告 第 9 页

14 ...

15   

16  
图 2.2 杨辉三角

2.4.2 求解杨辉三角 位置算法

function yh=YH(x,y)
if x==1||y==x+1
yh=1;
%特殊情况,递归结束的标志
else
yh=YH(x-1,y-1)+YH(x-1,y);
%递归调用 YH 函数
end

结 论
对于递推数列的求第 项值的问题,本文给出了在 MATLAB 下求解的过程,虽然
只选择了四个代表性的递推公式,但是这一过程适用于所有的递推公式求解的应用型
问题。
通过这次课程设计,我初步了解了如何用 MATLAB 进行编程,对递归算法也有了
较深的理解,接触到了这四种特殊的递推数列在实际中的应用。
由于本人的编程能力不高,所以有些递归算法无法转换为循环算法,建立递归工
作栈,甚至队列来实现。从而增加了计算机计算的时间。希望有水平高的读者能在这篇
论文的基础上加以完善。

参考文献
[1] 胡良剑, 孙晓君. MATLAB 数学实验(第二版)[M]. 北京: 高等教育出版社, 2014.
[2] Fibonacci number[OL].https://en.wikipedia.org/wiki/Fibonacci_number.
[3] Catalan number[OL].https://en.wikipedia.org/wiki/Catalan_number.
[4] Striling number[OL].https://en.wikipedia.org/wiki/Catalan_number.
[5] 杨辉三角[OL].http://baike.baidu.com/view/7804.htm.
[6] 耿素云,屈婉玲,王捍平. 离散数学教程[M]. 北京: 北京大学出版社, 2002.

You might also like