官术网_书友最值得收藏!

3.3 M函數(shù)文件

M函數(shù)文件是一種重要的M文件,每個(gè)函數(shù)文件都定義為一個(gè)函數(shù)。MATLAB提供的各種函數(shù)基本都是由函數(shù)文件定義的。

3.3.1 M函數(shù)文件的格式

M函數(shù)文件由function聲明行開(kāi)頭,其格式如下:

其中,以function開(kāi)頭的這行為函數(shù)聲明行,表示該M文件是一個(gè)函數(shù)文件。Untitled4為函數(shù)名,函數(shù)名的命名規(guī)則和變量名相同。input_args為函數(shù)的輸入形參列表,多個(gè)參數(shù)間用“,”分隔,用圓括號(hào)括起來(lái)。output_args為函數(shù)的輸出形參列表,多個(gè)參數(shù)間用“,”分隔,當(dāng)輸出參數(shù)為兩個(gè)或兩個(gè)以上時(shí),用方括號(hào)括起來(lái)。

M函數(shù)文件說(shuō)明如下:

(1)M函數(shù)文件中的函數(shù)聲明行是必不可少的,必須以function語(yǔ)句開(kāi)頭,用以區(qū)分M腳本文件和M函數(shù)文件。

(2)M函數(shù)文件名和聲明行中的函數(shù)名最好相同,以免出錯(cuò)。如果不同,MATLAB將忽略函數(shù)名而確認(rèn)函數(shù)文件名,調(diào)用時(shí)使用函數(shù)文件名。

(3)注釋說(shuō)明要以%開(kāi)頭,第一注釋行一般包括大寫(xiě)的函數(shù)文件名和函數(shù)功能信息,可以提供lookfor和help命令查詢(xún)使用。第二及以后注釋行為幫助文本,提供M函數(shù)文件更加詳細(xì)的說(shuō)明信息,通常包括函數(shù)的功能,輸入和輸出參數(shù)的含義,調(diào)用格式說(shuō)明,以及版權(quán)信息,便于M文件查詢(xún)和管理。

例如,在命令窗口使用lookfor和help命令查找已經(jīng)編寫(xiě)好的函數(shù)文件“fexam_3_13”的注釋說(shuō)明信息。

由以上結(jié)果可知,lookfor命令只顯示注釋的第一行信息,而help命令顯示所有注釋信息。

如果用lookfor命令查詢(xún)perimeter關(guān)鍵字,可以查詢(xún)到已經(jīng)編寫(xiě)過(guò)的有關(guān)周長(zhǎng)perimeter的函數(shù)文件,如下所示。

3.3.2 M函數(shù)文件的調(diào)用

M函數(shù)文件編寫(xiě)好后,就可以在命令窗口或者M(jìn)腳本文件中調(diào)用函數(shù)。函數(shù)調(diào)用的一般格式如下:

需要注意,函數(shù)調(diào)用時(shí)各實(shí)參數(shù)列表出現(xiàn)的順序和個(gè)數(shù),應(yīng)與函數(shù)定義時(shí)的形參列表的順序和個(gè)數(shù)一致,否則會(huì)出錯(cuò)。函數(shù)調(diào)用時(shí),先將輸入實(shí)參數(shù)傳送給相應(yīng)的形參數(shù),然后再執(zhí)行函數(shù),函數(shù)將輸出形參數(shù)傳送給輸出實(shí)參數(shù),從而實(shí)現(xiàn)參數(shù)的傳遞。

【例3-15】 編寫(xiě)函數(shù)文件,實(shí)現(xiàn)極坐標(biāo)(ρθ)與直角坐標(biāo)(xy)之間的轉(zhuǎn)換。

已知轉(zhuǎn)換公式為

函數(shù)文件ftran.m:

在命令窗口可以直接調(diào)用函數(shù)文件ftran.m:

也可以編寫(xiě)調(diào)用函數(shù)文件ftran.m的M腳本文件exam_3_15.m:

運(yùn)行M腳本文件exam_3_15.m,結(jié)果如下:

3.3.3 主函數(shù)和子函數(shù)

