【正文】
function y=average(x) % [m,n]=size(x) if(~((m==1)|(n==1))|(m==1amp。n==1)) error(39。Input must be a vector39。) end y=sum(x)/length(x) %計(jì)算 西南交通大學(xué)摩擦學(xué)研究所 Tribology Research Institute SOUTHWEST JIAOTONG UNIVERSITY 16 MATLAB程序設(shè)計(jì) M函數(shù)的類型 匿名函數(shù) 主函數(shù)與子函數(shù) 私有函數(shù) 嵌套函數(shù) 西南交通大學(xué)摩擦學(xué)研究所 Tribology Research Institute SOUTHWEST JIAOTONG UNIVERSITY 17 MATLAB程序設(shè)計(jì) 匿名函數(shù) 匿名函數(shù) 它是 MATLAB函數(shù)的一種簡(jiǎn)單形式,不要求有 M文件,只包含一個(gè) MATLAB表達(dá)式、任意多個(gè)輸入和輸出 用戶可以在 MATLAB命令窗口或者 M函數(shù)文件或是腳本文件中定義它 語法: ff=@(arglist)expression 其中 expression為匿名函數(shù)的函數(shù)體, arglist為匿名函數(shù)的輸入?yún)?shù)列表 西南交通大學(xué)摩擦學(xué)研究所 Tribology Research Institute SOUTHWEST JIAOTONG UNIVERSITY 18 MATLAB程序設(shè)計(jì) 匿名函數(shù) 等號(hào)右邊必須以 @符號(hào)開始,此符號(hào)在 MATLAB中用來構(gòu)造函數(shù)句柄,函數(shù)句柄被創(chuàng)建以后,此匿名函數(shù)就可以調(diào)用 匿名函數(shù)句柄的創(chuàng)建 sqr=@(x)x.^2。 quad(sqr,0,1) 因?yàn)?sqr是一個(gè)函數(shù)句柄,可以將其作為參數(shù)傳遞給別的函數(shù) 西南交通大學(xué)摩擦學(xué)研究所 Tribology Research Institute SOUTHWEST JIAOTONG UNIVERSITY 19 MATLAB程序設(shè)計(jì) 匿名函數(shù) 匿名函數(shù)中還可以攜帶多個(gè)輸入?yún)?shù) sumAxBy=@(x,y)(3*x+4*y)。 sumAxBy(5,7) 如果匿名函數(shù)中不包含任何的輸入?yún)?shù), @后邊的參數(shù)列表必須用空的括號(hào)表示 t=@()datestr(now)。 調(diào)用此函數(shù)時(shí)同樣使用括號(hào) t(),否則不會(huì)調(diào)用此函數(shù) 西南交通大學(xué)摩擦學(xué)研究所 Tribology Research Institute SOUTHWEST JIAOTONG UNIVERSITY 20 MATLAB程序設(shè)計(jì) 主函數(shù)與子函數(shù) MATLAB允許一個(gè) M函數(shù)文件包含多個(gè)函數(shù)的代碼,其中第一個(gè)出現(xiàn)的函數(shù)稱為主函數(shù),其他的函數(shù)稱為子函數(shù) 保存時(shí)所用的函數(shù)文件名與主函數(shù)定義名相同 MATLAB中所有非匿名函數(shù)都需要在 M文件中定義 每個(gè) M文件都要求有一個(gè)主函數(shù),它最先出現(xiàn)在該 M文件中,主函數(shù)范圍比子函數(shù)要廣,主函數(shù)可以在 M文件外部調(diào)用,子函數(shù)則不行 西南交通大學(xué)摩擦學(xué)研究所 Tribology Research Institute SOUTHWEST JIAOTONG UNIVERSITY 21 MATLAB程序設(shè)計(jì) 主函數(shù)與子函數(shù) 同一個(gè) M文件中的主函數(shù)很子函數(shù)的工作空間是彼此獨(dú)立的 各函數(shù)間的信息可以通過輸入輸出變量、全局變量或跨空間指令進(jìn)行傳遞 子函數(shù)中的第一行是其函數(shù)聲明行,而且多個(gè)子函數(shù)的排列次序可以任意改變 M函數(shù)文件中,任何指令通過名字對(duì)函數(shù)進(jìn)行調(diào)用時(shí),子函數(shù)的優(yōu)先級(jí)僅次于內(nèi)裝函數(shù) 西南交通大學(xué)摩擦學(xué)研究所 Tribology Research Institute SOUTHWEST JIAOTONG UNIVERSITY 22 MATLAB程序設(shè)計(jì) 主函數(shù)與子函數(shù) 舉例:求均值和中值 u=1:99。 [avg,med]=newstats(u) 如果想得到子函數(shù)的相關(guān)幫助信息,可以使用 help命令,如:要獲得 M文件的 mysubfun的幫助信息,可輸入: help myfun/mysubfun 西南交通大學(xué)摩擦學(xué)研究所 Tribology Research Institute SOUTHWEST JIAOTONG UNIVERSITY 23 MATLAB程序設(shè)計(jì) 私有函數(shù) 它唯一特征是只能夠在一個(gè)特定的限定函數(shù)群中可見 私有函數(shù)放在以 private命名的子目錄下,它們只對(duì)父目錄中的函數(shù)是可見的 由于私有函數(shù)是對(duì)外部不可見的,因此它們可以采用與其他目錄下函數(shù)相同的名字 可以使用 help命令獲得私有函數(shù)的幫助信息,如 help private/muyprivfun 西南交通大學(xué)摩擦學(xué)研究所 Tribology Research Institute SOUTHWEST JIAOTONG UNIVERSITY 24 MATLAB程序設(shè)計(jì) 嵌套函數(shù) 可以在任意一個(gè) MATLAB函數(shù)體內(nèi)部定義函數(shù),它們稱為外部函數(shù)的嵌套函數(shù) 嵌套函數(shù)跟其它 M文件函數(shù)一樣,包含 M文件的基本元素,當(dāng)嵌套函數(shù)結(jié)束時(shí)必須用 end表示結(jié)束 還可以進(jìn)行多重嵌套 西南交通大學(xué)摩擦學(xué)研究所 Tribology Research Institute SOUTHWEST JIAOTONG UNIVERSITY 25 MATLAB程序設(shè)計(jì) 嵌套函數(shù) function x=nestFun(p1,p2) x1=nestFun(p2)。 function y=nestFunIn(p3) y=2*p3。 end x=x1+p1。 end 西南交通大學(xué)摩擦學(xué)研究所 Tribology Research Institute SOUTHWEST JIAOTONG UNIVERSITY 26 MATLAB程序設(shè)計(jì) 嵌套函數(shù) function A(x,y) B(x,y)。 D(y)。 function B(x,y) C(x)。 D(y)。 function C(x) D(x)。 end end end 西南交通大學(xué)摩擦學(xué)研究所 Tribology Research Institute SOUTHWEST JIAOTONG UNIVERSITY 27 MATLAB程序設(shè)計(jì) 嵌套函數(shù) 一個(gè)函數(shù)可以調(diào)用自己函數(shù)體中的嵌套函數(shù),如 A可以調(diào)用 B和 D,但不能調(diào)用 C,同一級(jí)的嵌套函數(shù)也可以相互調(diào)用,如 B和 D,可以調(diào)用比自己低一級(jí)的嵌套函數(shù),如 C可以調(diào)用 D 嵌套函數(shù)有自己的工作空間,但它的權(quán)限訪問其所嵌套地方的所有函數(shù)的工作空間,因此,被主函數(shù)賦值的變量可以被主函數(shù)中任意一個(gè)嵌套函數(shù)訪問 一個(gè)嵌套函數(shù)的變量值可以被任何包含它的函數(shù)訪問 西南交通大學(xué)摩擦學(xué)研究所 Tribology Research Institute SOUTHWEST JIAOTONG UNIVERSITY 28 MATLAB程序設(shè)計(jì) 嵌套函數(shù) 創(chuàng)建函數(shù)句柄 function h=getcubehandle h=@findcube。 function cube=findcube(x) cube=x.^3。 end end 西南交通大學(xué)摩擦學(xué)研究所 Tribology Research Institute SOUTHWEST JIAOTONG UNIVERSITY 29 MATLAB程序