数学与统计学院课程设计(实习)报告 第 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求解递推数列第n项
数学与统计学院课程设计(实习)报告 第 2 页
数列是按一定次序排列的一列数。数列中的每一个数都叫做这个数列的项。排在第一位的数称为这个数列的第1项,排在第二位的数称为这个数列的第2项……排在第n位的数称为这个数列的第n项。如果数列{a[n]}的第n项与它前一项或几项的关系可以用一个式子来表示,那么这个公式叫做这个数列的递推公式。而用递推公式表示的数列就叫做递推数列。
不是所有的递推数列在至今的数学发展的水平下都能求得通项公式,对于这些数列,可以用MATLAB编程求解第n项,如此既方便了很多实际问题,也便于数列通项公式的研究。 2.1 Fibonacci数列 2.1.1 Fibonacci数列简介
Fibonacci数列,又称黄金分割数列、小兔子数列,因数学家斐波那契以兔子繁殖为例而引入。在现代物理、化学、准晶体等领域,Fibonacci数列都有直接应用。
数学上,Fibonacci被递归的方法定义为:
Fibonacci数列有很多漂亮的数学性质,比如:从第二项开始,每个奇数项的平方都比前后两项之积少1,每个偶数项的平方都比前后两项之积多1;第n?2项代表了集合
{1,2,?,n}中所有不包含相邻正整数的子集个数。
Fibonacci数列中的Fibonacci数经常出现在我们的生活中,比如松果、凤梨、树叶的排列、某些花朵的花瓣数,超越数e,黄金矩阵、黄金分割、等螺旋线、杨辉三角等。 2.1.2 求解Fibonacci数列第n项算法
1.递归算法 %建立M函数文件 function f=fib(n) if n==0||n==1 f=1;
%特殊情况,递归结束的标志 else
数学与统计学院课程设计(实习)报告 第 3 页
f=fib(n-1)+fib(n-2); %递归调用fib函数 end end
2.循环算法 %建立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数列的递推公式可以转换为:
数学与统计学院课程设计(实习)报告 第 4 页
n?1?f(n)??11??? ????f(n?1)??10??f(1)??f(0)? ??%建立M函数文件 function f=fib(n) a=[ 1 1 1 0 ];
b=a^(n-1)*[1;1]; f=b(1); end
2.1.3 Fibonacci数应用
问:把一对兔子(雌、雄各一只)在某年的开始放到围栏中,每个月这对兔子都生出一对新兔,其中雌、雄各一只。由第二个月开始,每对新兔每个月也生出一对新兔,也是雌、雄各一只,问一年后围栏中有多少对兔子?
解:对于n?1,2,?,令f(n)表示第n个月开始时围栏中的兔子对数,显然有f(1)?1,
f(2)?2。在第n个月的开始,那些第n?1个月初已经在围栏中的兔子仍然存在,而且
每对在第n?2个月初就存在的兔子将在第n?1个月生出一对新兔来,再令f(0)?1有:
用MATLAB求解,在控制台下输入代码 fib(12) 得ans=233
用MATLAB画出小兔子数列的增长曲线,在M文件里输入代码 for n=1:12
A(1,n)=fib(n);
%循环得出第n月的小兔子个数
end plot(1:12,A)
%以横坐标为月份,纵坐标为小兔子个数作图
数学与统计学院课程设计(实习)报告 第 5 页
得出的figure如下图:
图2.1 小兔子数列增长曲线
2.2 Catalan数列 2.2.1 Catalan数列简介
Catalan数是组合数学中常出现在各种计算问题中的数列,前几项为:1,1,2,5,14,132,429,1430,…
Catalan数满足递推式:
目前发现的Catalan数的应用已有上百种,比如:括号化乘积表达式的方案数;一个栈的进栈序列为1,2,3,…,n,的出栈序列;凸多边形的三角划分;给定N个节点组成二叉树的种数,非降路径不穿过对角线的路径的方法数。 2.2.2 求解Catalan数列第n项算法
%建立M函数文件 function c=catalan(n) if n==0||n==1 c=1;
%特殊情况,递归结束的标志 else
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库求解递推数列第n项的MATLAB实现在线全文阅读。
相关推荐: