第4章MATLAB中M文件和程序設(shè)計_第1頁
第4章MATLAB中M文件和程序設(shè)計_第2頁
第4章MATLAB中M文件和程序設(shè)計_第3頁
第4章MATLAB中M文件和程序設(shè)計_第4頁
第4章MATLAB中M文件和程序設(shè)計_第5頁
已閱讀5頁,還剩41頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、第四章第四章 M文件和程序設(shè)計文件和程序設(shè)計主要內(nèi)容主要內(nèi)容4.1 程序控制語句程序控制語句4.2 命令文件和函數(shù)文件命令文件和函數(shù)文件4.3 字符串的求值字符串的求值4.4 程序性能優(yōu)化程序性能優(yōu)化4.5 面向?qū)ο缶幊堂嫦驅(qū)ο缶幊?.1 程序控制語句程序控制語句一、分支控制一、分支控制分支控制語句有分支控制語句有if和和switch兩種語句兩種語句if結(jié)構(gòu)結(jié)構(gòu) if expressioncommands end【說明】【說明】當表達式當表達式expression的值為真,則執(zhí)行的值為真,則執(zhí)行commands語句語句組,否則跳過組,否則跳過commands語句組,執(zhí)行語句組,執(zhí)行end之后的

2、語句。之后的語句。4.1 程序控制語句程序控制語句if-else結(jié)構(gòu)結(jié)構(gòu) if expression commands1 else commands2 end【說明】【說明】如果表達式如果表達式expression的值為真,的值為真,則執(zhí)行語句組則執(zhí)行語句組 commands1,然后跳過語句組然后跳過語句組commands2向下執(zhí)行;向下執(zhí)行;若表達式若表達式expression的值為假,的值為假,則跳過語句組則跳過語句組commands1,執(zhí)行語句組執(zhí)行語句組commands2。 4.1 程序控制語句程序控制語句if-elseif-else結(jié)構(gòu)結(jié)構(gòu) if expression_1 comma

3、nd_1 elseif expression_2 command_2 elseif expression_n command_n else command_el end 【說明】【說明】 如果表達式如果表達式expression_1的值為真,則執(zhí)行語句組的值為真,則執(zhí)行語句組command_1,若表達式,若表達式expression_1的值為假,的值為假,則判斷則判斷expression_2的值,的值,若為真,則執(zhí)行語句組若為真,則執(zhí)行語句組command_2,否則向下繼,否則向下繼續(xù)判斷表達式。如果所有續(xù)判斷表達式。如果所有表達式都為假,則執(zhí)行語表達式都為假,則執(zhí)行語句組句組command_

4、el。4.1 程序控制語句程序控制語句例例4.1.14.1.1: 有分段函數(shù)有分段函數(shù) 341( )11sincos1xxxf xexxxx 計算并顯示函數(shù)值。計算并顯示函數(shù)值。編程輸入編程輸入x x的值,的值,switch-case結(jié)構(gòu)結(jié)構(gòu) switch exp_const case value_1 commands_1 case value_2 commands_2 case value_n commands_n otherwise commands_ow end 4.1 程序控制語句程序控制語句【說明】【說明】表達式表達式exp_const的值和哪一個的值和哪一個case語句后的測試值相

5、等,就執(zhí)行語句后的測試值相等,就執(zhí)行那個那個case語句下的語句組。如果語句下的語句組。如果exp_const和所有測試值都不相等,和所有測試值都不相等,就執(zhí)行就執(zhí)行otherwise后的語句組后的語句組commands_ow。switch后的后的exp_const表達式可以為標量或者字符串。對于標量形表達式可以為標量或者字符串。對于標量形式,用關(guān)系運算符式,用關(guān)系運算符“= =”比較,對于字符串形式,用函數(shù)比較,對于字符串形式,用函數(shù)strcmp比較。比較。case語句后的語句后的value_n值可以是標量、字符串,也可以是細胞數(shù)組。值可以是標量、字符串,也可以是細胞數(shù)組。如果是細胞數(shù)組,如

6、果是細胞數(shù)組,Matlab會把表達式會把表達式exp_const的值和的值和細胞數(shù)組中的每個元素比較,只要有一個元素和細胞數(shù)組中的每個元素比較,只要有一個元素和exp_const值相同,比較結(jié)果就為相等。值相同,比較結(jié)果就為相等。4.1 程序控制語句程序控制語句二、循環(huán)控制二、循環(huán)控制for循環(huán)循環(huán) for x=Array commands end【說明】【說明】 x稱為循環(huán)變量,稱為循環(huán)變量,commands稱為循環(huán)體。循環(huán)稱為循環(huán)體。循環(huán)的執(zhí)行步驟是:循環(huán)變量從左到右依次取的執(zhí)行步驟是:循環(huán)變量從左到右依次取Array數(shù)數(shù)組的一列,每取一列就執(zhí)行一次循環(huán)體,循環(huán)體組的一列,每取一列就執(zhí)行一

7、次循環(huán)體,循環(huán)體被執(zhí)行的次數(shù)為被執(zhí)行的次數(shù)為Array的列數(shù)。的列數(shù)。for循環(huán)一般用于循環(huán)一般用于循環(huán)次數(shù)已知的程序流程控制循環(huán)次數(shù)已知的程序流程控制 。4.1 程序控制語句程序控制語句while循環(huán)循環(huán) while expression commands end【說明】【說明】 先判斷表達式先判斷表達式expression的值,如果其值為真,則執(zhí)行的值,如果其值為真,則執(zhí)行 commands循環(huán)體;執(zhí)行完循環(huán)體后,繼續(xù)判斷表達式循環(huán)體;執(zhí)行完循環(huán)體后,繼續(xù)判斷表達式expression的值,直到表達式的值,直到表達式expression的值為假,結(jié)束循環(huán)。的值為假,結(jié)束循環(huán)。while循環(huán)

