




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、MATLAB SDU1MATLAB SDU2 用戶如想靈活應用matlab去解決實際問題,充分調(diào)用matlab的科學技術資源,就需要編輯m文件 包含matlab語言代碼的文件稱為m文件,其擴展名為m。 編輯m文件可使用各種文本編輯器。MATLAB SDU3 指令驅動模式指令驅動模式 通常通常matlab以指令驅動模式工作,即在以指令驅動模式工作,即在matlab 窗口下當用戶輸入單行指令時,窗口下當用戶輸入單行指令時,matlab 立即處理這條指令,并顯示結果,立即處理這條指令,并顯示結果,這就是這就是matlab命令行方式。命令行方式。 命令行操作時,命令行操作時,matlab窗口只允許一次
2、窗口只允許一次執(zhí)行一行上的一個或幾個語句。執(zhí)行一行上的一個或幾個語句。MATLAB SDU4例如:x1=0:10 x1 = 0 1 2 3 4 5 6 7 8 9 10 x2=0:3:11x2 = 0 3 6 9x3=11.5:-3:0 x3 = 11.5000 8.5000 5.5000 2.5000MATLAB SDU5x1=0:10,x2=0:3:11,x3=11.5:-3:0 x1 = 0 1 2 3 4 5 6 7 8 9 10 x2 = 0 3 6 9x3 = 11.5000 8.5000 5.5000 2.5000 命令行方式程序可讀性差,而且不能存儲,命令行方式程序可讀性差,而
3、且不能存儲,對于對于處理復雜問題和大量數(shù)據(jù)時是不方便的處理復雜問題和大量數(shù)據(jù)時是不方便的,應編寫成能存儲的程序文件。應編寫成能存儲的程序文件。MATLAB SDU6m文件模式文件模式 將將matlab語句構成的程序存儲成以語句構成的程序存儲成以m為擴展為擴展名的文件,然后再執(zhí)行該程序文件,這種工名的文件,然后再執(zhí)行該程序文件,這種工作模式稱為程序文件模式。作模式稱為程序文件模式。 程序文件不能在指令窗口下建立,因為指令程序文件不能在指令窗口下建立,因為指令窗口只允許一次執(zhí)行一行上的一個或幾個語窗口只允許一次執(zhí)行一行上的一個或幾個語句句。MATLAB SDU7 m文件的類型是普通的文本文件,我們
4、可以文件的類型是普通的文本文件,我們可以使用系統(tǒng)認可的文本文件編輯器來建立使用系統(tǒng)認可的文本文件編輯器來建立m文文件。如各種件。如各種edit編輯器,編輯器,windows的記事本的記事本和和word等。等。具體的創(chuàng)建方法:具體的創(chuàng)建方法:v 在在matlab命令窗命令窗 口點擊口點擊file 菜單菜單 new m-fileMATLAB SDU8MATLAB SDU9MATLAB SDU10 將工作空間中的內(nèi)容存入文件。 *edit 用各種edit 編輯器編制m文件。 edit 用matlab自帶的編輯器編制m文件。 word 用word編輯m文件。 m文件編輯器的設定文件編輯器的設定 m文件
5、編輯器可自己設定,設定方法是matlab命令窗口 options 菜單下點擊 Edit Preference 選定m文件編輯器。MATLAB SDU11m文件編輯器缺省設置是文件編輯器缺省設置是 matlab editor還可設成:其他的還可設成:其他的Text Editor 從從“file” “preference” editor/debugger設置設置 注意:注意:所創(chuàng)建的所創(chuàng)建的m文件必須納入文件必須納入matlab搜索路搜索路 徑后,才能在徑后,才能在matlab命令窗口運行。命令窗口運行。 MATLAB SDU12 matlab搜索路徑的設置 matlab 缺省路徑是c:matla
6、bbin. 用pathtool路徑瀏覽器設定當前目錄 “file” - “set path” 方法設定當前目錄MATLAB SDU13v 數(shù)據(jù)文件數(shù)據(jù)文件 .mat mat文件是文件是matlab以標準二進制格式保存以標準二進制格式保存的數(shù)據(jù)文件,可將工作空間中有用的數(shù)據(jù)的數(shù)據(jù)文件,可將工作空間中有用的數(shù)據(jù)變量保存下來。變量保存下來。 mat文件的生成和調(diào)用是由函數(shù)文件的生成和調(diào)用是由函數(shù)save和和load完成的完成的。MATLAB SDU142. m文件文件 m文件的語法類似于文件的語法類似于c語言,但又有其自身特語言,但又有其自身特點。它只是一個簡單的點。它只是一個簡單的ASCII碼文本
7、文件,執(zhí)碼文本文件,執(zhí)行程序時逐行解釋運行程序,行程序時逐行解釋運行程序,matlab是解釋是解釋性的編程語言。性的編程語言。 m文件有兩類文件有兩類 獨立的獨立的m m文件文件 稱命令文件,腳本稱命令文件,腳本(script)script) 可調(diào)用可調(diào)用m m文件文件 稱函數(shù)文件稱函數(shù)文件 FunctionsFunctionsMATLAB SDU15命令文件命令文件 簡單的簡單的m文件文件 命令文件實際上是一串指令的集合,與在命令窗口逐行執(zhí)行文件中命令文件實際上是一串指令的集合,與在命令窗口逐行執(zhí)行文件中的所有指令,其結果是一樣的。沒有輸入輸出參數(shù)。的所有指令,其結果是一樣的。沒有輸入輸出參
8、數(shù)。 “腳本腳本”本身反映這樣一個事實:本身反映這樣一個事實:MATLAB只是按文件只是按文件所寫的指令執(zhí)行。所寫的指令執(zhí)行。 M腳本(命令)文件的構成較簡單,其腳本(命令)文件的構成較簡單,其特點特點是:是: 它只是一串按用戶意圖排列而成的(包括控制流向指令在內(nèi)的)它只是一串按用戶意圖排列而成的(包括控制流向指令在內(nèi)的)MATLAB指令集。指令集。 腳本文件運行后,所產(chǎn)生的所有變量都駐留在腳本文件運行后,所產(chǎn)生的所有變量都駐留在MATLAB基本工基本工作空間作空間(Base workspace)中。只要不使用中。只要不使用clear指令加以清除,指令加以清除,且且MATLAB指令窗不關閉,這
9、些變量將一直保存在基本工作空指令窗不關閉,這些變量將一直保存在基本工作空間中?;竟ぷ骺臻g隨間中?;竟ぷ骺臻g隨MATLAB的啟動而產(chǎn)生;只有關閉的啟動而產(chǎn)生;只有關閉MATLAB時,該基本空間才被刪除。時,該基本空間才被刪除。MATLAB SDU16 與腳本(命令)文件不同,函數(shù)文件與腳本(命令)文件不同,函數(shù)文件(Function file)猶如一個猶如一個“黑箱黑箱”。從外界只能看到傳給它。從外界只能看到傳給它的輸入量和送出來的計算結果,而內(nèi)部運作是藏的輸入量和送出來的計算結果,而內(nèi)部運作是藏而不見的。而不見的。MATLAB SDU17從形式上看,與腳本文件不同,函數(shù)文件的第一行總是以從
10、形式上看,與腳本文件不同,函數(shù)文件的第一行總是以“function”引導的引導的“函數(shù)申明行函數(shù)申明行”(Function declaration line)。該行還羅列出函。該行還羅列出函數(shù)與外界聯(lián)系的全部數(shù)與外界聯(lián)系的全部“標稱標稱”輸入輸出宗量。但對輸入輸出宗量。但對“輸入輸出宗量輸入輸出宗量”的標稱數(shù)目并沒有限制,即可以完全沒有輸入輸出宗量,也可以是任的標稱數(shù)目并沒有限制,即可以完全沒有輸入輸出宗量,也可以是任意數(shù)目。意數(shù)目。MATLAB允許使用比允許使用比“標稱數(shù)目標稱數(shù)目”較少的輸入輸出宗量,實現(xiàn)對函數(shù)較少的輸入輸出宗量,實現(xiàn)對函數(shù)的調(diào)用。的調(diào)用。從運行上看,與腳本文件運行不同,每
11、當函數(shù)文件運行,從運行上看,與腳本文件運行不同,每當函數(shù)文件運行,MATLAB就就會專門為它開辟一個臨時工作空間,稱之謂會專門為它開辟一個臨時工作空間,稱之謂函數(shù)工作空間函數(shù)工作空間(Function workspace)。所有中間變量都存放在函數(shù)工作空間中。當執(zhí)行完文件。所有中間變量都存放在函數(shù)工作空間中。當執(zhí)行完文件最后一條指令或遇到最后一條指令或遇到return時,就結束該函數(shù)文件的運行,同時該臨時,就結束該函數(shù)文件的運行,同時該臨時函數(shù)空間及其所有的中間變量就立即被清除。時函數(shù)空間及其所有的中間變量就立即被清除。函數(shù)空間隨具體函數(shù)空間隨具體M函數(shù)文件的被調(diào)用而產(chǎn)生,隨調(diào)用結束而刪除。函
12、函數(shù)文件的被調(diào)用而產(chǎn)生,隨調(diào)用結束而刪除。函數(shù)空間是數(shù)空間是相對獨立的相對獨立的、臨時的臨時的。在。在MATLAB整個運行期間,可以產(chǎn)生整個運行期間,可以產(chǎn)生任意多個臨時函數(shù)空間。任意多個臨時函數(shù)空間。假如在函數(shù)文件中,發(fā)生對某腳本文件的調(diào)用,那么該腳本文件運行假如在函數(shù)文件中,發(fā)生對某腳本文件的調(diào)用,那么該腳本文件運行產(chǎn)生的所有變量都存放于該函數(shù)空間之中,而不是存放在基本空間。產(chǎn)生的所有變量都存放于該函數(shù)空間之中,而不是存放在基本空間。MATLAB SDU18函數(shù)函數(shù)m文件的格式:文件的格式: function 返回變量返回變量=函數(shù)名(輸入變量)函數(shù)名(輸入變量) 注釋說明語句段注釋說明語
13、句段 程序語句段程序語句段特定規(guī)則:特定規(guī)則:v 函數(shù)函數(shù)m文件第一行必須以單詞文件第一行必須以單詞function作為引作為引導詞,必須遵循如下形式:導詞,必須遵循如下形式: function =()v m文件的文件名必須是文件的文件名必須是 .m。1. 程序中的變量均為局部變量,不保存在工作程序中的變量均為局部變量,不保存在工作空間中。其變量只在函數(shù)運行期間有效。空間中。其變量只在函數(shù)運行期間有效。MATLAB SDU19function sa = circle(r,s)%CIRCLEplot a circle of radii r in the line specified by s.%
14、 r指定半徑的數(shù)值指定半徑的數(shù)值% s指定線色的字符串指定線色的字符串% sa圓面積圓面積% circle(r)利用藍實線畫半徑為利用藍實線畫半徑為 r 的圓周線的圓周線.% circle(r,s)利用串利用串 s 指定的線色畫半徑為指定的線色畫半徑為 r 的圓周線的圓周線.% sa=circle(r)計算圓面積,并畫半徑為計算圓面積,并畫半徑為 r 的藍色圓面的藍色圓面.% sa=circle(r,s)計算圓面積,并畫半徑為計算圓面積,并畫半徑為 r 的的 s 色圓面色圓面.% 編寫于編寫于2001年年4月月7日,修改于日,修改于2002年年8月月27日。日。if nargin2 error
15、(輸入宗量太多。輸入宗量太多。);end;if nargin=1 s=b;end;MATLAB SDU20 位于函數(shù)文件的首行,以位于函數(shù)文件的首行,以MATLAB關鍵字關鍵字function開頭,函數(shù)名以及函數(shù)的輸入輸出宗開頭,函數(shù)名以及函數(shù)的輸入輸出宗量都在這一行定義。量都在這一行定義。MATLAB SDU21 緊隨函數(shù)申明行之后以緊隨函數(shù)申明行之后以%開頭的第一注釋行。開頭的第一注釋行。按按MATLAB自身文件的規(guī)則,自身文件的規(guī)則,H1行包含:大行包含:大寫體的函數(shù)文件名;運用關鍵詞簡要描述的寫體的函數(shù)文件名;運用關鍵詞簡要描述的函數(shù)功能。該函數(shù)功能。該H1行供行供lookfor關鍵詞
16、查詢和關鍵詞查詢和help在線幫助使用。在線幫助使用。MATLAB SDU22 H1行及其之后的連續(xù)以行及其之后的連續(xù)以%開頭的所有注釋行開頭的所有注釋行構成整個在線幫助文本。它通常包括:函數(shù)構成整個在線幫助文本。它通常包括:函數(shù)輸入輸出宗量的含義,調(diào)用格式說明。輸入輸出宗量的含義,調(diào)用格式說明。MATLAB SDU23 與在線幫助文本區(qū)相隔一個空行,也以與在線幫助文本區(qū)相隔一個空行,也以%開頭,開頭,標志編寫及修改該標志編寫及修改該M文件的作者和日期、版本文件的作者和日期、版本記錄。它用于軟件檔案管理。記錄。它用于軟件檔案管理。MATLAB SDU24 為清晰起見,它與前面的注釋行以空行相隔
17、。為清晰起見,它與前面的注釋行以空行相隔。這部分內(nèi)容由實現(xiàn)該這部分內(nèi)容由實現(xiàn)該M函數(shù)文件功能的函數(shù)文件功能的MATLAB指令組成。它接收輸入宗量,進行指令組成。它接收輸入宗量,進行程序流控制,得到輸出宗量。其中為閱讀、程序流控制,得到輸出宗量。其中為閱讀、理解方便,也配置適當?shù)目招泻妥⑨?。若僅理解方便,也配置適當?shù)目招泻妥⑨?。若僅從運算角度看,惟有函數(shù)申明行和函數(shù)體兩從運算角度看,惟有函數(shù)申明行和函數(shù)體兩部分是構成部分是構成M函數(shù)文件所必不可少的。函數(shù)文件所必不可少的。MATLAB SDU25function r = rank(A,tol)%RANK Matrix rank.% RANK(A)
18、 provides an estimate of the number of linearly% independent rows or columns of a matrix A.% RANK(A,tol) is the number of singular values of A% that are larger than tol.% RANK(A) uses the default tol = max(size(A) * norm(A) * eps.% Class support for input A:% float: double, single% Copyright 1984-20
19、04 The MathWorks, Inc. % $Revision: $ $Date: 2004/04/10 23:30:08 $s = svd(A);if nargin=1 tol = max(size(A) * eps(max(s);endr = sum(s tol);.程序部分MATLAB SDU26matlab內(nèi)置函數(shù)文件內(nèi)置函數(shù)文件 matlab自定義的函數(shù)文件稱內(nèi)置函數(shù)文件自定義的函數(shù)文件稱內(nèi)置函數(shù)文件 調(diào)用內(nèi)置函數(shù)的方法:使用函數(shù)名并給出相應的入調(diào)用內(nèi)置函數(shù)的方法:使用函數(shù)名并給出相應的入口、出口參數(shù)即可???、出口參數(shù)即可。 例如:sin.m函數(shù) 調(diào)用格式:y
20、=sin(2*x) 實際應用中: x=0:2*pi/180:2*pi; y=sin(2*x) plot(x,y)01234567-1-0.8-0.6-0.4-0.60.81M 函數(shù)文件分兩類:內(nèi)置和自定義函數(shù)文件分兩類:內(nèi)置和自定義MATLAB SDU27又如又如 sqrt(x) 求求x的平方根的平方根 abs(x) 求求x的絕對值的絕對值 det(a) 求行列式的值求行列式的值 等等。等等。matlab擁有大量的內(nèi)置數(shù)學函數(shù),供我們在擁有大量的內(nèi)置數(shù)學函數(shù),供我們在數(shù)值運算和符號運算中調(diào)用。數(shù)值運算和符號運算中調(diào)用。MATLAB SDU28II 函數(shù)函數(shù)m文件文件 需要輸
21、入變量,返回輸出變量需要輸入變量,返回輸出變量 matlab用戶可以根據(jù)需要編輯自己的m文件,它們可以像庫函數(shù)一樣方便的調(diào)用,從而極大地擴展了matlab 的能力。 對于某一類特殊問題,如創(chuàng)建了許多m函數(shù)文件,則可形成新的工具箱。這種用matlab語言創(chuàng)建定義新的matlab函數(shù)的功能,正體現(xiàn)了matlab語言強大的擴展功能。MATLAB SDU29 I 函數(shù)句柄 函數(shù)句柄并不是伴隨函數(shù)文件而自動形成的文件函數(shù)句柄并不是伴隨函數(shù)文件而自動形成的文件“屬性屬性”,是必須通過專門的定義才會生成的。是必須通過專門的定義才會生成的。為一個為一個函數(shù)定義句柄的方法函數(shù)定義句柄的方法有兩種:有兩種: 利用
22、利用符號;符號;* 利用轉換函數(shù)利用轉換函數(shù)str2func。對函數(shù)句柄的內(nèi)涵觀察需借助專門指令對函數(shù)句柄的內(nèi)涵觀察需借助專門指令Functions實現(xiàn)。實現(xiàn)。例:為例:為MATLAB的的“內(nèi)建內(nèi)建”函數(shù)創(chuàng)建函數(shù)句柄,并觀察其函數(shù)創(chuàng)建函數(shù)句柄,并觀察其內(nèi)涵。內(nèi)涵。hsin=sin; %(1) 創(chuàng)建創(chuàng)建class(hsin) %(2) 類型判別類型判別CC=functions(hsin) %(3) 借助指令借助指令function觀察內(nèi)涵觀察內(nèi)涵MATLAB SDU30函數(shù)句柄是函數(shù)句柄是matlabmatlab特有的語言結構,其優(yōu)點:特有的語言結構,其優(yōu)點: 方便地實現(xiàn)函數(shù)間互相調(diào)用方便地實現(xiàn)
23、函數(shù)間互相調(diào)用 兼容函數(shù)加載的所有方式兼容函數(shù)加載的所有方式 拓寬子函數(shù)包括局部函數(shù)的使用范圍拓寬子函數(shù)包括局部函數(shù)的使用范圍 提高函數(shù)調(diào)用的可靠性提高函數(shù)調(diào)用的可靠性 減少程序設計中的冗余減少程序設計中的冗余 提高重復執(zhí)行的效率提高重復執(zhí)行的效率 數(shù)組、結構數(shù)組、元胞型數(shù)組結合定義數(shù)據(jù)數(shù)組、結構數(shù)組、元胞型數(shù)組結合定義數(shù)據(jù)MATLAB SDU31 根據(jù)內(nèi)置函數(shù)創(chuàng)建函數(shù)句柄根據(jù)內(nèi)置函數(shù)創(chuàng)建函數(shù)句柄 FUNHANDLE = FUNCTION_NAME 匿名函數(shù)創(chuàng)建函數(shù)句柄匿名函數(shù)創(chuàng)建函數(shù)句柄 FUNHANDLE = (ARGLIST)EXPRESSION 如果函數(shù)句柄不含任何參數(shù),如果函數(shù)句柄不
24、含任何參數(shù),后列表必須用空括號表后列表必須用空括號表示,調(diào)用也必須使用空括號示,調(diào)用也必須使用空括號 參閱help function_handle MATLAB SDU32%本例通過本例通過sin函數(shù)及其句柄演示若干基本用法。函數(shù)及其句柄演示若干基本用法。%(1)函數(shù)句柄的創(chuàng)建)函數(shù)句柄的創(chuàng)建fhandle=str2func(sin);%(2)函數(shù)句柄在)函數(shù)句柄在sin(pi/4)“數(shù)值計算數(shù)值計算”中的情況中的情況ys=sin(pi/4)%函數(shù)直接調(diào)用函數(shù)直接調(diào)用yfold=feval(sin,pi/4)%feval指令的指令的“老式老式”調(diào)調(diào)yfnew=feval(fhandle,pi/
25、4) %feval指令的指令的“新式新式”調(diào)用調(diào)用%(3)函數(shù)句柄在)函數(shù)句柄在sin(pi/4)“符號計算符號計算”中的情況中的情況Alpha=sym(pi/4);%定義符號常數(shù)定義符號常數(shù)yss=sin(Alpha)%函數(shù)直接調(diào)用函數(shù)直接調(diào)用yfold=feval(sin,Alpha) %feval指令的指令的“老式老式”調(diào)用調(diào)用ynews=feval(fhandle,Alpha) %feval指令的指令的“新式新式”調(diào)用調(diào)用%(4)函數(shù)句柄在泛函指令中的用法:在)函數(shù)句柄在泛函指令中的用法:在0,2*pi間求間求sin函數(shù)的函數(shù)的極小值。極小值。xold=fminbnd(sin,0,2*
26、pi) %泛函指令的泛函指令的“老式老式”調(diào)用調(diào)用xnew=fminbnd(fhandle,0,2*pi) %泛函指令的泛函指令的“新式新式”調(diào)用調(diào)用MATLAB SDU33 II II 主函數(shù)和子函數(shù)主函數(shù)和子函數(shù) 多個函數(shù)代碼,第一個是主函數(shù),其多個函數(shù)代碼,第一個是主函數(shù),其它是子函數(shù);主函數(shù)可外部調(diào)用,子函數(shù)它是子函數(shù);主函數(shù)可外部調(diào)用,子函數(shù)不行;多個子函數(shù)排列次序可改變不行;多個子函數(shù)排列次序可改變MATLAB SDU34 每個子函數(shù)的第一行是其自己的函數(shù)申明行。每個子函數(shù)的第一行是其自己的函數(shù)申明行。 在在M函數(shù)文件內(nèi),主函數(shù)的位置不可改變,但子函數(shù)的函數(shù)文件內(nèi),主函數(shù)的位置不可
27、改變,但子函數(shù)的排列次序可任意改變。排列次序可任意改變。 子函數(shù)只能被處于同一文件的主函數(shù)或其他子函數(shù)調(diào)用。子函數(shù)只能被處于同一文件的主函數(shù)或其他子函數(shù)調(diào)用。 在在M函數(shù)文件中,任何指令通過函數(shù)文件中,任何指令通過“名字名字”對函數(shù)進行調(diào)對函數(shù)進行調(diào)用時,子函數(shù)的優(yōu)先級僅次于內(nèi)裝函數(shù)。用時,子函數(shù)的優(yōu)先級僅次于內(nèi)裝函數(shù)。 同一文件的主函數(shù)、子函數(shù)的工作空間都是彼此獨立的。同一文件的主函數(shù)、子函數(shù)的工作空間都是彼此獨立的。各函數(shù)間的信息,或通過輸入輸出宗量傳遞,或通過全各函數(shù)間的信息,或通過輸入輸出宗量傳遞,或通過全局變量傳遞,或通過跨空間指令傳遞。局變量傳遞,或通過跨空間指令傳遞。 help,
28、 lookfor等幫助指令都不能提供關于子函數(shù)的任何等幫助指令都不能提供關于子函數(shù)的任何幫助信息。幫助信息。(需要通過主函數(shù)需要通過主函數(shù)) 子函數(shù)的算例子函數(shù)的算例P119 例例43。MATLAB SDU35 所謂所謂私用(局部)函數(shù)私用(局部)函數(shù),是指位于,是指位于private目錄目錄上的上的M文件函數(shù)。文件函數(shù)。 私用(局部)函數(shù)的性質:私用(局部)函數(shù)的性質: 私用(局部)函數(shù)的構造與普通私用(局部)函數(shù)的構造與普通M函數(shù)完全相同。函數(shù)完全相同。 私用(局部)函數(shù)的只能被私用(局部)函數(shù)的只能被private目錄的直接父目目錄的直接父目錄上的錄上的M函數(shù)文件所調(diào)用。它不能被其他目錄
29、上的任函數(shù)文件所調(diào)用。它不能被其他目錄上的任何何M函數(shù)、函數(shù)、M腳本文件或腳本文件或MATLAB指令窗中的命令所指令窗中的命令所調(diào)用,也不能被直接父目錄上的調(diào)用,也不能被直接父目錄上的M腳本文件調(diào)用。腳本文件調(diào)用。 M文件中,任何指令通過文件中,任何指令通過“名字名字”對函數(shù)進行調(diào)用時,對函數(shù)進行調(diào)用時,私用(局部)函數(shù)的優(yōu)先級雖低于內(nèi)裝函數(shù)和子函數(shù),私用(局部)函數(shù)的優(yōu)先級雖低于內(nèi)裝函數(shù)和子函數(shù),但高與其他任何目錄上的函數(shù)。但高與其他任何目錄上的函數(shù)。 help,lookfor等指令都不能提供關于私用等指令都不能提供關于私用(局部)(局部)函數(shù)的任何函數(shù)的任何幫助信息(必須通過幫助信息(必須
30、通過private父目錄)。父目錄)。MATLAB SDU36 任一個任一個MATLAB函數(shù)體內(nèi)定義函數(shù),稱之函數(shù)體內(nèi)定義函數(shù),稱之為外部函數(shù)的嵌套函數(shù)(舊版本不支持)為外部函數(shù)的嵌套函數(shù)(舊版本不支持) 需用需用end結束結束 相互間的調(diào)用和工作空間的訪問相互間的調(diào)用和工作空間的訪問 例子例子 P122-P125MATLAB SDU37 局部(局部(Local)變量)變量 它存在于函數(shù)空間內(nèi)部的中間變量,產(chǎn)生于該函數(shù)的運行過程它存在于函數(shù)空間內(nèi)部的中間變量,產(chǎn)生于該函數(shù)的運行過程中,其影響范圍也僅限于該函數(shù)本身。中,其影響范圍也僅限于該函數(shù)本身。 全局(全局(Global)變量)變量 通過通
31、過global指令,指令,MATLAB也允許幾個不同的函數(shù)空間以及基也允許幾個不同的函數(shù)空間以及基本空間共享一個變量。這種被共享的變量稱為全局變量。每個本空間共享一個變量。這種被共享的變量稱為全局變量。每個希望共享全局變量的函數(shù)或希望共享全局變量的函數(shù)或MATLAB基本工作空間,必須逐基本工作空間,必須逐個用個用global對具體變量加以專門定義。沒采用對具體變量加以專門定義。沒采用global定義的函定義的函數(shù)或基本空間,將無權享用全局變量。數(shù)或基本空間,將無權享用全局變量。 如果某個函數(shù)的運作使全局變量的內(nèi)容發(fā)生了變化,那么其他如果某個函數(shù)的運作使全局變量的內(nèi)容發(fā)生了變化,那么其他函數(shù)空間
32、以及基本工作空間中的同名變量也就隨之變化。函數(shù)空間以及基本工作空間中的同名變量也就隨之變化。 除非與全局變量聯(lián)系的所有工作空間都被刪除,否則全局變量除非與全局變量聯(lián)系的所有工作空間都被刪除,否則全局變量依然存在。依然存在。例:例:p125 例例4-5MATLAB SDU38 for循環(huán)結構循環(huán)結構 while循環(huán)結構循環(huán)結構 if-else-end分支結構分支結構 switch-case結構結構 try-catch結構結構 控制程序流的其它常用指令控制程序流的其它常用指令 MATLAB SDU39for x=array(commands)end For循環(huán)的結構以及含義和其他高級語言的結構循環(huán)
33、的結構以及含義和其他高級語言的結構和含義基本一致。和含義基本一致。 一個簡單的一個簡單的for循環(huán)示例。循環(huán)示例。 和其他語言一樣和其他語言一樣for循環(huán)可以有多重循環(huán)。循環(huán)可以有多重循環(huán)。MATLAB SDU40例:利用for循環(huán)求1!+2!+3!+ +5!的值 sum=0; for i=1:5 pdr=1; for k=1:i pdr=pdr*k; end sum=sum+pdr; endsum = 153MATLAB SDU41while expression(commands)end 與與for循環(huán)設置固定循環(huán)次數(shù)來執(zhí)行循環(huán)體相比循環(huán)設置固定循環(huán)次數(shù)來執(zhí)行循環(huán)體相比較,較,MATLAB
34、中的中的while循環(huán)是應用邏輯表達式循環(huán)是應用邏輯表達式來設置與判斷是否執(zhí)行循環(huán)體,循環(huán)次數(shù)依邏來設置與判斷是否執(zhí)行循環(huán)體,循環(huán)次數(shù)依邏輯判斷條件來決定,循環(huán)次數(shù)是不固定的。輯判斷條件來決定,循環(huán)次數(shù)是不固定的。 例:例:Fibonacci數(shù)組的元素滿足數(shù)組的元素滿足Fibonacci規(guī)則:規(guī)則:a k+2=ak+ak+1,(k=1,2,);且且a1=a2=1。現(xiàn)要求該?,F(xiàn)要求該數(shù)組中第一個大于數(shù)組中第一個大于10000的元素。的元素。MATLAB SDU42 a(1)=1;a(2)=1;i=2; while a(i)8 sums=number*0.95*cost;end,sums%兩個分支
35、結構x=input(x=);if x=5000 sum=15*n;else if 5000n&n=2500 %&:為邏輯與為邏輯與 sum=16*n;else if 2500n&n=1000 sum=17*n;else if 1000n&n=500 sum=18*n;else if 500n&n=250 sum=19*n; else if 250n&n=100 sum=20*n; else if 100n&n=50 sum=22*n; else if 50n&n=10 sum=24*n else sum=28*nend;end;e
36、nd;end;end;end;end;end %請注意請注意end的個數(shù)的個數(shù)disp(購買蘋果的件數(shù)購買蘋果的件數(shù));n,disp(金額金額);sum,disp(元元);MATLAB SDU48switch ex case test1 (commands1)case test2 (commands2)case testk (commandsk)otherwise (commands)end 例:學生成績管理,用來演示例:學生成績管理,用來演示switch結構的應用。結構的應用。MATLAB SDU49%劃分區(qū)域:滿分劃分區(qū)域:滿分(100),優(yōu)秀,優(yōu)秀(90-99),良好,良好(80-89)
37、,及格,及格(60-79),不及格,不及格(10000 a(i), break; %跳出所在的一級循環(huán)。跳出所在的一級循環(huán)。 end; end, i MATLAB SDU54 通常運行一個通常運行一個M文件時,文件中的命令不在屏幕文件時,文件中的命令不在屏幕上顯示出來。上顯示出來。 如果如果M文件被執(zhí)行之前,首先在文件被執(zhí)行之前,首先在MATLAB命令窗命令窗中輸入中輸入echo命令并予以執(zhí)行,然后再運行命令并予以執(zhí)行,然后再運行M文文件,則件,則M文件中的程序將在文件中的程序將在MATLAB命令窗中顯命令窗中顯示出來,但影響程序的執(zhí)行速度。示出來,但影響程序的執(zhí)行速度。 若要清除若要清除ec
38、ho命令的影響,在命令的影響,在MATLAB命令窗命令窗中鍵入中鍵入“echo off”并回車即可。并回車即可。MATLAB SDU55 Input( )語句用在語句用在M文件中,執(zhí)行到文件中,執(zhí)行到input( )命令時,命令時,MATLAB暫停程序的執(zhí)行,等待暫停程序的執(zhí)行,等待用戶用鍵盤賦值給用戶用鍵盤賦值給input( )指定的變量。指定的變量。 Input( )語句還可用于等待用戶輸入語句還可用于等待用戶輸入MATLAB表達式和字符串,跟其他語句配表達式和字符串,跟其他語句配合,可以實現(xiàn)合,可以實現(xiàn)“菜單菜單”的功能。不過的功能。不過MATLAB中有專用的菜單設置命令,一般中有專用的
39、菜單設置命令,一般并不使用并不使用input( )來建立。來建立。MATLAB SDU56 類似于類似于input( )但功能更強的但功能更強的keyboard命令是命令是等待鍵盤輸入內(nèi)容,并把鍵盤輸入的內(nèi)容作為等待鍵盤輸入內(nèi)容,并把鍵盤輸入的內(nèi)容作為一個一個M文件來調(diào)用。文件來調(diào)用。 例如,建立一個例如,建立一個M文件文件us.m:x=0:0.01*pi:2*pi;keyboard 執(zhí)行執(zhí)行us.m,計算機返回一個提示符:,計算機返回一個提示符:k 此時,可以輸入一個函數(shù),但要注意這個函數(shù)此時,可以輸入一個函數(shù),但要注意這個函數(shù)自變量和因變量的對應關系。自變量和因變量的對應關系。 retur
40、n命令返回正常狀態(tài),表示增加輸入的文命令返回正常狀態(tài),表示增加輸入的文本內(nèi)容輸入完畢,這一條命令是必須的。本內(nèi)容輸入完畢,這一條命令是必須的。MATLAB SDU57指令及使用格式指令及使用格式使用說明使用說明v=input(message)v=input(message,s)該指令執(zhí)行時,該指令執(zhí)行時,“控制權控制權”交給鍵盤;待輸入結束,按下交給鍵盤;待輸入結束,按下Enter鍵,鍵,“控制權控制權”交還交還MATLAB。message是提示用的是提示用的字符串。第一種格式用于鍵入數(shù)值、字符串、元胞數(shù)組等數(shù)字符串。第一種格式用于鍵入數(shù)值、字符串、元胞數(shù)組等數(shù)據(jù);第二種格式,不管鍵入什么,總
41、是以字符串形式賦給變據(jù);第二種格式,不管鍵入什么,總是以字符串形式賦給變量量vkeyboard遇到遇到keyboard時,將時,將“控制權控制權”交給鍵盤,用戶可從鍵盤輸交給鍵盤,用戶可從鍵盤輸入各種入各種MATLAB指令。僅當用戶輸入指令。僅當用戶輸入return指令后,指令后,“控制控制權權”才交還給程序。它與才交還給程序。它與input的區(qū)別是:它允許輸入任意多的區(qū)別是:它允許輸入任意多個個MATLAB指令,而指令,而input只能輸入賦給變量的值只能輸入賦給變量的值breakbreak指令可導致包含該指令的指令可導致包含該指令的while、for環(huán)終止;也可在環(huán)終止;也可在if-end
42、,switch-case,try-catch中導致中斷中導致中斷continue跳過位于其后的循環(huán)中的其他指令,執(zhí)行循環(huán)的下一個迭代跳過位于其后的循環(huán)中的其他指令,執(zhí)行循環(huán)的下一個迭代pausepause(n)第一種格式使程序暫停執(zhí)行,等待用戶按任意鍵繼續(xù);第二第一種格式使程序暫停執(zhí)行,等待用戶按任意鍵繼續(xù);第二種格式使程序暫停種格式使程序暫停n秒后,再繼續(xù)執(zhí)行秒后,再繼續(xù)執(zhí)行MATLAB SDU58指令及使用格式指令及使用格式使用說明使用說明return結束結束return指令所在函數(shù)的執(zhí)行,而把控制轉至主調(diào)函數(shù)指令所在函數(shù)的執(zhí)行,而把控制轉至主調(diào)函數(shù)或指令窗。否則,只有待整個被調(diào)函數(shù)執(zhí)行完
43、后,才會轉或指令窗。否則,只有待整個被調(diào)函數(shù)執(zhí)行完后,才會轉出出error(message)顯示出錯信息顯示出錯信息message,終止程序,終止程序lasterr顯示最新出錯原因,并終止程序顯示最新出錯原因,并終止程序lastwarm顯示顯示MATLAB自動給出的最新警告程序繼續(xù)運行自動給出的最新警告程序繼續(xù)運行warning(message)顯示警告信息顯示警告信息message,程序繼續(xù)運行,程序繼續(xù)運行MATLAB SDU59 函數(shù)調(diào)用函數(shù)調(diào)用 參數(shù)傳遞參數(shù)傳遞 跨空間變量傳遞跨空間變量傳遞MATLAB SDU60 函數(shù)調(diào)用的命令行調(diào)用函數(shù)調(diào)用的命令行調(diào)用 functionname i
44、n1 in2 . inN 函數(shù)調(diào)用方式函數(shù)調(diào)用方式 out1,out2,.,outN=functionname(in1,in2.inN) 輸出方括號,輸入小括號輸出方括號,輸入小括號MATLAB SDU61 調(diào)用調(diào)用M文件時,文件時,matlab會對該文件進行解析,并會對該文件進行解析,并生成相應的內(nèi)部偽代碼(生成相應的內(nèi)部偽代碼(pseudocode, pcode)存放在內(nèi)存,再次調(diào)用時直接調(diào)用內(nèi)存中的存放在內(nèi)存,再次調(diào)用時直接調(diào)用內(nèi)存中的pcode,避免對相同避免對相同M文件重復解析。文件重復解析。 可以用可以用pcode 產(chǎn)生偽代碼:難以閱讀,保密性產(chǎn)生偽代碼:難以閱讀,保密性好好 例例
45、 p135 例例46MATLAB SDU62 利用函數(shù)文件,實現(xiàn)直角坐標利用函數(shù)文件,實現(xiàn)直角坐標(x,y)與與極坐標極坐標(,)之間的轉換之間的轉換函數(shù)文件函數(shù)文件tran.m: function rho,theta=tran(x,y) rho=sqrt(x*x+y*y); theta=atan(y/x); 調(diào)用調(diào)用tran.m的命令文件的命令文件main1.m: x=input(Please input x=:); y=input(Please input y=:); rho,the=tran(x,y); rho theMATLAB SDU63參數(shù)傳遞參數(shù)傳遞 在調(diào)用函數(shù)時,在調(diào)用函數(shù)時,
46、MATLAB用兩個永久變量用兩個永久變量nargin和和nargout分別記錄調(diào)用該函數(shù)時的輸分別記錄調(diào)用該函數(shù)時的輸入實參和輸出實參的個數(shù)。只要在函數(shù)文件中入實參和輸出實參的個數(shù)。只要在函數(shù)文件中包含這兩個變量,就可以準確地知道該函數(shù)文包含這兩個變量,就可以準確地知道該函數(shù)文件被調(diào)用時的輸入輸出參數(shù)個數(shù),從而決定函件被調(diào)用時的輸入輸出參數(shù)個數(shù),從而決定函數(shù)如何進行處理。數(shù)如何進行處理。MATLAB SDU64 nargin在函數(shù)體內(nèi),用于獲取實際輸入宗量在函數(shù)體內(nèi),用于獲取實際輸入宗量 nargout在函數(shù)體內(nèi),用于獲取實際輸出宗量在函數(shù)體內(nèi),用于獲取實際輸出宗量 nargin(fun) 獲
47、取獲取fun指定函數(shù)的標稱輸入宗量指定函數(shù)的標稱輸入宗量數(shù)數(shù) nargout(fun) 獲取獲取fun指定函數(shù)的標稱輸出指定函數(shù)的標稱輸出宗量數(shù)宗量數(shù) inputname(n) 在函數(shù)體內(nèi)使用,給出第在函數(shù)體內(nèi)使用,給出第n個個輸入宗量的實際調(diào)用變量名輸入宗量的實際調(diào)用變量名MATLAB SDU65 例 nargin用法示例。 函數(shù)文件examp.m: function fout=charray(a,b,c) if nargin=1 fout=a; elseif nargin=2 fout=a+b; elseif nargin=3 fout=(a*b*c)/2; end 命令文件mydemo.
48、m: x=1:3;y=1;2;3; examp(x) examp(x,y) examp(x,y,3)MATLAB SDU66 跨空間計算串表達式的值跨空間計算串表達式的值 跨空間賦值跨空間賦值MATLAB SDU67 前面已介紹了實現(xiàn)不同工作空間之間變量傳遞的兩種前面已介紹了實現(xiàn)不同工作空間之間變量傳遞的兩種渠道:函數(shù)的輸入輸出宗量和全局變量。下面介紹第渠道:函數(shù)的輸入輸出宗量和全局變量。下面介紹第三個傳遞渠道:跨空間計算串表達式值的指令。三個傳遞渠道:跨空間計算串表達式值的指令。evalin(workspace,expression)跨空間計算串表達式值跨空間計算串表達式值 說明:說明: w
49、orkspace可取兩個值:可取兩個值:base和和caller 該調(diào)用格式的執(zhí)行機理:該調(diào)用格式的執(zhí)行機理: 當當workspace取取base表示計算表示計算eval(expression)時,將從基本工作空間獲得變量值。時,將從基本工作空間獲得變量值。 當當workspace取取caller表示計算表示計算eval(expression)時,將從主調(diào)函數(shù)工作空間獲得變量值。主調(diào)函數(shù)是相對時,將從主調(diào)函數(shù)工作空間獲得變量值。主調(diào)函數(shù)是相對被調(diào)函數(shù)而言的。這里,被調(diào)函數(shù)是指被調(diào)函數(shù)而言的。這里,被調(diào)函數(shù)是指evalin所在的函數(shù)。所在的函數(shù)。MATLAB SDU68evalin(worksp
50、ace,expression1, expression2)跨空間計算替代串表達式值跨空間計算替代串表達式值 說明:說明: workspace可取兩個值:可取兩個值:base和和caller 該調(diào)用格式的執(zhí)行機理:該調(diào)用格式的執(zhí)行機理: 先從所在函數(shù)空間獲得變量值用先從所在函數(shù)空間獲得變量值用eval(expression1)計算原串表達式;若該計算)計算原串表達式;若該計算失敗,則在從失敗,則在從workspace 指定的(基本或主調(diào)指定的(基本或主調(diào)函數(shù))工作空間獲取變量值,再通過函數(shù))工作空間獲取變量值,再通過eval(expression2)計算替代串表達式)計算替代串表達式 。MATLAB SDU69 實現(xiàn)不同工作空間之間變量傳遞的第四個實現(xiàn)不同工作空間之間變量傳遞的第四個傳遞渠道是跨空間賦值指令:傳遞渠道是跨空間賦值指令:assignin(worksp
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年電腦開料硬質合金鋸片項目投資可行性研究分析報告
- 2025年GSM光纖直放站行業(yè)深度研究分析報告
- 2023-2029年中國尿促卵泡素行業(yè)發(fā)展監(jiān)測及市場發(fā)展?jié)摿︻A測報告
- 2025年周界報警管理軟件行業(yè)深度研究分析報告
- 2025年中國電腦單絞機市場調(diào)查研究報告
- 2025年中國球形旋轉式風口市場調(diào)查研究報告
- 2025年中國烘炒青綠茶市場調(diào)查研究報告
- 銷售尾款合同范本
- 2025年中國氧氣過濾器市場調(diào)查研究報告
- 變更中標合同范本
- 班會課件:逆風飛翔破繭成蝶-從《哪吒之魔童鬧?!房辞啻浩诘某砷L與責任
- 2.1 堅持依憲治國 教案 -2024-2025學年統(tǒng)編版道德與法治八年級下冊
- 【語文試卷+答案】2024-2025學年泉州高二上期末質檢
- 《修繕定額講解》課件
- 大學學生宿舍管理員工作培訓
- 初三物理常識試卷單選題100道及答案
- 浙江2024公務員考試真題及答案
- 初中新課標培訓課件
- 2025年吉林省吉林市事業(yè)單位招聘入伍高校畢業(yè)生54人歷年高頻重點提升(共500題)附帶答案詳解
- 公司銀行貸款申請書范文
- 機械設計制造及其自動化專業(yè)知識
評論
0/150
提交評論