《matlab编程初步.pdf》由会员分享,可在线阅读,更多相关《matlab编程初步.pdf(38页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、MATLABMATLABMATLABMATLAB编程初步编程初步编程初步编程初步2011年3月23日2MatlabMatlabMatlabMatlab 编程入门编程入门编程入门编程入门 Matlab 编程简介编程简介编程简介编程简介 Matlab 作为一种广泛应用于科学计算的工具软件,不仅具有强大的数值计算、符号计算、矩阵运算能力和丰富的绘图功能,同时也具有和 C C C C、FORTRANFORTRANFORTRANFORTRAN 等高级语言一样进行程序设计。在 MatlabMatlabMatlabMatlab 程序设计中,要充分利用 MatlabMatlabMatlabMatlab 数据结
2、构的特点,提高编程效率。利用 MatlabMatlabMatlabMatlab 的程序控制功能,可以将有关 MatlabMatlabMatlabMatlab 命令编成程序存储在一个文件中(MMMM 文件),然后在命令窗口中运行该文件,MatlabMatlabMatlabMatlab 就会自动依次执行文件中的命令,直到全部命令执行完毕。2011年3月23日3 用 Matlab 语言编写的程序称为 M 文件。M 文件是由若干 Matlab 命令组合在一起构成的,它可以完成某些操作,也可以实现某种算法。事实上,MatlabMatlabMatlabMatlab 提供的内部函数以及各种工具箱,都是利用
3、MatlabMatlabMatlabMatlab 语言开发的 M M M M 文件。用户也可以结合自己的工作需要,开发自己的程序或工具箱。M 文件根据调用方式的不同可以分为两类:ScriptScriptScriptScript:脚本文件/命令文件 FunctionFunctionFunctionFunction:函数文件 M M M M 文件文件文件文件 MMMM 文件以.m.m.m.m 为扩展名。2011年3月23日4 MMMM 文件是一个文本文件,可以用任何文本编辑器来建立和编辑,通常使用 MatlabMatlabMatlabMatlab 自带的 MMMM 文件编辑器。M M M M 文件
4、的建立与打开文件的建立与打开文件的建立与打开文件的建立与打开 新建一个 M 文件 菜单操作(File File File File New New New New M-File M-File M-File M-File )命令操作 (editediteditedit M M M M 文件名)命令按钮 (快捷键 )打开已有的 M 文件 菜单操作 (File File File File Open Open Open Open )命令操作(editediteditedit M M M M 文件名)命令按钮 (快捷键 )双击 MMMM 文件 2011年3月23日5 在命令窗口中输入 f2csf2cs
5、f2csf2cs,即可执行该 MMMM 文件。5(32)9=cfcfcfcf例:编写一个脚本文件将华氏温度转化为摄氏温度脚本文件举例脚本文件举例脚本文件举例脚本文件举例clear;clear;clear;clear;%清除当前工作空间中的变量清除当前工作空间中的变量清除当前工作空间中的变量清除当前工作空间中的变量f=f=f=f=input(input(input(input(PleasePleasePleasePlease input Fahrenheit temperature:input Fahrenheit temperature:input Fahrenheit temperature
6、:input Fahrenheit temperature:););););c=5c=5c=5c=5*(f-32)/9;(f-32)/9;(f-32)/9;(f-32)/9;fprintf(Thefprintf(Thefprintf(Thefprintf(The centigrade temperature is%centigrade temperature is%centigrade temperature is%centigrade temperature is%gn,cgn,cgn,cgn,c););););新建一个 MMMM 文件 f2cs.mf2cs.mf2cs.mf2cs.m,内容
7、如下:脚本文件运行后,文件中所产生的所有变量都驻所有变量都驻所有变量都驻所有变量都驻留在留在留在留在 MatlabMatlabMatlabMatlab 当前工作空间当前工作空间当前工作空间当前工作空间,可以用 whoswhoswhoswhos 查看。2011年3月23日6关系运算关系运算关系运算关系运算小于大于=大于等于=等于=不等于 比较大小,如果结论是 真真真真 则返回 1 1 1 1,否则返回 0 0 0 0 注意=与=的区别 关系操作符能用来比较两个同样大小的数组,或用来比较一个数组和一个标量,在后一种情况,标量和数组中的每一个元素相比较,比较结果与数组大小一样。关系关系关系关系运算符
8、运算符2011年3月23日7例:例:例:例:关系运算关系运算关系运算关系运算举例举例举例举例 2+2=4 2+2=4 2+2=4 2+2=4 ans=1 23 23 23 23 ans=0 A=1 3 5;2 0 6;A=1 3 5;2 0 6;A=1 3 5;2 0 6;A=1 3 5;2 0 6;A=1 3 5 B=3 1 0 ans=0 1 1 B=3 1 0;2 4 6;B=3 1 0;2 4 6;B=3 1 0;2 4 6;B=3 1 0;2 4 6;2 0 6 2 4 6 1 0 1 A=BA=BA=BA=B x=5 0;4 2;x=5 0;4 2;x=5 0;4 2;x=5 0;
9、4 2;x=5 0 ans=0 1 x4 x4 x4 xany(A)any按列运算A=0 2 ans=1 1 3 4 all(A)5 6 ans=0 1 all也按列运算2011年3月23日11 程序控制结构有三种:顺序结构、选择结构和循环结构。任何复杂的程序都由这三种基本结构组成。顺序结构顺序结构顺序结构顺序结构MMMM文件控制流文件控制流文件控制流文件控制流 按排列顺序依次执行各条语句,直到程序的最后。这是最简单的一种程序结构,一般涉及数据的输入输出、数据的计算或处理等。2011年3月23日12例:例:例:例:A=inputA=inputA=inputA=input(Please inpu
10、t A:)Please input A:)Please input A:)Please input A:)数据的输入:inputinputinputinputA=inputA=inputA=inputA=input(提示信息提示信息)其中 提示信息 为字符串,该命令要求用户输入 A A A A 的值(可以是数或字符串)数据输入数据输入数据输入数据输入 inputinputinputinputA=inputA=inputA=inputA=input(提示信息提示信息,s)s)s)s)注:注:注:注:此时输入的字符串不要加单引号!如果是输入字符串,也可以使用下面的方法name=inputname=
11、inputname=inputname=input(WhatWhatWhatWhats your name?s your name?s your name?s your name?,s s s s )例:例:例:例:2011年3月23日13dispdispdispdisp(X(X(X(X)输出变量 X X X X 的值的值的值的值,可以是数值矩阵或字符串 B=B=B=B=1 2 3;4 5 6;7 8 91 2 3;4 5 6;7 8 91 2 3;4 5 6;7 8 91 2 3;4 5 6;7 8 9;dispdispdispdisp(B(B(B(B)数据输出数据输出数据输出数据输出 di
12、spdispdispdisp 数据的输出:dispdispdispdisp A=A=A=A=Hello,TomHello,TomHello,TomHello,Tom!;dispdispdispdisp(A(A(A(A)例:例:例:例:2011年3月23日14数据输出数据输出数据输出数据输出 fprintffprintffprintffprintffprintffprintffprintffprintf(fid,format,variables(fid,format,variables(fid,format,variables(fid,format,variables)按指定的格式将变量的值输出
13、到指定的文件 数据的输出:fprintffprintffprintffprintf fidfidfidfid 为文件句柄,若缺省,则将变量的值输出到屏幕上 formatformatformatformat 用来指定数据输出时采用的格式,常见的有%e%e%e%e(采用科学计算形式采用科学计算形式 )%f%f%f%f(采用浮点数形式采用浮点数形式 )%g%g%g%g(由系统自动选取上述两种格式之一由系统自动选取上述两种格式之一)%s%s%s%s(输出字符串输出字符串)formatformatformatformat 中还可以使用一些特殊格式,如:nnnn (换行换行 )t t t t (制表符制表
14、符 )b b b b (退格退格 )(反斜杆反斜杆 )%(百分号百分号 )2011年3月23日15数据输出数据输出数据输出数据输出 fprintffprintffprintffprintf a=a=a=a=HelloHelloHelloHello ;b=2.4;c=100;b=2.4;c=100;b=2.4;c=100;b=2.4;c=100*pi;pi;pi;pi;fprintffprintffprintffprintf(a=%a=%a=%a=%s,bs,bs,bs,b=%=%=%=%f,cf,cf,cf,c=%=%=%=%enenenen ,a,b,ca,b,ca,b,ca,b,c)a=H
15、ello ,b=2.400000,c=3.141593e+002例:例:例:例:formatformatformatformat 中的输出格式要与输出变量一一对应 可以没有输出变量 fprintffprintffprintffprintf(Today is Today is Today is Today is the 77 anniversary of the the 77 anniversary of the the 77 anniversary of the the 77 anniversary of the MukdenMukdenMukdenMukden IncidentInciden
16、tIncidentIncidentnnnn )例:例:例:例:2011年3月23日16pausepausepausepause 程序的暂停:pausepausepausepausepause pause pause pause 或或 pause(npause(npause(npause(n)若想强行终止程序的运行,可以使用 Ctrl+cCtrl+cCtrl+cCtrl+c其中 n n n n 是延迟时间,以秒为单位;若缺省,则将暂停程序,直到用户按任意键后继续 pause offpause offpause offpause off 屏蔽程序中所有屏蔽程序中所有 pausepausepause
17、pause 的作用的作用 pause onpause onpause onpause on 打开打开 pausepausepausepause 的作用的作用2011年3月23日17选择结构选择结构选择结构选择结构 是根据给定的条件成立或不成立,分别执行不同的语句。MatlabMatlabMatlabMatlab 用于实现选择结构的语句有 ifififif 语句和 switchswitchswitchswitch 语句。选择结构选择结构选择结构选择结构2011年3月23日18 单分支结构if if if if expressionexpressionexpressionexpression (条
18、件)(条件)statements statements statements statements(语句组)(语句组)endendendendif if if if 条件语句条件语句条件语句条件语句if if if if expression expression expression expression(条件)(条件)statements1statements1statements1statements1(语句组(语句组1 1 1 1)elseelseelseelse statements2statements2statements2statements2(语句组(语句组2 2 2 2)e
19、ndendendend 双分支结构2011年3月23日19if if if if expression1 expression1 expression1 expression1(条件1 1 1 1)statements1statements1statements1statements1(语句组1 1 1 1)elseifelseifelseifelseif expression2 expression2 expression2 expression2(条件2 2 2 2)statements2statements2statements2statements2(语句组2 2 2 2).elsei
20、felseifelseifelseif expressionmexpressionmexpressionmexpressionm (条件m m m m)statementsmstatementsmstatementsmstatementsm(语句组m m m m)elseelseelseelse statementsstatementsstatementsstatements(语句组)endendendend 多分支结构if if if if 条件语句条件语句条件语句条件语句2011年3月23日20if if if if 语句举例语句举例语句举例语句举例 数论中的一个有趣问题:任取一个正整数,
21、如果是数论中的一个有趣问题:任取一个正整数,如果是数论中的一个有趣问题:任取一个正整数,如果是数论中的一个有趣问题:任取一个正整数,如果是偶数,用偶数,用偶数,用偶数,用 2 除,如果是奇数,用除,如果是奇数,用除,如果是奇数,用除,如果是奇数,用 3 乘再加乘再加乘再加乘再加 1,反复,反复,反复,反复这个过程,直到所得到的数为这个过程,直到所得到的数为这个过程,直到所得到的数为这个过程,直到所得到的数为 1。问:是否存在使该过程永不中止的整数问:是否存在使该过程永不中止的整数问:是否存在使该过程永不中止的整数问:是否存在使该过程永不中止的整数?(exp01.m)2011年3月23日21wh
22、ilewhilewhilewhile 1 1 1 1 n=n=n=n=inputinputinputinput(Please(Please(Please(Please enter enter enter enter n(nonpositiven(nonpositiven(nonpositiven(nonpositive quit):)quit):)quit):)quit):);m=n;m=n;m=n;m=n;ifififif n=0,n=0,n=0,n1n1n1n1 ifififif remremremrem(n,2)=0(n,2)=0(n,2)=0(n,2)=0 n=n/2n=n/2n=n/
23、2n=n/2;elseelseelseelse n=3n=3n=3n=3*n+1n+1n+1n+1;endendendend fprintffprintffprintffprintf(n(n(n(n n=%n=%n=%n=%d,nd,nd,nd,n);endendendend fprintffprintffprintffprintf(n(n(n(n%d is not we need!continue.%d is not we need!continue.%d is not we need!continue.%d is not we need!continue.n n n n ,m,m,m,m)
24、;endendendendif if if if 语句举例语句举例语句举例语句举例2011年3月23日22 根据表达式的不同取值,分别执行不同的语句。switch switch switch switch expression expression expression expression(表达式)(表达式)case case case case value1 value1 value1 value1(表达式(表达式1 1 1 1)statement1statement1statement1statement1(语句组(语句组1 1 1 1)case case case case value
25、2 value2 value2 value2(表达式(表达式2 2 2 2)statement2statement2statement2statement2(语句组(语句组2 2 2 2).case case case case valuemvaluemvaluemvaluem (表达式(表达式m m m m)statementmstatementmstatementmstatementm(语句组(语句组m m m m)otherwiseotherwiseotherwiseotherwise statement statement statement statement(语句组)(语句组)en
26、dendendendswitch switch switch switch 语句语句语句语句2011年3月23日23 Matlab 首先计算 expressionexpressionexpressionexpression 的值,然后将它依次与各个 casecasecasecase 指令后的检测值进行比较,当比较结果为真时,就执行相应的语句组,然后跳出 switchswitchswitchswitch 结构。switchswitchswitchswitch 后面的表达式 expressionexpressionexpressionexpression 的值可以是一个标量或字符串。switch
27、switch switch switch 语句语句语句语句 otherwiseotherwiseotherwiseotherwise 指令可以不出现。如果所有的比较结果都为假,则执行 otherwiseotherwiseotherwiseotherwise 后面的语句组,然后跳出 switchswitchswitchswitch 结构。2011年3月23日24循环结构循环结构循环结构循环结构 是按照给定的条件,重复执行指定的语句。MatlabMatlabMatlabMatlab 用于实现循环结构的语句有 for for for for 语句语句语句语句和 while while while w
28、hile 语句语句语句语句循环结构循环结构循环结构循环结构2011年3月23日25for for for for variable=expressionvariable=expressionvariable=expressionvariable=expression statementstatementstatementstatement(循环体)endendendend循环变量循环变量循环变量循环变量 表达式 expressionexpressionexpressionexpression 可以是行向量,也可以是矩阵for for for for 循环循环循环循环clear;clear;cl
29、ear;clear;y=0;n=100;y=0;n=100;y=0;n=100;y=0;n=100;for for for for k=1:nk=1:nk=1:nk=1:n y=y+1/(2y=y+1/(2y=y+1/(2y=y+1/(2*k-1);k-1);k-1);k-1);endendendend例:例:例:例:已知已知已知已知 ,当 n=100 时,求 y 的值12151311+=ny2011年3月23日26 循环语句可以嵌套使用while while while while 循环循环循环循环while while while while expression expression e
30、xpression expression(条件)statementstatementstatementstatement(循环体)endendendend 不能在 forforforfor 循环体内改变循环变量的值 为了提高代码的运行效率,应尽可能提高代码的向量化程度,避免 forforforfor 循环的使用 如果预先就知道循环的次数,则可以采用 forforforfor 循环;否则,如果预先无法确定循环的次数,则可以使用 whilewhilewhilewhile 循环。2011年3月23日27 这个例子给出了计算 epsepsepseps 的一种方法。这里我们用大写 EPSEPSEPSEP
31、S,因此系统中 epsepsepseps 的值不会被覆盖。当 EPS=EPS=EPS=EPS=epsepsepseps 时,条件仍成立;而当 EPS=eps/2EPS=eps/2EPS=eps/2EPS=eps/2 时,条件为假,退出循环,所以最后应有 EPS=eps/2EPS=eps/2EPS=eps/2EPS=eps/2。numnumnumnum 用来记录循环次数。计算 MatlabMatlabMatlabMatlab 中 epsepsepseps 值 (exp02.mexp02.mexp02.mexp02.m)while while while while 循环举例循环举例循环举例循环举
32、例num=0;EPS=1;num=0;EPS=1;num=0;EPS=1;num=0;EPS=1;whilewhilewhilewhile(1+EPS)1(1+EPS)1(1+EPS)1(1+EPS)1 EPS=EPS/2;EPS=EPS/2;EPS=EPS/2;EPS=EPS/2;num=num+1;num=num+1;num=num+1;num=num+1;end end end end eps为浮点运算的相对精度 2011年3月23日28 breakbreakbreakbreak 和 continuecontinuecontinuecontinue breakbreakbreakbrea
33、k 语句用于终止循环的执行,即跳出最内层循环 continuecontinuecontinuecontinue 语句用于结束本次循环,进行下一次循环 breakbreakbreakbreak 和 continuecontinuecontinuecontinue 一般与 ifififif 语句配合使用其它流控制语句其它流控制语句其它流控制语句其它流控制语句 returnreturnreturnreturn returnreturnreturnreturn 语句用于退出正在运行的脚本或函数,通常用在函数文件中。2011年3月23日29 首先由计算机随机产生一个首先由计算机随机产生一个首先由计算机随
34、机产生一个首先由计算机随机产生一个 1,100 之间的一个整之间的一个整之间的一个整之间的一个整数,然后由用户猜测所产生的这个数。根据用户猜测数,然后由用户猜测所产生的这个数。根据用户猜测数,然后由用户猜测所产生的这个数。根据用户猜测数,然后由用户猜测所产生的这个数。根据用户猜测的情况给出不同的提示,如果猜测的数大于产生的的情况给出不同的提示,如果猜测的数大于产生的的情况给出不同的提示,如果猜测的数大于产生的的情况给出不同的提示,如果猜测的数大于产生的数,则显示数,则显示数,则显示数,则显示 “High”,小于则显示,小于则显示,小于则显示,小于则显示“Low”,等于则显,等于则显,等于则显,
35、等于则显示示示示 “You win!”,同时退出游戏。用户最多有,同时退出游戏。用户最多有,同时退出游戏。用户最多有,同时退出游戏。用户最多有 7 7 7 7 次机会。次机会。次机会。次机会。(exp03.m)程序示例程序示例程序示例程序示例 猜数游戏2011年3月23日30%猜数游戏猜数游戏clear;clear;clear;clear;x=round(100 x=round(100 x=round(100 x=round(100*rand);%rand);%rand);%rand);%由计算机随机产生一个由计算机随机产生一个 0,1000,1000,1000,100的整数的整数n=7;%n
36、=7;%n=7;%n=7;%有有7 7 7 7次机会次机会test=1;test=1;test=1;test=1;dispdispdispdisp(欢迎参加猜数游戏!你共有欢迎参加猜数游戏!你共有,num2str(n),num2str(n),num2str(n),num2str(n),次机会次机会););););dispdispdispdisp(请输入一个请输入一个0 0 0 0到到100100100100之间的一个整数之间的一个整数););););for k=1:nfor k=1:nfor k=1:nfor k=1:n guess=guess=guess=guess=input(Enteri
37、nput(Enterinput(Enterinput(Enter your guess:);your guess:);your guess:);your guess:);if guess x if guess x if guess x if guess x guessx guessx guessx disp(highdisp(highdisp(highdisp(high););););else else else else disp(Youdisp(Youdisp(Youdisp(You win!);win!);win!);win!);test=0;test=0;test=0;test=0;b
38、reak;break;break;break;end end end end n=n-1;n=n-1;n=n-1;n=n-1;dispdispdispdisp(你还有你还有,num2str(n),num2str(n),num2str(n),num2str(n),次机会!次机会!););););endendendendif test=1if test=1if test=1if test=1 disp(Youdisp(Youdisp(Youdisp(You lost!)lost!)lost!)lost!)endendendend程序示例程序示例程序示例程序示例2011年3月23日31functio
39、nfunctionfunctionfunction 输出形参列表输出形参列表输出形参列表输出形参列表=函数名函数名函数名函数名(输入形参列表输入形参列表输入形参列表输入形参列表)%注释说明部分注释说明部分注释说明部分注释说明部分(可选可选可选可选)函数体语句函数体语句函数体语句函数体语句(必须必须必须必须)第一行为第一行为第一行为第一行为引导行引导行引导行引导行,表示该,表示该,表示该,表示该 MMMM文件是函数文件文件是函数文件文件是函数文件文件是函数文件 函数名的命名规则与变量名相同函数名的命名规则与变量名相同函数名的命名规则与变量名相同函数名的命名规则与变量名相同 (必须以字母开头必须以
40、字母开头必须以字母开头必须以字母开头 )当输出形参多于一个时,用当输出形参多于一个时,用当输出形参多于一个时,用当输出形参多于一个时,用方括号方括号方括号方括号括起来括起来括起来括起来 函数必须是一个函数必须是一个函数必须是一个函数必须是一个单独的单独的单独的单独的 MMMM文件文件文件文件 函数函数函数函数文件名文件名文件名文件名必须与必须与必须与必须与函数名函数名函数名函数名一致一致一致一致 以以以以百分号百分号百分号百分号开始的语句为开始的语句为开始的语句为开始的语句为注释语句注释语句注释语句注释语句函数文件函数文件函数文件函数文件 函数文件由 function 语句引导2011年3月2
41、3日32functionfunctionfunctionfunction y=y=y=y=myfliplrmyfliplrmyfliplrmyfliplr(x(x(x(x)%returns X with row preserved and columnsreturns X with row preserved and columnsreturns X with row preserved and columnsreturns X with row preserved and columns%flipped in the left/right directionflipped in the le
42、ft/right directionflipped in the left/right directionflipped in the left/right direction%X=1 2 3 becomes 3 2 1%X=1 2 3 becomes 3 2 1%X=1 2 3 becomes 3 2 1%X=1 2 3 becomes 3 2 1%4 5 6 6 5 4%4 5 6 6 5 4%4 5 6 6 5 4%4 5 6 6 5 4%num_colnum_colnum_colnum_col=size(x,2);=size(x,2);=size(x,2);=size(x,2);%取取
43、 x x x x 的列数的列数y=xy=xy=xy=x(:,num_col:-1:1)(:,num_col:-1:1)(:,num_col:-1:1)(:,num_col:-1:1);先输入矩阵x,而后写上myfliplr(x)函数文件举例函数文件举例函数文件举例函数文件举例myfliplr.mmyfliplr.mmyfliplr.mmyfliplr.m2011年3月23日33functionfunctionfunctionfunction printyh(nprintyh(nprintyh(nprintyh(n)%打印杨辉三角形打印杨辉三角形打印杨辉三角形打印杨辉三角形,本函数没有输出参数本
44、函数没有输出参数本函数没有输出参数本函数没有输出参数yhyhyhyh=1;=1;=1;=1;disp(yhdisp(yhdisp(yhdisp(yh););););if n=1,if n=1,if n=1,if n=1,returnreturnreturnreturn;end;end;end;endyhyhyhyh=1,1;=1,1;=1,1;=1,1;disp(yhdisp(yhdisp(yhdisp(yh););););for k=3:nfor k=3:nfor k=3:nfor k=3:n yh_oldyh_oldyh_oldyh_old=yhyhyhyh;k2=;k2=;k2=;k2=
45、ceilceilceilceil(k/2);(k/2);(k/2);(k/2);for l=2:k2 for l=2:k2 for l=2:k2 for l=2:k2 yh(lyh(lyh(lyh(l)=yh_old(l-1)+yh_old(l);)=yh_old(l-1)+yh_old(l);)=yh_old(l-1)+yh_old(l);)=yh_old(l-1)+yh_old(l);end end end end yh(k2+1:k)=yh(k-k2:-1:1);yh(k2+1:k)=yh(k-k2:-1:1);yh(k2+1:k)=yh(k-k2:-1:1);yh(k2+1:k)=yh
46、(k-k2:-1:1);disp(yhdisp(yhdisp(yhdisp(yh););););end end end end (在matlab中可输入printyh(5))函数文件举例函数文件举例函数文件举例函数文件举例printyh.mprintyh.mprintyh.mprintyh.m2011年3月23日34 函数调用的一般格式函数调用的一般格式函数调用的一般格式函数调用的一般格式输出实参列表输出实参列表输出实参列表输出实参列表=函数名函数名函数名函数名(输入实参列表输入实参列表输入实参列表输入实参列表)函数调用时,函数调用时,函数调用时,函数调用时,实参的顺序实参的顺序实参的顺序实参
47、的顺序应与函数定义时的应与函数定义时的应与函数定义时的应与函数定义时的形参的顺形参的顺形参的顺形参的顺序序序序一致。一致。一致。一致。函数可以函数可以函数可以函数可以嵌套调用嵌套调用嵌套调用嵌套调用,即一个函数可以被其它函数调,即一个函数可以被其它函数调,即一个函数可以被其它函数调,即一个函数可以被其它函数调用,甚至可以被它自身调用,此时称为用,甚至可以被它自身调用,此时称为用,甚至可以被它自身调用,此时称为用,甚至可以被它自身调用,此时称为递归调用递归调用递归调用递归调用。函数所传递的参数具有可调性,函数所传递的参数具有可调性,函数所传递的参数具有可调性,函数所传递的参数具有可调性,Matl
48、abMatlabMatlabMatlab 用两个永久变用两个永久变用两个永久变用两个永久变量量量量 narginnarginnarginnargin 和和和和 nargoutnargoutnargoutnargout 分别记录调用该函数时的输入实分别记录调用该函数时的输入实分别记录调用该函数时的输入实分别记录调用该函数时的输入实参和输出实参的个数。参和输出实参的个数。参和输出实参的个数。参和输出实参的个数。函数调用函数调用函数调用函数调用2011年3月23日351,11,11,11,1!(1)!,1(1)!,1(1)!,1(1)!,1n n n nn n n nnnnnnnnnnnnn=%函数
49、文件函数文件函数文件函数文件 factor.mfactor.mfactor.mfactor.mfunctionfunctionfunctionfunction f=f=f=f=factorfactorfactorfactor(n(n(n(n)if(n=1)if(n=1)if(n=1)if(n=1)f=1;f=1;f=1;f=1;elseelseelseelse f=n f=n f=n f=n*factorfactorfactorfactor(n-1);(n-1);(n-1);(n-1);endendendend%main.mmain.mmain.mmain.m%计算计算计算计算 s=1!+2!
50、+3!+4!+5!s=1!+2!+3!+4!+5!s=1!+2!+3!+4!+5!s=1!+2!+3!+4!+5!%clear;clear;clear;clear;s=0;s=0;s=0;s=0;for i=1:5for i=1:5for i=1:5for i=1:5 s=s=s=s=s+s+s+s+factorfactorfactorfactor(i(i(i(i););););endendendendfprintffprintffprintffprintf(s=%g(s=%g(s=%g(s=%g n,sn,sn,sn,s)例:利用函数的递归调用计算例:利用函数的递归调用计算例:利用函数的递归