8、通常用在循環(huán)次數(shù)未知的情況下,而且要在循環(huán)體修改循環(huán)通常用在循環(huán)次數(shù)未知的情況下,而且要在循環(huán)體修改循環(huán)表達式的值,否則容易造成死循環(huán)。循環(huán)表達式的值,否則容易造成死循環(huán)。break 從循環(huán)體中跳出,并使循環(huán)結(jié)束。從循環(huán)體中跳出,并使循環(huán)結(jié)束。4.1 程序控制語句程序控制語句例例4.1.2:輸入物品的標簽號碼,顯示物品的種類。其中標簽號碼為:輸入物品的標簽號碼,顯示物品的種類。其中標簽號碼為1、5、7的物品為食品,號碼為的物品為食品,號碼為10到到19的物品為辦公用品,號碼的物品為辦公用品,號碼為為20、24、28的為音像制品。的為音像制品。要求:不斷從鍵盤輸入標簽號碼,輸入一個號碼顯示一次物

9、品要求:不斷從鍵盤輸入標簽號碼,輸入一個號碼顯示一次物品種類,輸入錯誤號碼要給出提示,輸入號碼種類,輸入錯誤號碼要給出提示,輸入號碼0則結(jié)束輸入。則結(jié)束輸入。4.1 程序控制語句程序控制語句三、異常檢測三、異常檢測 Matlab有異常處理機制,即可以檢測某些語句的執(zhí)行是否正有異常處理機制,即可以檢測某些語句的執(zhí)行是否正確,如果發(fā)生運行錯誤,確,如果發(fā)生運行錯誤,Matlab的異常處理機制會捕捉到這個的異常處理機制會捕捉到這個錯誤,并跳轉(zhuǎn)到用戶指定的錯誤處理程序。錯誤,并跳轉(zhuǎn)到用戶指定的錯誤處理程序。try-catch語句語句 try commands catch handles end 【說明

10、】【說明】 執(zhí)行語句組執(zhí)行語句組commands,當語句組,當語句組commands執(zhí)行執(zhí)行發(fā)生錯誤時,跳轉(zhuǎn)到錯誤處理語句組發(fā)生錯誤時,跳轉(zhuǎn)到錯誤處理語句組handles。(例(例4.1.3)4.1 程序控制語句程序控制語句四、其他程序流控制語句四、其他程序流控制語句返回指令返回指令 return強制結(jié)束函數(shù)或者命令的調(diào)用,將控制權(quán)交給主調(diào)函數(shù)強制結(jié)束函數(shù)或者命令的調(diào)用,將控制權(quán)交給主調(diào)函數(shù)或者命令窗口。或者命令窗口。出錯處理出錯處理 error(message)顯示出錯信息顯示出錯信息message,中止程序運行,中止程序運行 errortrap發(fā)生錯誤后,程序繼續(xù)執(zhí)行或退出的狀態(tài)切換發(fā)生錯

11、誤后,程序繼續(xù)執(zhí)行或退出的狀態(tài)切換 lasterr顯示顯示Matlab給出的最新的出錯給出的最新的出錯信息,并中止程信息,并中止程序運行序運行4.1 程序控制語句程序控制語句警告處理警告處理 warning(message) 顯示警告信息顯示警告信息message,程序繼續(xù)運行,程序繼續(xù)運行 lastwarn 顯示顯示Matlab最新給出的警告信息,程序自動運行最新給出的警告信息,程序自動運行五、人機交互控制五、人機交互控制input v=input(message)將用戶鍵入的內(nèi)容賦給變量將用戶鍵入的內(nèi)容賦給變量v,messages是是顯示信息顯示信息 v=input(message, s)

12、 將用戶鍵入的內(nèi)容作為將用戶鍵入的內(nèi)容作為 字符串賦給變量字符串賦給變量v4.1 程序控制語句程序控制語句keyboard 從鍵盤讀入多個從鍵盤讀入多個Matlab指令,直到用戶輸入指令,直到用戶輸入return指令才返回。指令才返回。yesinput v=yesinput(Prompt, default, posible)【說明】【說明】 Prompt是顯示在屏幕上的提示信息;是顯示在屏幕上的提示信息;default是缺省值,即如果沒有鍵是缺省值,即如果沒有鍵 盤輸入時變量盤輸入時變量v賦值為賦值為default;posible是變量是變量v可能接受的值??赡芙邮艿闹怠ausepause

13、暫停執(zhí)行文件,等用戶輸入任意按鍵后繼續(xù)執(zhí)行暫停執(zhí)行文件,等用戶輸入任意按鍵后繼續(xù)執(zhí)行pause(n)暫停暫停n秒后,程序繼續(xù)執(zhí)行秒后,程序繼續(xù)執(zhí)行dispdisp(X) 顯示數(shù)組顯示數(shù)組X的內(nèi)容,但是不顯示數(shù)組的內(nèi)容,但是不顯示數(shù)組X的名字的名字4.2 命令文件和函數(shù)文件命令文件和函數(shù)文件 用戶可以把需要運行的用戶可以把需要運行的Matlab指令保存在一個以指令保存在一個以“.m”為擴展名的文件中,通過在命令窗口鍵入這個文件的名字來為擴展名的文件中,通過在命令窗口鍵入這個文件的名字來運行文件中的運行文件中的Matlab指令,我們稱這些文件為指令,我們稱這些文件為m文件文件。按照。按照m文件文件

14、的組成和特點,可以分為的組成和特點,可以分為命令文件命令文件和和函數(shù)文件函數(shù)文件。 4.2 命令文件和函數(shù)文件命令文件和函數(shù)文件一、命令文件一、命令文件有關(guān)命令文件的描述如下:有關(guān)命令文件的描述如下: 命令文件沒有輸入?yún)?shù)也沒有輸出參數(shù),只是一些命令文件沒有輸入?yún)?shù)也沒有輸出參數(shù),只是一些Matlab命令和命令和函數(shù)的組合;函數(shù)的組合; 命令文件可以操作基本工作空間(命令文件可以操作基本工作空間(Base Workspace)的變量,)的變量,也可以生成新的變量。命令文件執(zhí)行結(jié)束后新變量將保存在基本也可以生成新的變量。命令文件執(zhí)行結(jié)束后新變量將保存在基本工作空間中,不會被自動清除;工作空間中,

