( M-files)。例如一个名为 test. m的M档案,包含一连串的 MATLAB命令,那麼只要直接键入test,即可 执行其所包含的命令: pwd%显示现在的目录 ans D: MATLAB5\bin cdc: data\mbook%进入 test. m所在的目录 type test. m%显示 test.m的内容 This is my first test M-file %o Roger Jang, March 3, 1997 fprintf('Start of test. m!\n) fprintf('i=%d--->13=%din,, 1, 13) fprintf('End of test. m! \n) est%执行 test. m Start of test m! i=1->1^3=1 i=2->1^3=8 i=3-i^3=27 End of test ml 小提示:第一注解行( HI help line) test. m的前两行是注解,可以使程式易於了解与管理。特别要说明的 是,第一注解行通常用来简短说明此M档案的功能,以便 lookfor能以关键字比对的方式来找出此M档案 举例来说, test. m的第一注解行包含test这个字,因此如果键入 lookfor test, MATLAB即可列出所有在第 注解行包含test的M档案,因而 test n也会被列名在内 将6考这轴分肉含自职以点数使用工作空同间的度的面里在即角中线定药变数和 也都在工作空间中看得到。函数则需要用到输入引数( Input arguments)和输出引数( Output arguments) 来传递资讯,这就像是C语言的函数,或是 FORTRAN语言的副程序( Subroutines)。举例来说,若要计算 个正整数的阶乘( Factorial),我们可以写一个如下的 MATLAB函数并将之存档於 fact m: function output=fact(n) FACT Calculate factorial of a given positive integer
11 (M-files)。例如一个名为 test.m 的 M 档案,包含一连串的 MATLAB 命令,那麽只要直接键入 test,即可 执行其所包含的命令: pwd % 显示现在的目录 ans = D:\MATLAB5\bin cd c:\data\mlbook % 进入 test.m 所在的目录 type test.m % 显示 test.m 的内容 % This is my first test M-file. % Roger Jang, March 3, 1997 fprintf('Start of test.m!\n'); for i = 1:3, fprintf('i = %d ---> i^3 = %d\n', i, i^3); end fprintf('End of test.m!\n'); test % 执行 test.m Start of test.m! i = 1 ---> i^3 = 1 i = 2 ---> i^3 = 8 i = 3 ---> i^3 = 27 End of test.m! 小提示:第一注解行(H1 help line) test.m 的前两行是注解,可以使程式易於了解与管理。特别要说明的 是,第一注解行通常用来简短说明此 M 档案的功能,以便 lookfor 能以关键字比对的方式来找出此 M 档案。 举例来说,test.m 的第一注解行包含 test 这个字,因此如果键入 lookfor test,MATLAB 即可列出所有在第 一注解行包含 test 的 M 档案,因而 test.m 也会被列名在内。 严格来说,M 档案可再细分为命令集(Scripts)及函数(Functions)。前述的 test.m 即为命令集,其效用和 将命令逐一输入完全一样,因此若在命令集可以直接使用工作空间的变数,而且在命令集中设定的变数, 也都在工作空间中看得到。函数则需要用到输入引数(Input arguments)和输出引数(Output arguments) 来传递资讯,这就像是 C 语言的函数,或是 FORTRAN 语言的副程序(Subroutines)。举例来说,若要计算 一个正整数的阶乘 (Factorial),我们可以写一个如下的 MATLAB 函数并将之存档於 fact.m: function output = fact(n) % FACT Calculate factorial of a given positive integer
output= I for i= l:n output=output" 其中fact是函数名,n是输入引数, output是输出引数,而i则是此函数用到的暂时变数。要使用此函数, 直接键入函数名及适当输入引数值即可 y=120 (当然,在执行fact之前,你必须先进入fatm所在的目录。)在执行fact(5)时 MATLAB会跳入一个下层的暂时工作空间( Temperary workspace),将变数n的值设定为5,然後进行各 项函数的内部运算,所有内部运算所产生的变数(包含输入引数n、暂时变数i,以及输出引数 output)都 存在此暂时工作空间中。运算完毕後, MATLAB会将最後输出引数 output的值设定给上层的变数y,并将 清除此暂时工作空间及其所含的所有变数。换句话说,在呼叫函数时,你只能经由输入引数来控制函数的 输入,经由输出引数来得到函数的输出,但所有的暂时变数都会随着函数的结束而消失,你并无法得到它 们的值。 小提示:有关阶乘函数前面(及後面)用到的阶乘函数只是纯粹用来说明 MATLAB的函数观念。若实际 要计算一个正整数n的阶乘(即n!)时,可直接写成 prod(l: n),或是直接呼叫 gamma函数: gamma(n-1 MATLAB的函数也可以是递式的( Recursive),也就是说,一个函数可以呼叫它本身 举例来说,n!=n*(n-1),因此前面的阶乘函数可以改成递式的写法: function output=fact(n) FACT Calculate factorial of a given positive integer recursively ifn ==1. Terminating condition output=I return output=n fact(n-1); 在写一个递函数时,一定要包含结束条件( Terminating condition),否则此函数将会一再呼叫自己,永远 不会停止,直到电脑的记忆体被耗尽为止。以上例而言,n=1即满足结束条件,此时我们直接将 output 设为1,而不再呼叫此函数本身。 1-5、搜寻路径
12 output = 1; for i = 1:n, output = output*i; end 其中 fact 是函数名,n 是输入引数,output 是输出引数,而 i 则是此函数用到的暂时变数。要使用此函数, 直接键入函数名及适当输入引数值即可: y = fact(5) y = 120 (当然,在执行 fact 之前,你必须先进入 fact.m 所在的目录。)在执行 fact(5)时, MATLAB 会跳入一个下层的暂时工作空间(Temperary workspace),将变数 n 的值设定为 5,然後进行各 项函数的内部运算,所有内部运算所产生的变数(包含输入引数 n、暂时变数 i,以及输出引数 output)都 存在此暂时工作空间中。运算完毕後,MATLAB 会将最後输出引数 output 的值设定给上层的变数 y,并将 清除此暂时工作空间及其所含的所有变数。换句话说,在呼叫函数时,你只能经由输入引数来控制函数的 输入,经由输出引数来得到函数的输出,但所有的暂时变数都会随着函数的结束而消失,你并无法得到它 们的值。 小提示:有关阶乘函数 前面(及後面)用到的阶乘函数只是纯粹用来说明 MATLAB 的函数观念。若实际 要计算一个正整数 n 的阶乘(即 n!)时,可直接写成 prod(1:n),或是直接呼叫 gamma 函数:gamma(n-1)。 MATLAB 的函数也可以是递 式的(Recursive),也就是说,一个函数可以呼叫它本身。 举例来说,n! = n*(n-1)!,因此前面的阶乘函数可以改成递式的写法: function output = fact(n) % FACT Calculate factorial of a given positive integer recursively. if n == 1, % Terminating condition output = 1; return; end output = n*fact(n-1); 在写一个递函数时,一定要包含结束条件(Terminating condition),否则此函数将会一再呼叫自己,永远 不会停止,直到电脑的记忆体被耗尽为止。以上例而言,n==1 即满足结束条件,此时我们直接将 output 设为 1,而不再呼叫此函数本身。 1-5、搜寻路径