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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第四章第四章 M文件和程序設計文件和程序設計主要內容主要內容4.1 程序控制語句程序控制語句4.2 命令文件和函數文件命令文件和函數文件4.3 字符串的求值字符串的求值4.4 程序性能優(yōu)化程序性能優(yōu)化4.5 面向對象編程面向對象編程4.1 程序控制語句程序控制語句一、分支控制一、分支控制分支控制語句有分支控制語句有if和和switch兩種語句兩種語句if結構結構 if expressioncommands end【說明】【說明】當表達式當表達式expression的值為真,則執(zhí)行的值為真,則執(zhí)行commands語句語句組,否則跳過組,否則跳過commands語句組,執(zhí)行語句組,執(zhí)行end之后的

2、語句。之后的語句。4.1 程序控制語句程序控制語句if-else結構結構 if expression commands1 else commands2 end【說明】【說明】如果表達式如果表達式expression的值為真,的值為真,則執(zhí)行語句組則執(zhí)行語句組 commands1,然后跳過語句組然后跳過語句組commands2向下執(zhí)行;向下執(zhí)行;若表達式若表達式expression的值為假,的值為假,則跳過語句組則跳過語句組commands1,執(zhí)行語句組執(zhí)行語句組commands2。 4.1 程序控制語句程序控制語句if-elseif-else結構結構 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: 有分段函數有分段函數 341( )11sincos1xxxf xexxxx 計算并顯示函數值。計算并顯示函數值。編程輸入編程輸入x x的值,的值,switch-case結構結構 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表達式可以為標量或者字符串。對于標量形表達式可以為標量或者字符串。對于標量形式,用關系運算符式,用關系運算符“= =”比較,對于字符串形式,用函數比較,對于字符串形式,用函數strcmp比較。比較。case語句后的語句后的value_n值可以是標量、字符串,也可以是細胞數組。值可以是標量、字符串,也可以是細胞數組。如果是細胞數組,如

6、果是細胞數組,Matlab會把表達式會把表達式exp_const的值和的值和細胞數組中的每個元素比較,只要有一個元素和細胞數組中的每個元素比較,只要有一個元素和exp_const值相同,比較結果就為相等。值相同,比較結果就為相等。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數數組的一列,每取一列就執(zhí)行一次循環(huán)體,循環(huán)體組的一列,每取一列就執(zhí)行一

7、次循環(huán)體,循環(huán)體被執(zhí)行的次數為被執(zhí)行的次數為Array的列數。的列數。for循環(huán)一般用于循環(huán)一般用于循環(huán)次數已知的程序流程控制循環(huán)次數已知的程序流程控制 。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的值為假,結束循環(huán)。的值為假,結束循環(huán)。while循環(huán)

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

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

10、】【說明】 執(zhí)行語句組執(zhí)行語句組commands,當語句組,當語句組commands執(zhí)行執(zhí)行發(fā)生錯誤時,跳轉到錯誤處理語句組發(fā)生錯誤時,跳轉到錯誤處理語句組handles。(例(例4.1.3)4.1 程序控制語句程序控制語句四、其他程序流控制語句四、其他程序流控制語句返回指令返回指令 return強制結束函數或者命令的調用,將控制權交給主調函數強制結束函數或者命令的調用,將控制權交給主調函數或者命令窗口?;蛘呙畲翱凇3鲥e處理出錯處理 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)將用戶鍵入的內容賦給變量將用戶鍵入的內容賦給變量v,messages是是顯示信息顯示信息 v=input(message, s)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

45、速器關閉加速器feature JIT on開啟開啟JITfeature JIT off關閉關閉JIT4.5 面向對象編程面向對象編程 Matlab支持面向對象的程序設計方法,本節(jié)簡單介紹支持面向對象的程序設計方法,本節(jié)簡單介紹Matlab中面向對象中面向對象編程的基本概念和應用方法。編程的基本概念和應用方法。一、一、 類和對象類和對象類(類(Class)是一個抽象的概念,它是具有相同特征和行為的對象的集合。是一個抽象的概念,它是具有相同特征和行為的對象的集合。對象(對象(Object)是類的具體實例(是類的具體實例(Instance),相當于類集合中的具體),相當于類集合中的具體元素。元素。

46、例如:例如:浮點數浮點數double是一個類,是一個類,a=0.3定義了浮點數變量定義了浮點數變量a,a就是浮點就是浮點 數類的一個對象。數類的一個對象。 Matlab內建了內建了5個類:個類: char、double、cell、struct、sparse、unit8 我們可以通過我們可以通過class函數來獲取變量的數據類型,函數來獲取變量的數據類型, 其調用格式如下:其調用格式如下:str=class(v)%返回變量返回變量v的數據類型名稱的數據類型名稱 4.5 面向對象編程面向對象編程二、二、 屬性和方法屬性和方法 類中封裝了該類對象共有的特征和行為。類中封裝了該類對象共有的特征和行為。

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

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

溫馨提示

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

評論

0/150

提交評論