15、不會被自動清除; 命令文件是用命令文件是用“.m”為擴展名的文件,只要命令文為擴展名的文件,只要命令文 件在搜索路徑上,在命令窗口鍵入文件名就可以件在搜索路徑上,在命令窗口鍵入文件名就可以 運行命令文件。運行命令文件。例例4.2.1:編寫命令文件求解小于:編寫命令文件求解小于1000且為且為2的整數(shù)次冪的整數(shù)次冪的正整數(shù)。的正整數(shù)。4.2 命令文件和函數(shù)文件命令文件和函數(shù)文件【說明】【說明】 M文件是一個文本文件,可以使用各種文本編輯器編輯和修改,也文件是一個文本文件,可以使用各種文本編輯器編輯和修改,也可以使用可以使用MATLAB的的M文件編輯器文件編輯器/調(diào)試器(調(diào)試器(Editor/De

16、bugger);); 在運行程序之前,一定要確定這個在運行程序之前,一定要確定這個M文件是否在文件是否在MATLAB的搜索路的搜索路徑中。若不在,可以選擇【徑中。若不在,可以選擇【 Path】菜單,在路徑設(shè)置對話框中,加】菜單,在路徑設(shè)置對話框中,加入該路徑到所有搜索路徑的最前端。一旦用【入該路徑到所有搜索路徑的最前端。一旦用【Set Path】菜單設(shè)置】菜單設(shè)置了搜索路徑后,了搜索路徑后,Matlab會自動保存這些路徑;會自動保存這些路徑; 在在MATLAB的命令窗口輸入的命令窗口輸入M文件名即可運行該命令文件;文件名即可運行該命令文件; M文件運行過程中產(chǎn)生的變量會駐留在基本工作空間文件運

17、行過程中產(chǎn)生的變量會駐留在基本工作空間 中,即使文件運行結(jié)束也不會被自動刪除,只有關(guān)閉中,即使文件運行結(jié)束也不會被自動刪除,只有關(guān)閉 了了MATLAB后基本工作空間才會被刪除。后基本工作空間才會被刪除。4.2 命令文件和函數(shù)文件命令文件和函數(shù)文件二、函數(shù)文件二、函數(shù)文件 函數(shù)文件的使用比命令文件更加靈活,能夠更好的實現(xiàn)復雜問題的功函數(shù)文件的使用比命令文件更加靈活,能夠更好的實現(xiàn)復雜問題的功能模塊劃分。函數(shù)文件如同一個能模塊劃分。函數(shù)文件如同一個“黑箱子黑箱子”,調(diào)用者僅僅需要把輸入,調(diào)用者僅僅需要把輸入變量傳遞給函數(shù),就會得到函數(shù)的輸出變量,即函數(shù)的運行結(jié)果。變量傳遞給函數(shù),就會得到函數(shù)的輸出

18、變量,即函數(shù)的運行結(jié)果。 對函數(shù)文件有如下的描述:對函數(shù)文件有如下的描述:函數(shù)文件要在第一行用函數(shù)文件要在第一行用function關(guān)鍵字來顯式的定義;關(guān)鍵字來顯式的定義;函數(shù)文件有輸入變量和輸出變量;函數(shù)文件有輸入變量和輸出變量;函數(shù)文件的名字和第一行所定義的函數(shù)名相同;函數(shù)文件的名字和第一行所定義的函數(shù)名相同;可以用比函數(shù)定義中數(shù)目少的輸入變量和輸出變量可以用比函數(shù)定義中數(shù)目少的輸入變量和輸出變量 來調(diào)用函數(shù);來調(diào)用函數(shù);函數(shù)文件內(nèi)部定義的變量屬于臨時變量,只有函數(shù)函數(shù)文件內(nèi)部定義的變量屬于臨時變量,只有函數(shù) 運行期間才被生成,函數(shù)運行結(jié)束后,這些臨時變運行期間才被生成,函數(shù)運行結(jié)束后,這些

19、臨時變 量會被量會被Matlab系統(tǒng)自動刪除。系統(tǒng)自動刪除。4.2 命令文件和函數(shù)文件命令文件和函數(shù)文件三、函數(shù)文件的組成三、函數(shù)文件的組成函數(shù)定義行函數(shù)定義行 函數(shù)函數(shù)M文件的第一行用關(guān)鍵字文件的第一行用關(guān)鍵字“function”把把M文件定義為一個文件定義為一個函數(shù),指定函數(shù)的名字,同時定義了函數(shù)的輸入變量和輸出變函數(shù),指定函數(shù)的名字,同時定義了函數(shù)的輸入變量和輸出變量。輸入變量的定義用圓括號(),如果有多個輸入變量則用量。輸入變量的定義用圓括號(),如果有多個輸入變量則用逗號分隔;輸出變量的定義用中括號逗號分隔;輸出變量的定義用中括號 ,如果有多個輸出變量,如果有多個輸出變量則用逗號分隔

20、。則用逗號分隔。 H1行行 所謂所謂H1行指幫助文本的第一行,它緊跟在定義行之行指幫助文本的第一行,它緊跟在定義行之 后并以后并以“%”符號開頭,用于概括說明函數(shù)的功能。符號開頭,用于概括說明函數(shù)的功能。 在命令窗口用在命令窗口用lookfor命令時將顯示函數(shù)的命令時將顯示函數(shù)的H1行。行。4.2 命令文件和函數(shù)文件命令文件和函數(shù)文件函數(shù)幫助文本函數(shù)幫助文本幫助文本指位于幫助文本指位于H1行之后函數(shù)體之前的說明文本,它同樣以行之后函數(shù)體之前的說明文本,它同樣以“%”符符號開頭,一般用來比較詳細地介紹函數(shù)的功能、用法以及函數(shù)的修號開頭,一般用來比較詳細地介紹函數(shù)的功能、用法以及函數(shù)的修改記錄。在

