1、 数学与统计学院课程设计(实习)报告 第 1 页求解递推数列第 n 项的 MATLAB 实现1 绪论1.1 MATLAB 简介随着计算机技术的不断发展,计算机已成为应用数学工作者解决数学问题的主要运算工具,数学运算软件如:MATLAB,Mathematica,Maple 等,已经被广泛使用。MATLAB 是面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须要进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序
2、设计语言的的编辑模式。MATLAB 可以进行矩阵运算、绘制函数和数学、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。 1.2 课题的背景在生活中,很多计数问题到最后都归结为一些递推公式,如果单依赖数学的方法,有些递推公式按照如今的数学发展水平是很难找出通项公式的,在解决实际问题中,不免涉及到求解第 n 项的值,如果 n 比较大,手算的话得从第一项一直计算到第 n 项,也许算到其中的某一项突然算错了,最后得到的值和预估的值不一样,又得从头算起,这样费时费力。数学软件的形成为这一计算提供了很大的方便,只
3、需要根据递推关系编一个程序,很快就能得出计算结果。本文选了特殊的并且很有代表性的四个递推数列,给出求解其第 n 项的算法,解决和递推数列相关的应用型问题。1.3 MATLAB 相比于其他程序设计语言的优点MATLAB 作为一个数学运算工具,它将矩阵作为基本的存储单元。矩阵运算很快,代码复杂度小。它定义数据时无需声明数据类型,各种函数的运算可以直接进行符号运算,更加的面向于用户。MATLAB 的工具箱也很丰富,在图像处理、信号处理、仿真等方面的工具箱里的工具、示例非常多,功能非常强大。2 用 MATLAB 求解递推数列第 项n数学与统计学院课程设计(实习)报告 第 2 页数列是按一定次序排列的一
4、列数。数列中的每一个数都叫做这个数列的项。排在第一位的数称为这个数列的第 1 项,排在第二位的数称为这个数列的第 2 项排在第 位的数称为这个数列的第 项。如果数列 的第 项与它前一项或几项的关系nnan可以用一个式子来表示,那么这个公式叫做这个数列的递推公式。而用递推公式表示的数列就叫做递推数列。不是所有的递推数列在至今的数学发展的水平下都能求得通项公式,对于这些数列,可以用 MATLAB 编程求解第 项,如此既方便了很多实际问题,也便于数列通项n公式的研究。2.1 Fibonacci 数列2.1.1 Fibonacci 数列简介Fibonacci 数列,又称黄金分割数列、小兔子数列,因数学
5、家斐波那契以兔子繁殖为例而引入。在现代物理、化学、准晶体等领域,Fibonacci 数列都有直接应用。数学上,Fibonacci 被递归的方法定义为: ()1)(2),0,fnfnnfFibonacci 数列有很多漂亮的数学性质,比如:从第二项开始,每个奇数项的平方都比前后两项之积少 1,每个偶数项的平方都比前后两项之积多 1;第 项代表了集合2n中所有不包含相邻正整数的子集个数。1,2nFibonacci 数列中的 Fibonacci 数经常出现在我们的生活中,比如松果、凤梨、树叶的排列、某些花朵的花瓣数,超越数 ,黄金矩阵、黄金分割、等螺旋线、杨辉三角等。e2.1.2 求解 Fibonac
6、ci 数列第 项算法n1递归算法%建立 M 函数文件function f=fib(n)if n=0|n=1f=1;%特殊情况,递归结束的标志else数学与统计学院课程设计(实习)报告 第 3 页f=fib(n-1)+fib(n-2);%递归调用 fib函数endend2循环算法%建立 M 函数文件function f=fib(n)a=1;b=1;if n=0|n=1f=1;%前两项为特殊情况elsefor x=2:2:n %两个项一循环a=a+b;%奇数项把前面最近的偶数项和奇数项加起来b=a+b;%偶数项把前面最近的奇数项和偶数项加起来endif mod(n,2)f=b;%奇数时函数返回be
7、lsef=a;%偶数时函数返回aendendend3矩阵计算原理:Fibonacci 数列的递推公式可以转换为: (1)()02fnfn数学与统计学院课程设计(实习)报告 第 4 页)0(1)1(fnfn%建立 M 函数文件function f=fib(n)a=1 11 0;b=a(n-1)*1;1;f=b(1);end2.1.3 Fibonacci 数应用问:把一对兔子(雌、雄各一只)在某年的开始放到围栏中,每个月这对兔子都生出一对新兔,其中雌、雄各一只。由第二个月开始,每对新兔每个月也生出一对新兔,也是雌、雄各一只,问一年后围栏中有多少对兔子?解:对于 令 表示第 个月开始时围栏中的兔子对
8、数,显然有1,2n )(nf, 。在第 个月的开始,那些第 个月初已经在围栏中的兔子仍然)1(f)(f 1n存在,而且每对在第 个月初就存在的兔子将在第 个月生出一对新兔来,再令有:0f ()1)(2),0,fnff用 MATLAB 求解,在控制台下输入代码fib(12)得 ans=233用 MATLAB 画出小兔子数列的增长曲线,在 M 文件里输入代码for n=1:12A(1,n)=fib(n);%循环得出第 n 月的小兔子个数endplot(1:12,A)%以横坐标为月份,纵坐标为小兔子个数作图数学与统计学院课程设计(实习)报告 第 5 页得出的 figure 如下图:图 2.1 小兔子
9、数列增长曲线2.2 Catalan 数列2.2.1 Catalan 数列简介Catalan 数是组合数学中常出现在各种计算问题中的数列,前几项为:1,1,2,5,14,132,429,1430,Catalan 数满足递推式: ()0(1)(2)(1)0,2,hnhnhnn目前发现的 Catalan 数的应用已有上百种,比如:括号化乘积表达式的方案数;一个栈的进栈序列为 1,2,3, ,的出栈序列;凸多边形的三角划分;给定 个节点组成n N二叉树的种数,非降路径不穿过对角线的路径的方法数。2.2.2 求解 Catalan 数列第 项算法%建立 M 函数文件function c=catalan(n
10、)if n=0|n=1c=1;%特殊情况,递归结束的标志else数学与统计学院课程设计(实习)报告 第 6 页c=0;for x=0:(n-1)c=c+catalan(x)*catalan(n-1-x);%递归调用catalan函数endendend2.2.3 Catalan 数列应用给定一个平面点集 ,如果对 中任意两点 和 ,连接 和 的线段上的所有Kpqpq的点都在 中,则称点集是凸的。问:设 是一个 6 条边的凸多边形区域,用 3 条不在内部相交的对角线把 分成R R4 个三角形。求有多少种不同的分法?解:令 表示分一个 条边的凸多边形为三角形的方法数。定义 .当nh1n 1h时, 边
11、形就是三角形,所以 .当 时,考虑一个有 条边的凸2n112h3n4n多边形区域 。任取多边形的一条边 , 的两个端点记作 , 。以 为一条边,Ra1Aa以多边形的任一端点 与 , 的连线为两条边构成三角形 。),1(kA 1An T把 分割成 和 两部分。 为 边形, 为 边形,因此 可以用 种T12R2Rk1Rkh方法来划分, 可以用 种方法来划分。这就得到了下面的递推方程:Rknh1,1hnnkk等价于第 项 catalan 数)1(nh1n用 MATLAB 求解,在控制台下输入代码catalan(5)得 ans=422.3 第二类 Stirling 数 2.3.1 第二类 Stirli
12、ng 数简介Stirling 数出现在许多组合枚举问题中。把 个不同的球放到 个相同的盒子里,nr数学与统计学院课程设计(实习)报告 第 7 页假设没有空盒,则放球方案数记作 ,称为第二类 Stirling 数。rn例如,把 四个球放到两个盒子里,不允许有空盒,则放球的方法数有以下dcba,7 种: |,|,|,|,|,|,|cabdcabdcadbc.所以 472第二类 Stirling 数具有的性质:1初始条件: 10,1122nn n2满足下面的递推方程: 1,nnrrr证明:要把 个不同的球恰好放入 个盒子,先取一个球,比如是 ,然后把所有n na的放法分成两类:单独放在一个盒子里,放
13、法为na 1rn不是单独放在一个盒子里,可以先把其余的 个球放到 个盒子里,有 种rrn1放法。对于其中的任何一种放法,加入 的方法有 种,由乘法法则,放球的方法数nar是1r根据加法法则,等式成立。2.3.2 求解第二类 Stirling 数 项算法rn%建立 M 函数文件数学与统计学院课程设计(实习)报告 第 8 页function s=striling(n,r)if n=r|r=1s=1;%特殊情况,递归结束的标志elseif r=0|nrs=0;elses=r*striling(n-1,r)+striling(n-1,r-1);%递归调用 striling函数endend2.4 杨辉三
14、角2.4.1 杨辉三角简介杨辉三角,又称贾宪三角,帕斯卡三角形,是二项式系数在三角形中的一种几何排列。杨辉三角有多种重要的性质。前提:端点的数为 1。1. 每个数等于它上方两数之和。2. 每行数字左右对称,由 1 开始逐渐变大。3. 第 行的数字有 项。nn4. 第 行数字和为 。125. 第 行的个数可表示为 , 即为从 个不同元素中取 个元m)1,(nCn1m素的组合数。6. 第 行的第 个数和第 个数相等。n7. 的展开式中各项系数依次对应杨辉三角的第 行中的每一项。ba)( )1(n8. 将第 行第 个数,跟第 行第 个数,第 行第 个数连成一122n3325线,这些数的和是第 个斐波
15、那契数;将第 行第 个数 ,跟第 行第4n )(12n个数,第 行第 个数 这些数之和是第 个斐波那契数。464n数学与统计学院课程设计(实习)报告 第 9 页123456789101112131415161 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 1 8 28 56 70 56 28 8 1 1 9 36 84 126 126 84 36 9 1 1 10 45 120 210 252 210 120 45 10 1 1 11 55 165 330 462 462 330 1
16、65 55 11 1 1 12 66 220 495 792 924 792 495 220 66 12 1 . 图 2.2 杨辉三角2.4.2 求解杨辉三角 位置算法),(yxfunction yh=YH(x,y)if x=1|y=x+1yh=1;%特殊情况,递归结束的标志elseyh=YH(x-1,y-1)+YH(x-1,y);%递归调用 YH 函数end结 论对于递推数列的求第 项值的问题,本文给出了在 MATLAB 下求解的过程,虽然n只选择了四个代表性的递推公式,但是这一过程适用于所有的递推公式求解的应用型问题。通过这次课程设计,我初步了解了如何用 MATLAB 进行编程,对递归算法
17、也有了较深的理解,接触到了这四种特殊的递推数列在实际中的应用。数学与统计学院课程设计(实习)报告 第 10 页由于本人的编程能力不高,所以有些递归算法无法转换为循环算法,建立递归工作栈,甚至队列来实现。从而增加了计算机计算的时间。希望有水平高的读者能在这篇论文的基础上加以完善。参考文献1 胡良剑, 孙晓君. MATLAB 数学实验(第二版)M. 北京: 高等教育出版社, 2014. 2 Fibonacci numberOL.https:/en.wikipedia.org/wiki/Fibonacci_number.3 Catalan numberOL.https:/en.wikipedia.org/wiki/Catalan_number.4 Striling numberOL.https:/en.wikipedia.org/wiki/Catalan_number.5 杨辉三角OL.http:/ 耿素云,屈婉玲,王捍平. 离散数学教程M. 北京: 北京大学出版社, 2002.