1.主函數(shù)

在MATLAB中,一個(gè)M文件可以包含一個(gè)或者多個(gè)函數(shù),但只能有一個(gè)主函數(shù),主函數(shù)一般出現(xiàn)在文件最上方,主函數(shù)名與M函數(shù)文件名相同。

2.子函數(shù)

在一個(gè)M函數(shù)文件中若有多個(gè)函數(shù),則除了第一個(gè)主函數(shù)以外,其余函數(shù)都是子函數(shù)。子函數(shù)的說(shuō)明如下:

(1)子函數(shù)只能被同一文件中的函數(shù)調(diào)用,不能被其他文件調(diào)用;

(2)各子函數(shù)的次序沒(méi)有限制;

(3)同一文件的主函數(shù)和子函數(shù)的工作空間是不同的。

【例3-16】 分段函數(shù)如下所示,編寫(xiě)M函數(shù)文件,使用主函數(shù)exam_3_16.m調(diào)用三個(gè)子函數(shù)y1、y2和y3的方式,實(shí)現(xiàn)分段函數(shù)相應(yīng)曲線(xiàn)繪制的任務(wù),其中,abc分別從屏幕輸入1、2和3。

M函數(shù)文件exam_3_16.m如下:

在命令窗口直接調(diào)用函數(shù)文件exam_3_16.m:

結(jié)果如圖3-9所示。

圖3-9 ax2bxc曲線(xiàn)(z=1)

結(jié)果如圖3-10所示。

圖3-10 asin(x)+b曲線(xiàn)(z=2)

結(jié)果如圖3-11所示。

圖3-11 ln|ab/x|曲線(xiàn)(z=3)

該M函數(shù)文件由一個(gè)主函數(shù)exam_3_16和三個(gè)子函數(shù)y1、y2和y3組成,它們的變量空間是相互獨(dú)立的。可以用help命令查找子函數(shù)的幫助信息,格式是“help文件名>子函數(shù)名”。例如,查找“exam_3_16”文件中的子函數(shù)y1的幫助信息:

3.3.4 函數(shù)的參數(shù)

MATLAB語(yǔ)言的函數(shù)參數(shù)包括函數(shù)的輸入?yún)?shù)和輸出參數(shù)。函數(shù)通過(guò)輸入?yún)?shù)接收數(shù)據(jù),經(jīng)過(guò)函數(shù)執(zhí)行后由輸出參數(shù)輸出結(jié)果,因此,MATLAB的函數(shù)調(diào)用就是輸入輸出參數(shù)傳遞的過(guò)程。

1.參數(shù)的傳遞

函數(shù)的參數(shù)傳遞是將主函數(shù)中的變量值傳送給被調(diào)函數(shù)的輸入?yún)?shù),被調(diào)函數(shù)執(zhí)行后,將結(jié)果通過(guò)被調(diào)函數(shù)的輸出參數(shù)傳送給主函數(shù)的變量。被調(diào)函數(shù)的輸入和輸出參數(shù)都存放在函數(shù)的工作空間中,與MATLAB的工作空間是獨(dú)立的,當(dāng)調(diào)用結(jié)束后,函數(shù)的工作空間數(shù)據(jù)被清除,被調(diào)函數(shù)的輸入和輸出參數(shù)也被清除。

例如,在MATLAB命令空間調(diào)用例3-15已創(chuàng)建的函數(shù)ftran.m:

可知,將變量r和x的值傳送給函數(shù)的輸入變量rho和thetha,函數(shù)運(yùn)行后,將函數(shù)的輸出變量x和y傳送給工作空間中的xx和yy變量。

2.參數(shù)的個(gè)數(shù)

MATLAB函數(shù)的輸入輸出參數(shù)使用時(shí),不用事先聲明和定義,參數(shù)的個(gè)數(shù)可以改變。MATLAB語(yǔ)言提供nargin和nargout函數(shù)獲得實(shí)際調(diào)用時(shí)函數(shù)的輸入和輸出參數(shù)的個(gè)數(shù)。還可以用varagrin和varargout函數(shù)獲得輸入和輸出參數(shù)的內(nèi)容。