21、命令窗口用改記錄。在命令窗口用help命令時將顯示函數(shù)的命令時將顯示函數(shù)的H1行和所有幫助文行和所有幫助文本。本。函數(shù)體函數(shù)體是函數(shù)的主體部分,函數(shù)的功能是通過函數(shù)體實現(xiàn)的。函數(shù)體可以是函數(shù)的主體部分,函數(shù)的功能是通過函數(shù)體實現(xiàn)的。函數(shù)體可以包括所有的包括所有的Matlab合法命令、函數(shù)和流程控制語句。合法命令、函數(shù)和流程控制語句。例例4.2.2:編寫函數(shù)文件求:編寫函數(shù)文件求( )12.f nn 4.2 命令文件和函數(shù)文件命令文件和函數(shù)文件四、函數(shù)的輸入變量和輸出變量四、函數(shù)的輸入變量和輸出變量 1. 輸入變量和輸出變量的檢測輸入變量和輸出變量的檢測 檢測輸入變量和輸出變量的函數(shù),其格式和功

22、能如下:檢測輸入變量和輸出變量的函數(shù),其格式和功能如下: n = nargin用于函數(shù)內(nèi),返回實際輸入變量的個數(shù)用于函數(shù)內(nèi),返回實際輸入變量的個數(shù) n = nargin(fun)獲取獲取fun函數(shù)的聲明的輸入變量個數(shù)函數(shù)的聲明的輸入變量個數(shù) n = nargout用于函數(shù)體,返回實際輸出變量的個數(shù)用于函數(shù)體,返回實際輸出變量的個數(shù) n = nargout(fun)獲取獲取fun函數(shù)的聲明的輸出變量個數(shù)函數(shù)的聲明的輸出變量個數(shù) vname=inputname(n)用于函數(shù)內(nèi),返回第用于函數(shù)內(nèi),返回第n個輸入變量的實際個輸入變量的實際 調(diào)用變量名字調(diào)用變量名字 2. 數(shù)目可變的輸入變量和輸出變量數(shù)

23、目可變的輸入變量和輸出變量 Matlab支持輸入變量和輸出變量數(shù)目可變的函數(shù)。支持輸入變量和輸出變量數(shù)目可變的函數(shù)。 用戶可以使用用戶可以使用Matlab提供的兩個指令來自己編寫參提供的兩個指令來自己編寫參 數(shù)數(shù)目可變的函數(shù)。數(shù)數(shù)目可變的函數(shù)。 4.2 命令文件和函數(shù)文件命令文件和函數(shù)文件varargin數(shù)目可變的輸入變量列表數(shù)目可變的輸入變量列表varargout數(shù)目可變的輸出變量列表數(shù)目可變的輸出變量列表【說明】【說明】 編寫參數(shù)數(shù)目可變的函數(shù)時,函數(shù)定義行的編寫參數(shù)數(shù)目可變的函數(shù)時,函數(shù)定義行的“數(shù)目可變的變量數(shù)目可變的變量”要要放在放在“普通變量普通變量”之后;之后; varargin

24、的工作過程:的工作過程:varargin是一個細胞數(shù)組,里面放置的是是一個細胞數(shù)組,里面放置的是“數(shù)目可變的變量數(shù)目可變的變量”;函數(shù)被調(diào)用時,輸入變量的傳遞規(guī)則是:實際輸入變量依次逐個函數(shù)被調(diào)用時,輸入變量的傳遞規(guī)則是:實際輸入變量依次逐個傳遞傳遞 給函數(shù)定義的輸入變量列表中的給函數(shù)定義的輸入變量列表中的“普通輸入變量普通輸入變量”;然后把剩余的實際輸入變量依次傳遞給然后把剩余的實際輸入變量依次傳遞給varargin細胞細胞數(shù)組中的細胞;數(shù)組中的細胞;varargin細胞數(shù)組中的細胞作為一個細胞數(shù)組中的細胞作為一個“普通輸入變量普通輸入變量” 來使用。來使用。4.2 命令文件和函數(shù)文件命令文

25、件和函數(shù)文件例例4.2.3 :用參數(shù)可變的方法定義一個繪制圓環(huán)的函數(shù)。其中:用參數(shù)可變的方法定義一個繪制圓環(huán)的函數(shù)。其中第一個輸入變量為基圓半徑,是必選的參數(shù);第二第一個輸入變量為基圓半徑,是必選的參數(shù);第二個輸入變量為內(nèi)圓半徑,為可選參數(shù);還可以輸入個輸入變量為內(nèi)圓半徑,為可選參數(shù);還可以輸入可選的圖形屬性控制字符串。如果有輸出變量,則可選的圖形屬性控制字符串。如果有輸出變量,則不畫圖,只返回繪圖數(shù)據(jù);如果沒有輸出變量,則不畫圖,只返回繪圖數(shù)據(jù);如果沒有輸出變量,則繪制圖形。繪制圖形。 varargout的工作過程和的工作過程和varargin類似,只是其對應(yīng)的是函數(shù)的輸類似,只是其對應(yīng)的是

