序(Subroutines)。举例来说,若要计算一个正整数的阶乘 (Factorial),我们可以写一个如下的MATLAB函数并将之存档於fact.m: function output = fact(n)
% FACT Calculate factorial of a given positive integer. 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 integerrecursively. if n == 1, % Terminating condition output = 1; return; end
output = n*fact(n-1);
在写一个递函数时,一定要包含结束条件(Terminating condition),否则此函数将会一再呼叫自己,永远不会停止,直到电脑的记忆体被耗尽为止。以上例而言,n==1即满足结束条件,此时我们直接将output设为1,而不再呼叫此函数本身。
1-5、搜寻路径
在前一节中,test.m所在的目录是d:\\mlbook。如果不先进入这个目录,MATLAB就找不到你要执行的M档案。如果希望MATLAB不论在何处都能执行test.m,那麽就必须将d:\\mlbook加入MATLAB的搜寻路径(Search path)上。要检视MATLAB的搜寻路径,键入path即可: path
MATLABPATH
d:\\matlab5\\toolbox\\matlab\\general d:\\matlab5\\toolbox\\matlab\\ops d:\\matlab5\\toolbox\\matlab\\lang
d:\\matlab5\\toolbox\\matlab\\elmat d:\\matlab5\\toolbox\\matlab\\elfun d:\\matlab5\\toolbox\\matlab\\specfun d:\\matlab5\\toolbox\\matlab\\matfun d:\\matlab5\\toolbox\\matlab\\datafun d:\\matlab5\\toolbox\\matlab\\polyfun d:\\matlab5\\toolbox\\matlab\\funfun d:\\matlab5\\toolbox\\matlab\\sparfun d:\\matlab5\\toolbox\\matlab\\graph2d d:\\matlab5\\toolbox\\matlab\\graph3d d:\\matlab5\\toolbox\\matlab\\specgraph d:\\matlab5\\toolbox\\matlab\\graphics d:\\matlab5\\toolbox\\matlab\%uitools d:\\matlab5\\toolbox\\matlab\\strfun d:\\matlab5\\toolbox\\matlab\\iofun d:\\matlab5\\toolbox\\matlab\\timefun d:\\matlab5\\toolbox\\matlab\\datatypes d:\\matlab5\\toolbox\\matlab\\dde d:\\matlab5\\toolbox\\matlab\\demos d:\\matlab5\\toolbox\\tour
d:\\matlab5\\toolbox\\simulink\\simulink
d:\\matlab5\\toolbox\\simulink\\blocks d:\\matlab5\\toolbox\\simulink\\simdemos d:\\matlab5\\toolbox\\simulink\\dee d:\\matlab5\\toolbox\\local
此搜寻路径会依已安装的工具箱(Toolboxes)不同而有所不同。要查询某一命令是在搜寻路径的何处,可用which命令: which expo
d:\\matlab5\\toolbox\\matlab\\demos\\expo.m
很显然c:\\data\\mlbook并不在MATLAB的搜寻路径中,因此MATLAB找不到test.m这个M档案: which test
c:\\data\\mlbook\\test.m
要将d:\\mlbook加入MATLAB的搜寻路径,还是使用path命令: path(path, 'c:\\data\\mlbook');
此时d:\\mlbook已加入MATLAB搜寻路径(键入path试看看),因此MATLAB已经\看\得到 test.m: which test
c:\\data\\mlbook\\test.m
现在我们就可以直接键入test,而不必先进入test.m所在的目录。 小提示:如何在其启动MATLAB时,自动设定所需的搜寻路径? 如果在每一次启动MATLAB後都要设定所需的搜寻路径,将是一件很麻烦的事。有两种方法,可以使MATLAB启动後 ,即可载入使用者定义的搜寻路径:
1.MATLAB的预设搜寻路径是定义在matlabrc.m(在c:\\matlab之下,或是其他安装MATLAB 的主目录下),MATLAB每次启动後,即自动执行此档案。因此你可以直接修改matlabrc.m ,以加入新的目录於搜寻路径之中。 2.MATLAB在执行matlabrc.m时,同时也会在预设搜寻路径中寻找startup.m,若此档案存在,则执行其所含的命令。因此我们可将所有在MATLAB启动时必须执行的命令(包含更改搜寻路径的命令),放在此档案中。 每次MATLAB遇到一个命令(例如test)时,其处置程序为: 1.将test视为使用者定义的变数。
2.若test不是使用者定义的变数,将其视为永久常数 。
3.若test不是永久常数,检查其是否为目前工作目录下的M档案。 4.若不是,则由搜寻路径寻找是否有test.m的档案。
5.若在搜寻路径中找不到,则MATLAB会发出哔哔声并印出错误讯息。 以下介绍与MATLAB搜寻路径相关的各项命令。
1-6、资料的储存与载入
有些计算旷日废时,那麽我们通常希望能将计算所得的储存在档案中,以便将来可进行其他处理。MATLAB储存变数的基本命令是save,在不加任何选项(Options)时,save会将变数以二进制(Binary)的方式储存至副档名为mat的档案,如下述:
save:将工作空间的所有变数储存到名为matlab.mat的二进制档案。 save filename:将工作空间的所有变数储存到名为filename.mat的二进制档案。 save filename x y z :将变数x、y、z储存到名为filename.mat的二进制档案。
以下为使用save命令的一个简例:
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库MATLAB教材(4)在线全文阅读。
相关推荐: