matlab 递归调用例子
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab 递归调用例子相关的知识,希望对你有一定的参考价值。
递归公式 Pc,t = 0.88 * Pc-1,t + 0.12 * Pc-1,t-1
其中c是自变量,范围(1,201),步长为1,Pc,t为函数值(c,t为P的下标)。且P1,1=0.12, Pc,0=0; 当c<t时,Pc,t=0。
程序如下:
function [p] = diguihashu(c,t)
if nargin==0,
c=1;t=0;
end
ct=[c,t];
action_ct=num2str(ct);
switch(action_ct)
case \'1 1\'
p=0.12;
case action_ct
temp=str2num(action_ct);
cc=temp(1);tt=temp(2);
if tt==0||cc<tt
p=0;
else
p=0.88*diguihashu(c-1,t)+0.12*diguihashu(c-1,t-1);
end
otherwise,
error(\'Unkonwn acction string!\');
end
%测试结果:
>> pct=diguihashu(12,5)
pct =
0.0034
%下面是画图程序:
clear
p=zeros(15,15);
for c=1:15
for t=1:15
p(c,t)=diguihashu(c,t);
end
end
[cc,tt]=meshgrid(1:15,1:15);
surf(cc,tt,p)
xlabel(\'c\')
ylabel(\'t\')
MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。
MATLAB是matrix&laboratory两个词的组合,意为矩阵工厂(矩阵实验室)。是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。
MATLAB和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。在新的版本中也加入了对C,FORTRAN,C++,JAVA的支持。
参考技术A
main.m
N=106;
K=sum1(N);
K=K*sqrt(3);
Sum1.m
function [K]=sum1(N)
if N-1>0
K=sum1(N-1)+cal(N);
elseif N==1
K=cal(1);
end
cal.m
function [K]=cal(N)
if N==0
K=1;
elseif N>0
K=1/2*cal(N-1);
end
递归函数的定义和几个小例子
递归函数
(1)什么是递归函数?
我们都知道,一个函数可以调用其他函数。如果这个函数在内部调用它自己,那么这个函数就叫递归函数。
(2)递归函数的作用
举个例子,我们来计算阶乘 n! = 1 * 2 * 3 * ... * n
1 #不使用递归的方法:
2 n=4 #求4的阶乘
3 result=1
4 i=1
5 while i<=4:
6 result=result*i
7 i+=1
8
9 print(result)
10
11 #使用递归的方法:
12 def test1(n):#定义函数来计算数字n的阶乘
13 if n==1:
14 return 1
15 return n * test1(n-1)
16
17 print(test1(5))
18 #1在函数的内部调用自己本身
19 #2递归函数本质是一个方法的循环调用,注意:有可能出现死循环
20 #3一定要定义递归的边界(什么时候退出循环)
输出结果为:
1 24
2 120
3 [Finished in 0.4s]
从上面两中方法的对比可以看出,递归函数的作用和循环的方法效果一样,即递归函数本质上是一个方法的循环调用,注意:有可能会出现死循环。因此,使用递归函数时,一定要定义递归的边界(即什么时候退出循环)。
递归函数的另一个案例是斐波纳契数列。
斐波纳契数列:1,1,2,3,5,8,13。。。(该数列中,有n个数字,从第三个数字开始:数值 =前一个数字 + 前面一个数字)
即,n=(n-2)+(n-1)
1 def get_num(n):#获取斐波拉契数列中第n个数字的值
2 if n==1 or n==2:
3 return 1
4 return get_num(n-1) + get_num(n-2)
5
6 #把获取的斐波拉契数字存放到列表中
7 nums=[]
8 for i in range(1,21):
9 nums.append(get_num(i))#get_num获得一个斐波拉契数字
10
11 print(nums)
输出结果为:
1 [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765]
2 [Finished in 0.4s]
以上两个案例是递归函数的经典案例,需要记住其使用方法。注意:在实际使用中,递归函数由于消耗时间比较长(相比for循环和while循环),所以很少使用。
以上是关于matlab 递归调用例子的主要内容,如果未能解决你的问题,请参考以下文章