26、函數(shù)的輸出變量。出變量。4.2 命令文件和函數(shù)文件命令文件和函數(shù)文件五、有關(guān)工作空間五、有關(guān)工作空間 1. 工作空間工作空間 有了函數(shù)文件后,工組空間會變得復雜起來。有了函數(shù)文件后,工組空間會變得復雜起來。Matlab將工作空間分將工作空間分成成2類:類:基本工作空間基本工作空間基本工作空間是基本工作空間是Matlab啟動后自動創(chuàng)建的,只有關(guān)閉了啟動后自動創(chuàng)建的,只有關(guān)閉了Matlab后基后基本工作空間才會被刪除?;竟ぷ骺臻g內(nèi)部包括本工作空間才會被刪除。基本工作空間內(nèi)部包括Matlab建立的特殊建立的特殊變量(如變量(如pi、i、j、NaN等)和命令窗口執(zhí)行語句過程中生成的變量。等)和命令窗

27、口執(zhí)行語句過程中生成的變量。函數(shù)工作空間函數(shù)工作空間 函數(shù)工作空間是函數(shù)文件運行時自動創(chuàng)建的工作空間,函數(shù)工作空間是函數(shù)文件運行時自動創(chuàng)建的工作空間, 它是臨時的,當函數(shù)運行完畢后,會被系統(tǒng)自動撤銷。它是臨時的,當函數(shù)運行完畢后,會被系統(tǒng)自動撤銷。 其中保存了函數(shù)內(nèi)部定義或者運算生成的臨時變量,其中保存了函數(shù)內(nèi)部定義或者運算生成的臨時變量, 它們在函數(shù)執(zhí)行完成后就不存在了。它們在函數(shù)執(zhí)行完成后就不存在了。4.2 命令文件和函數(shù)文件命令文件和函數(shù)文件2. 局部變量和全局變量局部變量和全局變量局部變量局部變量 存在于函數(shù)工作空間的臨時變量(即函數(shù)內(nèi)部定義的變量)稱為局部存在于函數(shù)工作空間的臨時變量

28、(即函數(shù)內(nèi)部定義的變量)稱為局部變量。局部變量只能被定義它的函數(shù)使用。變量。局部變量只能被定義它的函數(shù)使用。 在函數(shù)的定義中,其輸入變量和輸出變量就是局部變量,即函數(shù)的輸在函數(shù)的定義中,其輸入變量和輸出變量就是局部變量,即函數(shù)的輸入變量和輸出變量只能在本函數(shù)內(nèi)部被使用。入變量和輸出變量只能在本函數(shù)內(nèi)部被使用。全局變量全局變量 通過通過global關(guān)鍵字可以定義全局變量。全局變量可以被所有工作空間關(guān)鍵字可以定義全局變量。全局變量可以被所有工作空間共享,即所有工作空間都可以訪問全局變量,但是前共享,即所有工作空間都可以訪問全局變量,但是前 提是使用之前要先在工作空間內(nèi)用提是使用之前要先在工作空間內(nèi)

29、用global關(guān)鍵字聲明關(guān)鍵字聲明 全局變量。建議在函數(shù)的開始處定義或聲明全局變量,全局變量。建議在函數(shù)的開始處定義或聲明全局變量, 全局變量的名字一般采用大寫字母命名。全局變量的名字一般采用大寫字母命名。 4.2 命令文件和函數(shù)文件命令文件和函數(shù)文件3. 跨工作空間的變量賦值跨工作空間的變量賦值 有些時候我們需要跨工作空間給變量賦值,有些時候我們需要跨工作空間給變量賦值,Matlab提供了相關(guān)的函數(shù)。提供了相關(guān)的函數(shù)。 格式:格式: assignin(ws, var, val) 【說明】【說明】 把當前工作空間的變量把當前工作空間的變量val賦值給賦值給ws工作空間的名為工作空間的名為var

30、的變量。的變量。 其中,其中,ws可以?。嚎梢匀。?base表示基本工作空間表示基本工作空間 caller表主調(diào)函數(shù)工作空間表主調(diào)函數(shù)工作空間六、子函數(shù)和私有函數(shù)六、子函數(shù)和私有函數(shù)如果一個項目比較復雜,就需要編寫大量的函數(shù)如果一個項目比較復雜,就需要編寫大量的函數(shù)文件,這些函數(shù)文件通常都是該工程中專用的,其他程序文件,這些函數(shù)文件通常都是該工程中專用的,其他程序很少會用到。我們應(yīng)該限制這些自編函數(shù)可以被調(diào)用的范很少會用到。我們應(yīng)該限制這些自編函數(shù)可以被調(diào)用的范圍,避免在圍,避免在Matlab基本工作空間中出現(xiàn)過多的標識符,盡基本工作空間中出現(xiàn)過多的標識符,盡量避免在一個工作空間內(nèi)出現(xiàn)同名函數(shù)

31、。為了限制函數(shù)的量避免在一個工作空間內(nèi)出現(xiàn)同名函數(shù)。為了限制函數(shù)的使用范圍,使用范圍,Matlab支持子函數(shù)和私有函數(shù)。支持子函數(shù)和私有函數(shù)。4.2 命令文件和函數(shù)文件命令文件和函數(shù)文件 1.子函數(shù)子函數(shù) Matlab允許一個函數(shù)文件內(nèi)定義多個函數(shù)。其中,第一個定義的函數(shù)稱允許一個函數(shù)文件內(nèi)定義多個函數(shù)。其中,第一個定義的函數(shù)稱為主函數(shù),其他的函數(shù)稱為子函數(shù)。為主函數(shù),其他的函數(shù)稱為子函數(shù)。關(guān)于主函數(shù)和子函數(shù)的描述如下:關(guān)于主函數(shù)和子函數(shù)的描述如下:每個文件的第一行定義的是主函數(shù);每個文件的第一行定義的是主函數(shù);只有主函數(shù)可以被其他程序調(diào)用;只有主函數(shù)可以被其他程序調(diào)用;函數(shù)文件的名字必須和主