(1)nargin和nargout函數(shù)可以分別獲得函數(shù)的輸入和輸出參數(shù)的個(gè)數(shù),調(diào)用格式如下:

其中,fun是函數(shù)名,x是函數(shù)的輸入?yún)?shù)個(gè)數(shù),y是函數(shù)的輸出參數(shù)個(gè)數(shù)。當(dāng)nargin和nargout在函數(shù)體內(nèi)時(shí),fun可以省略。

例如,用nargin和nargout函數(shù)求例3-15創(chuàng)建的函數(shù)ftran.m的輸入和輸出參數(shù)的個(gè)數(shù)。

(2)MATLAB提供了varargin和varargout函數(shù),將函數(shù)調(diào)用時(shí)實(shí)際傳遞的參數(shù)構(gòu)成元胞數(shù)組,通過(guò)訪(fǎng)問(wèn)元胞數(shù)組中各元素的內(nèi)容來(lái)獲得輸入和輸出變量。varargin和varargout函數(shù)的格式如下:

【例3-17】 根據(jù)輸入?yún)?shù)的個(gè)數(shù)使用varargin和varargout函數(shù),繪制sin(x)不同線(xiàn)型的曲線(xiàn)。

在MATLAB命令空間輸入下列命令,執(zhí)行該函數(shù),顯示的曲線(xiàn)如圖3-12所示。

需要注意,varargin和varargout函數(shù)獲得的都是元胞數(shù)組。

圖3-12 畫(huà)出三條曲線(xiàn)

3.3.5 函數(shù)的變量

MATLAB的函數(shù)變量根據(jù)作用范圍,可以分為局部變量和全局變量。

1.局部變量

局部變量(Local Variables)的作用范圍是函數(shù)的內(nèi)部,函數(shù)內(nèi)部的變量如果沒(méi)有特別聲明,都是局部變量。都有自己的函數(shù)工作空間,與MATLAB工作空間是獨(dú)立的,局部變量?jī)H在函數(shù)內(nèi)部執(zhí)行時(shí)存在,當(dāng)函數(shù)執(zhí)行完,變量就消失。

2.全局變量

全局變量(Global Variables)的作用范圍是全局的,可以在不同的函數(shù)和MATLAB工作空間中共享。使用全局變量可以減少參數(shù)的傳遞,有效地提高程序的執(zhí)行效率。

全局變量在使用前必須用“global”命令聲明,而且每個(gè)要共享的全局變量的函數(shù)和工作空間,都必須逐個(gè)使用“global”對(duì)該變量聲明。格式如下:

要清除全局變量可以用clear命令,命令格式如下:

【例3-18】 利用在工作空間和函數(shù)文件中定義全局變量,將直角坐標(biāo)變?yōu)闃O坐標(biāo)。

在命令空間輸入下面命令,調(diào)用函數(shù)exam_3_18,結(jié)果如下:

由于函數(shù)exam_3_18和工作空間都定義了a和b為全局變量,只要在命令窗口修改a和b的值,就能完成直角坐標(biāo)轉(zhuǎn)換為極坐標(biāo),而不需要修改函數(shù)exam_3_18文件。

在函數(shù)文件里,全局變量的定義語(yǔ)句應(yīng)放在變量使用之前,一般都放在文件的前面,用大寫(xiě)字符命名,以防止重復(fù)定義。

主站蜘蛛池模板: 虹口区| 襄汾县| 绥化市| 阜城县| 广汉市| 临海市| 屯留县| 宝丰县| 谢通门县| 樟树市| 韶山市| 祥云县| 湾仔区| 昔阳县| 陈巴尔虎旗| 固始县| 大埔县| 荔波县| 陕西省| 克拉玛依市| 顺平县| 霸州市| 三门县| 寿阳县| 岳普湖县| 南安市| 闸北区| 当涂县| 宝山区| 西盟| 南江县| 漯河市| 定州市| 兴业县| 恭城| 裕民县| 乐安县| 汶川县| 榆树市| 修文县| 益阳市|