32、函數(shù)相同;函數(shù)文件的名字必須和主函數(shù)相同;子函數(shù)只能被處在同一個文件中的主函數(shù)或者其他子子函數(shù)只能被處在同一個文件中的主函數(shù)或者其他子函數(shù)調(diào)用;函數(shù)調(diào)用;主函數(shù)和各個子函數(shù)的工組空間是彼此獨立的,即每主函數(shù)和各個子函數(shù)的工組空間是彼此獨立的,即每個函數(shù)擁有自己獨立的工作空間。個函數(shù)擁有自己獨立的工作空間。 4.2 命令文件和函數(shù)文件命令文件和函數(shù)文件2.私有函數(shù)私有函數(shù) 私有函數(shù)是在函數(shù)私有函數(shù)是在函數(shù)M文件所在目錄的文件所在目錄的private子目錄中的函數(shù)子目錄中的函數(shù)M文件,其性質(zhì)如下:文件,其性質(zhì)如下:私有函數(shù)只能被私有函數(shù)只能被private的直接父目錄中定義的的直接父目錄中定義的M

33、文件調(diào)用,文件調(diào)用, 其他目錄的其他目錄的M文件或者命令窗口無權(quán)調(diào)用私有函數(shù)。文件或者命令窗口無權(quán)調(diào)用私有函數(shù)。 私有函數(shù)的定義和構(gòu)成和普通函數(shù)相同。私有函數(shù)的定義和構(gòu)成和普通函數(shù)相同。例例4.2.4:編寫函數(shù)文件求:編寫函數(shù)文件求 1( )!1! 2! .!nkf nkn4.2 命令文件和函數(shù)文件命令文件和函數(shù)文件七、七、 M文件的執(zhí)行文件的執(zhí)行 當當Matlab遇到一個新的標識符遇到一個新的標識符corv時,它將按照下面步驟尋找這時,它將按照下面步驟尋找這個標識符。個標識符。 檢查檢查corv是否是一個變量名;是否是一個變量名; 檢查檢查corv是否是內(nèi)建函數(shù)名;是否是內(nèi)建函數(shù)名; 檢查檢

34、查corv是否是子函數(shù);是否是子函數(shù); 檢查檢查corv是否是私有函數(shù);是否是私有函數(shù); 檢查檢查corv是否是當前目錄中的文件;是否是當前目錄中的文件; 在在Set Path指定的路徑內(nèi)搜索指定的路徑內(nèi)搜索corv文件;文件; Matlab將使用最先找到的那個將使用最先找到的那個corv標識符。如果經(jīng)過標識符。如果經(jīng)過 上述步驟的搜索,也無法找到上述步驟的搜索,也無法找到corv標識符,則給出提示標識符,則給出提示 信息信息“? Undefined function or variable corv.”4.3 字符串的求值字符串的求值Matlab提供了字符串求值的函數(shù),利用這些函數(shù),可以用字

35、符串提供了字符串求值的函數(shù),利用這些函數(shù),可以用字符串構(gòu)造構(gòu)造Matlab的函數(shù)和命令,并運行這些字符串命令。的函數(shù)和命令,并運行這些字符串命令。一、一、eval y=eval(expression)計算字符串表達式計算字符串表達式expression a1, a2, . = eval(function(b1, b2, .) ) 計算函數(shù)調(diào)用的字符串表達式計算函數(shù)調(diào)用的字符串表達式【注意】【注意】eval的輸入變量只能是字符串的輸入變量只能是字符串例例4.3.1: 表達式字符串的計算表達式字符串的計算 例例4.3.2: eval和函數(shù)調(diào)用和函數(shù)調(diào)用4.3 字符串的求值字符串的求值二、二、 fe

36、val y1, y2, . = feval(function, x1, ., xn)【說明】【說明】function只能是函數(shù)名,不能是表達式字符串。只能是函數(shù)名,不能是表達式字符串。x1、x2等是調(diào)用函數(shù)等是調(diào)用函數(shù)function的輸入變量,即函數(shù)的自變量值。的輸入變量,即函數(shù)的自變量值。y1、y2等是函數(shù)的輸出變量,即函數(shù)的返回值。等是函數(shù)的輸出變量,即函數(shù)的返回值。例例4.3.3: feval的使用方法的使用方法 4.3 字符串的求值字符串的求值三、內(nèi)聯(lián)函數(shù)三、內(nèi)聯(lián)函數(shù) 用戶可以用用戶可以用M文件來建立函數(shù),函數(shù)的功能可以很復雜,函數(shù)的輸文件來建立函數(shù),函數(shù)的功能可以很復雜,函數(shù)的輸出

37、變量也可以有多個。對于簡單的數(shù)學表達式,用出變量也可以有多個。對于簡單的數(shù)學表達式,用M文件來建立函數(shù)就顯文件來建立函數(shù)就顯得不夠方便。得不夠方便。Matlab提供了內(nèi)聯(lián)函數(shù)的功能,內(nèi)聯(lián)函數(shù)可以將表達式轉(zhuǎn)提供了內(nèi)聯(lián)函數(shù)的功能,內(nèi)聯(lián)函數(shù)可以將表達式轉(zhuǎn)換為函數(shù)。內(nèi)聯(lián)函數(shù)是換為函數(shù)。內(nèi)聯(lián)函數(shù)是Matlab面向?qū)ο蟮囊粋€類,其類型名為面向?qū)ο蟮囊粋€類,其類型名為inline。1.內(nèi)聯(lián)函數(shù)的建立內(nèi)聯(lián)函數(shù)的建立 g = inline(expr)將串表達式將串表達式expr轉(zhuǎn)換為內(nèi)聯(lián)函數(shù)轉(zhuǎn)換為內(nèi)聯(lián)函數(shù) g = inline(expr, arg1, arg2,.) 將串表達式將串表達式expr轉(zhuǎn)化為以轉(zhuǎn)化為以

38、arg1、arg2等為自變量(輸?shù)葹樽宰兞浚ㄝ?入變量)的入變量)的 內(nèi)聯(lián)函數(shù)內(nèi)聯(lián)函數(shù)4.3 字符串的求值字符串的求值g = inline(expr,n)將串表達式將串表達式expr轉(zhuǎn)化為以自變量轉(zhuǎn)化為以自變量x,P1,P2,Pn為自變量的為自變量的 內(nèi)聯(lián)函數(shù)。其中內(nèi)聯(lián)函數(shù)。其中P必須大寫。必須大寫。例例4.3.4:建立內(nèi)聯(lián)函數(shù)表示數(shù)學函數(shù),并計算的值:建立內(nèi)聯(lián)函數(shù)表示數(shù)學函數(shù),并計算的值例例4.3.5:閱讀下列程序代碼,了解:閱讀下列程序代碼,了解inline的使用方法。的使用方法。4.3 字符串的求值字符串的求值2. 和內(nèi)聯(lián)函數(shù)有關(guān)的函數(shù)和內(nèi)聯(lián)函數(shù)有關(guān)的函數(shù)class(fun)%獲取內(nèi)聯(lián)函

39、數(shù)的數(shù)據(jù)類型獲取內(nèi)聯(lián)函數(shù)的數(shù)據(jù)類型char(fun)%獲取內(nèi)聯(lián)函數(shù)的計算公式字符串獲取內(nèi)聯(lián)函數(shù)的計算公式字符串a(chǎn)rgnames(fun)%獲取內(nèi)聯(lián)函數(shù)的輸入變量名字獲取內(nèi)聯(lián)函數(shù)的輸入變量名字vectorize(fun)%使內(nèi)聯(lián)函數(shù)具有數(shù)組運算規(guī)則使內(nèi)聯(lián)函數(shù)具有數(shù)組運算規(guī)則例例4.3.6:閱讀下列程序代碼,了解和內(nèi)聯(lián)函數(shù)相關(guān)的函數(shù)的使用方法。:閱讀下列程序代碼,了解和內(nèi)聯(lián)函數(shù)相關(guān)的函數(shù)的使用方法。4.4 程序性能優(yōu)化程序性能優(yōu)化 Matlab語言是解釋執(zhí)行的語言,其優(yōu)點是編程簡單、使用方便,語言是解釋執(zhí)行的語言,其優(yōu)點是編程簡單、使用方便,但其缺點就是程序執(zhí)行速度緩慢,執(zhí)行效率低下。對于復雜的程

40、序,但其缺點就是程序執(zhí)行速度緩慢,執(zhí)行效率低下。對于復雜的程序,程序員要考慮程序性能的優(yōu)化,讓應(yīng)用程序既能夠完成預(yù)期的功能,程序員要考慮程序性能的優(yōu)化,讓應(yīng)用程序既能夠完成預(yù)期的功能,又具有較快的運行速度和較高的執(zhí)行效率。又具有較快的運行速度和較高的執(zhí)行效率。一、源代碼級的優(yōu)化一、源代碼級的優(yōu)化 1. 循環(huán)的向量化循環(huán)的向量化 Matlab的運算功能是針對向量的,因此盡量少使用的運算功能是針對向量的,因此盡量少使用for循環(huán)和循環(huán)和wile循環(huán),用向量化的數(shù)組代替單個元素的循環(huán)運算,即循環(huán)的向量化。循環(huán),用向量化的數(shù)組代替單個元素的循環(huán)運算,即循環(huán)的向量化。循環(huán)的向量化不但能縮短源代碼的長度,

41、還能加快循環(huán)的向量化不但能縮短源代碼的長度,還能加快 程序的運行速度,提高程序的執(zhí)行效率。程序的運行速度,提高程序的執(zhí)行效率。例例4.4.1:求:求log(n)在在n從從1到到100之間的值,之間的值,n為整數(shù)。為整數(shù)。4.4 程序性能優(yōu)化程序性能優(yōu)化 2. 數(shù)組大小的預(yù)定義數(shù)組大小的預(yù)定義 Matlab在使用變量之前,不需要預(yù)先定義變量的名字和大小。如果在使用變量之前,不需要預(yù)先定義變量的名字和大小。如果變量的大小沒有被顯示的指定,則每當新賦值的元素下標超過變量變量的大小沒有被顯示的指定,則每當新賦值的元素下標超過變量的維數(shù)時,的維數(shù)時,Matlab就自動為變量擴充維數(shù),這大大降低了程序的運

42、就自動為變量擴充維數(shù),這大大降低了程序的運行效率。如果預(yù)先知道變量的維數(shù),就可以預(yù)先定義好變量尺寸,行效率。如果預(yù)先知道變量的維數(shù),就可以預(yù)先定義好變量尺寸,通常采用通常采用ones、zeros或者或者cell等函數(shù)預(yù)定義變量維數(shù)。等函數(shù)預(yù)定義變量維數(shù)。例例4.4.2:預(yù)定義變量維數(shù)編程:預(yù)定義變量維數(shù)編程4.4 程序性能優(yōu)化程序性能優(yōu)化3. 內(nèi)存管理內(nèi)存管理Matlab系統(tǒng)的運行會占用大量的內(nèi)存,在編寫系統(tǒng)的運行會占用大量的內(nèi)存,在編寫Matlab程序的時候程序的時候要給變量分派合理內(nèi)存,提高內(nèi)存使用效率,減少內(nèi)存碎片產(chǎn)生。要給變量分派合理內(nèi)存,提高內(nèi)存使用效率,減少內(nèi)存碎片產(chǎn)生。 沒有用的

43、變量最好用沒有用的變量最好用clear語句刪除語句刪除 盡量不產(chǎn)生大的臨時變量盡量不產(chǎn)生大的臨時變量 使用使用save和和load命令保存和讀取變量命令保存和讀取變量 盡量采用函數(shù)文件代替命令文件盡量采用函數(shù)文件代替命令文件4. 盡可能采用盡可能采用Matlab提供的函數(shù)提供的函數(shù)Matlab提供了大量的函數(shù)供用戶調(diào)用,這些函數(shù)涵蓋了提供了大量的函數(shù)供用戶調(diào)用,這些函數(shù)涵蓋了 大多數(shù)的常用操作。要盡可能使用大多數(shù)的常用操作。要盡可能使用Matlab提供的函數(shù),提供的函數(shù), 不要自己編寫具有和不要自己編寫具有和Matlab提供的函數(shù)具有相同功能提供的函數(shù)具有相同功能 的代碼,這樣無論從效率、可靠

44、性和開發(fā)時間上都是的代碼,這樣無論從效率、可靠性和開發(fā)時間上都是 得不償失的。得不償失的。4.4 程序性能優(yōu)化程序性能優(yōu)化二、程序加速器二、程序加速器MATLAB提供了提供了JIT(Just In Time)和加速器和加速器(Accelerator),用來加快,用來加快函數(shù)文件和命令文件的運行速度。函數(shù)文件和命令文件的運行速度。JIT和加速器可以通過和加速器可以通過MATLAB命命令開啟和關(guān)閉,默認情況下令開啟和關(guān)閉,默認情況下JIT和加速器都是啟動的。和加速器都是啟動的。 相關(guān)命令如下:相關(guān)命令如下:feature accel on開啟加速器開啟加速器feature accel off關(guān)閉加

45、速器關(guān)閉加速器feature JIT on開啟開啟JITfeature JIT off關(guān)閉關(guān)閉JIT4.5 面向?qū)ο缶幊堂嫦驅(qū)ο缶幊?Matlab支持面向?qū)ο蟮某绦蛟O(shè)計方法,本節(jié)簡單介紹支持面向?qū)ο蟮某绦蛟O(shè)計方法,本節(jié)簡單介紹Matlab中面向?qū)ο笾忻嫦驅(qū)ο缶幊痰幕靖拍詈蛻?yīng)用方法。編程的基本概念和應(yīng)用方法。一、一、 類和對象類和對象類(類(Class)是一個抽象的概念,它是具有相同特征和行為的對象的集合。是一個抽象的概念,它是具有相同特征和行為的對象的集合。對象(對象(Object)是類的具體實例(是類的具體實例(Instance),相當于類集合中的具體),相當于類集合中的具體元素。元素。

46、例如:例如:浮點數(shù)浮點數(shù)double是一個類,是一個類,a=0.3定義了浮點數(shù)變量定義了浮點數(shù)變量a,a就是浮點就是浮點 數(shù)類的一個對象。數(shù)類的一個對象。 Matlab內(nèi)建了內(nèi)建了5個類:個類: char、double、cell、struct、sparse、unit8 我們可以通過我們可以通過class函數(shù)來獲取變量的數(shù)據(jù)類型,函數(shù)來獲取變量的數(shù)據(jù)類型, 其調(diào)用格式如下:其調(diào)用格式如下:str=class(v)%返回變量返回變量v的數(shù)據(jù)類型名稱的數(shù)據(jù)類型名稱 4.5 面向?qū)ο缶幊堂嫦驅(qū)ο缶幊潭?、二?屬性和方法屬性和方法 類中封裝了該類對象共有的特征和行為。類中封裝了該類對象共有的特征和行為。

47、屬性(屬性(Property) 對象的特征稱為屬性,用數(shù)據(jù)來表示。對象的屬性通常用結(jié)構(gòu)體來對象的特征稱為屬性,用數(shù)據(jù)來表示。對象的屬性通常用結(jié)構(gòu)體來描述,因此我們訪問對象的屬性可以象訪問結(jié)構(gòu)體的一樣用成員運算符描述,因此我們訪問對象的屬性可以象訪問結(jié)構(gòu)體的一樣用成員運算符“.”來訪問,也可以用來訪問,也可以用get和和set函數(shù)來訪問對象的屬性。函數(shù)來訪問對象的屬性。get(h,PropertyName)返回對象返回對象h的的PropertyName屬性的值屬性的值set(H,PropertyName, Value,.) 賦值賦值H對象的對象的PropertyName屬性值為屬性值為Value

48、。方法(方法(Method) 對象的行為稱為方法,用函數(shù)來表示。某個類的方法對象的行為稱為方法,用函數(shù)來表示。某個類的方法只能操作該類的對象。只能操作該類的對象。4.5 面向?qū)ο缶幊堂嫦驅(qū)ο缶幊倘?、?gòu)造函數(shù)三、構(gòu)造函數(shù) Matlab中沒有類的聲明語句。定義對象要調(diào)用類的構(gòu)造函數(shù)中沒有類的聲明語句。定義對象要調(diào)用類的構(gòu)造函數(shù)(Constructor)。構(gòu)造函數(shù)的名字必須與類同名,比如)。構(gòu)造函數(shù)的名字必須與類同名,比如cell函數(shù)和函數(shù)和struct函數(shù)就分別是細胞數(shù)組類和結(jié)構(gòu)體數(shù)組類的構(gòu)造函數(shù)。函數(shù)就分別是細胞數(shù)組類和結(jié)構(gòu)體數(shù)組類的構(gòu)造函數(shù)。c=cell(3,3); %調(diào)用構(gòu)造函數(shù)調(diào)用構(gòu)造函數(shù)cell建立一個建立一個33的細胞數(shù)組的細胞數(shù)組 一些行為具有相同的定義,但實現(xiàn)方法不同,我們可以用同樣名稱的方法一些行為具有相同的定義,但實現(xiàn)方法不同,我們可以用同樣名稱的方法來描述這些操作,這種技術(shù)稱為重載。被重載的函數(shù)具有相同的名字,但是對來描述這些操作,這種技術(shù)稱為重載。被重載的函數(shù)具有相同的名字,但是對

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論