版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
MATLAB@SDU1第四章matlab的程序設(shè)計(jì)初步MATLAB@SDU1第四章matlab的程序設(shè)計(jì)初步MATLAB@SDU2m文件簡(jiǎn)介用戶如想靈活應(yīng)用matlab去解決實(shí)際問(wèn)題,充分調(diào)用matlab的科學(xué)技術(shù)資源,就需要編輯m文件包含matlab語(yǔ)言代碼的文件稱為m文件,其擴(kuò)展名為m。編輯m文件可使用各種文本編輯器。MATLAB@SDU2m文件簡(jiǎn)介用戶如想靈活應(yīng)用matlaMATLAB@SDU3一、matlab的工作模式指令驅(qū)動(dòng)模式
通常matlab以指令驅(qū)動(dòng)模式工作,即在matlab窗口下當(dāng)用戶輸入單行指令時(shí),matlab立即處理這條指令,并顯示結(jié)果,這就是matlab命令行方式。
命令行操作時(shí),matlab窗口只允許一次執(zhí)行一行上的一個(gè)或幾個(gè)語(yǔ)句。MATLAB@SDU3一、matlab的工作模式指令驅(qū)動(dòng)模MATLAB@SDU4例如:x1=0:10x1=012345678910x2=0:3:11x2=0369x3=11.5:-3:0x3=11.50008.50005.50002.5000MATLAB@SDU4例如:MATLAB@SDU5x1=0:10,x2=0:3:11,x3=11.5:-3:0x1=012345678910x2=0369x3=11.50008.50005.50002.5000命令行方式程序可讀性差,而且不能存儲(chǔ),對(duì)于處理復(fù)雜問(wèn)題和大量數(shù)據(jù)時(shí)是不方便的,應(yīng)編寫(xiě)成能存儲(chǔ)的程序文件。MATLAB@SDU5x1=0:10,x2=0:3:11,MATLAB@SDU6m文件模式將matlab語(yǔ)句構(gòu)成的程序存儲(chǔ)成以m為擴(kuò)展名的文件,然后再執(zhí)行該程序文件,這種工作模式稱為程序文件模式。程序文件不能在指令窗口下建立,因?yàn)橹噶畲翱谥辉试S一次執(zhí)行一行上的一個(gè)或幾個(gè)語(yǔ)句。MATLAB@SDU6m文件模式MATLAB@SDU7二、m文件的創(chuàng)建
m文件的類型是普通的文本文件,我們可以使用系統(tǒng)認(rèn)可的文本文件編輯器來(lái)建立m文件。如各種edit編輯器,windows的記事本和word等。具體的創(chuàng)建方法:在matlab命令窗口點(diǎn)擊file菜單
newm-fileMATLAB@SDU7二、m文件的創(chuàng)建m文件的類型是普通MATLAB@SDU8MATLAB@SDU8MATLAB@SDU9MATLAB@SDU9MATLAB@SDU102.點(diǎn)擊file—SaveWorkspaceAs
將工作空間中的內(nèi)容存入文件。*edit——用各種edit編輯器編制m文件。edit——用matlab自帶的編輯器編制m文件。word——用word編輯m文件。
m文件編輯器的設(shè)定
m文件編輯器可自己設(shè)定,設(shè)定方法是matlab命令窗口options菜單下點(diǎn)擊EditPreference
選定m文件編輯器。MATLAB@SDU102.點(diǎn)擊file—SaveMATLAB@SDU11m文件編輯器缺省設(shè)置是matlabeditor還可設(shè)成:其他的TextEditor
從“file”–“preference”–editor/debugger設(shè)置
注意:所創(chuàng)建的m文件必須納入matlab搜索路徑后,才能在matlab命令窗口運(yùn)行。
MATLAB@SDU11m文件編輯器缺省設(shè)置是matlaMATLAB@SDU12matlab搜索路徑的設(shè)置
matlab缺省路徑是c:\matlab\bin.用pathtool路徑瀏覽器設(shè)定當(dāng)前目錄
“file”-“setpath”方法設(shè)定當(dāng)前目錄MATLAB@SDU12matlab搜索路徑的設(shè)置MATLAB@SDU13二、matlab文件的類型數(shù)據(jù)文件.matmat文件是matlab以標(biāo)準(zhǔn)二進(jìn)制格式保存的數(shù)據(jù)文件,可將工作空間中有用的數(shù)據(jù)變量保存下來(lái)。
mat文件的生成和調(diào)用是由函數(shù)save和load完成的。MATLAB@SDU13二、matlab文件的類型數(shù)據(jù)文件MATLAB@SDU142.m文件
m文件的語(yǔ)法類似于c語(yǔ)言,但又有其自身特點(diǎn)。它只是一個(gè)簡(jiǎn)單的ASCII碼文本文件,執(zhí)行程序時(shí)逐行解釋運(yùn)行程序,matlab是解釋性的編程語(yǔ)言。
m文件有兩類
獨(dú)立的m文件—稱命令文件,腳本(script)
可調(diào)用m文件—稱函數(shù)文件FunctionsMATLAB@SDU142.m文件MATLAB@SDU15腳本(命令)文件(Script)命令文件—簡(jiǎn)單的m文件
命令文件實(shí)際上是一串指令的集合,與在命令窗口逐行執(zhí)行文件中的所有指令,其結(jié)果是一樣的。沒(méi)有輸入輸出參數(shù)?!澳_本”本身反映這樣一個(gè)事實(shí):MATLAB只是按文件所寫(xiě)的指令執(zhí)行。M腳本(命令)文件的構(gòu)成較簡(jiǎn)單,其特點(diǎn)是:它只是一串按用戶意圖排列而成的(包括控制流向指令在內(nèi)的)MATLAB指令集。腳本文件運(yùn)行后,所產(chǎn)生的所有變量都駐留在MATLAB基本工作空間(Baseworkspace)中。只要不使用clear指令加以清除,且MATLAB指令窗不關(guān)閉,這些變量將一直保存在基本工作空間中?;竟ぷ骺臻g隨MATLAB的啟動(dòng)而產(chǎn)生;只有關(guān)閉MATLAB時(shí),該基本空間才被刪除。MATLAB@SDU15腳本(命令)文件(Script)命MATLAB@SDU16M函數(shù)文件(Function)與腳本(命令)文件不同,函數(shù)文件(Functionfile)猶如一個(gè)“黑箱”。從外界只能看到傳給它的輸入量和送出來(lái)的計(jì)算結(jié)果,而內(nèi)部運(yùn)作是藏而不見(jiàn)的。MATLAB@SDU16M函數(shù)文件(Function)與MATLAB@SDU17函數(shù)文件的特點(diǎn):從形式上看,與腳本文件不同,函數(shù)文件的第一行總是以“function”引導(dǎo)的“函數(shù)申明行”(Functiondeclarationline)。該行還羅列出函數(shù)與外界聯(lián)系的全部“標(biāo)稱”輸入輸出宗量。但對(duì)“輸入輸出宗量”的標(biāo)稱數(shù)目并沒(méi)有限制,即可以完全沒(méi)有輸入輸出宗量,也可以是任意數(shù)目。MATLAB允許使用比“標(biāo)稱數(shù)目”較少的輸入輸出宗量,實(shí)現(xiàn)對(duì)函數(shù)的調(diào)用。從運(yùn)行上看,與腳本文件運(yùn)行不同,每當(dāng)函數(shù)文件運(yùn)行,MATLAB就會(huì)專門(mén)為它開(kāi)辟一個(gè)臨時(shí)工作空間,稱之謂函數(shù)工作空間(Functionworkspace)。所有中間變量都存放在函數(shù)工作空間中。當(dāng)執(zhí)行完文件最后一條指令或遇到return時(shí),就結(jié)束該函數(shù)文件的運(yùn)行,同時(shí)該臨時(shí)函數(shù)空間及其所有的中間變量就立即被清除。函數(shù)空間隨具體M函數(shù)文件的被調(diào)用而產(chǎn)生,隨調(diào)用結(jié)束而刪除。函數(shù)空間是相對(duì)獨(dú)立的、臨時(shí)的。在MATLAB整個(gè)運(yùn)行期間,可以產(chǎn)生任意多個(gè)臨時(shí)函數(shù)空間。假如在函數(shù)文件中,發(fā)生對(duì)某腳本文件的調(diào)用,那么該腳本文件運(yùn)行產(chǎn)生的所有變量都存放于該函數(shù)空間之中,而不是存放在基本空間。MATLAB@SDU17函數(shù)文件的特點(diǎn):從形式上看,與腳本MATLAB@SDU18函數(shù)m文件的格式:
function返回變量=函數(shù)名(輸入變量)注釋說(shuō)明語(yǔ)句段程序語(yǔ)句段特定規(guī)則:函數(shù)m文件第一行必須以單詞function作為引導(dǎo)詞,必須遵循如下形式:
function<因變量>=<函數(shù)名>(<自變量>)m文件的文件名必須是<函數(shù)名>.m。程序中的變量均為局部變量,不保存在工作空間中。其變量只在函數(shù)運(yùn)行期間有效。MATLAB@SDU18函數(shù)m文件的格式:MATLAB@SDU19M函數(shù)文件示例functionsa=circle(r,s)%CIRCLE plotacircleofradiirinthelinespecifiedbys.% r 指定半徑的數(shù)值% s 指定線色的字符串% sa 圓面積%%circle(r) 利用藍(lán)實(shí)線畫(huà)半徑為r的圓周線.%circle(r,s) 利用串s指定的線色畫(huà)半徑為r的圓周線.%sa=circle(r) 計(jì)算圓面積,并畫(huà)半徑為r的藍(lán)色圓面.%sa=circle(r,s) 計(jì)算圓面積,并畫(huà)半徑為r的s色圓面.%編寫(xiě)于2001年4月7日,修改于2002年8月27日。ifnargin>2error('輸入宗量太多。');end;ifnargin==1s='b';end;……MATLAB@SDU19M函數(shù)文件示例functionsMATLAB@SDU20函數(shù)申明(定義)行
(Functiondeclarationline):位于函數(shù)文件的首行,以MATLAB關(guān)鍵字function開(kāi)頭,函數(shù)名以及函數(shù)的輸入輸出宗量都在這一行定義。MATLAB@SDU20函數(shù)申明(定義)行
(FunctiMATLAB@SDU21H1行(Thefirsthelptextline):緊隨函數(shù)申明行之后以%開(kāi)頭的第一注釋行。按MATLAB自身文件的規(guī)則,H1行包含:大寫(xiě)體的函數(shù)文件名;運(yùn)用關(guān)鍵詞簡(jiǎn)要描述的函數(shù)功能。該H1行供lookfor關(guān)鍵詞查詢和help在線幫助使用。MATLAB@SDU21H1行(ThefirsthelMATLAB@SDU22在線幫助文本(Helptext)區(qū):H1行及其之后的連續(xù)以%開(kāi)頭的所有注釋行構(gòu)成整個(gè)在線幫助文本。它通常包括:函數(shù)輸入輸出宗量的含義,調(diào)用格式說(shuō)明。MATLAB@SDU22在線幫助文本(Helptext)MATLAB@SDU23編寫(xiě)和修改記錄:與在線幫助文本區(qū)相隔一個(gè)空行,也以%開(kāi)頭,標(biāo)志編寫(xiě)及修改該M文件的作者和日期、版本記錄。它用于軟件檔案管理。MATLAB@SDU23編寫(xiě)和修改記錄:與在線幫助文本區(qū)相MATLAB@SDU24函數(shù)體(Functionbody):為清晰起見(jiàn),它與前面的注釋行以空行相隔。這部分內(nèi)容由實(shí)現(xiàn)該M函數(shù)文件功能的MATLAB指令組成。它接收輸入宗量,進(jìn)行程序流控制,得到輸出宗量。其中為閱讀、理解方便,也配置適當(dāng)?shù)目招泻妥⑨?。若僅從運(yùn)算角度看,惟有函數(shù)申明行和函數(shù)體兩部分是構(gòu)成M函數(shù)文件所必不可少的。MATLAB@SDU24函數(shù)體(FunctionbodyMATLAB@SDU25functionr=rank(A,tol)%RANKMatrixrank.%RANK(A)providesanestimateofthenumberoflinearly%independentrowsorcolumnsofamatrixA.%RANK(A,tol)isthenumberofsingularvaluesofA%thatarelargerthantol.%RANK(A)usesthedefaulttol=max(size(A))*norm(A)*eps.%%ClasssupportforinputA:%float:double,single%Copyright1984-2004TheMathWorks,Inc.%$Revision:$$Date:2004/04/1023:30:08$s=svd(A);ifnargin==1tol=max(size(A)')*eps(max(s));endr=sum(s>tol);.程序部分MATLAB@SDU25functionr=rankMATLAB@SDU26matlab內(nèi)置函數(shù)文件
matlab自定義的函數(shù)文件稱內(nèi)置函數(shù)文件調(diào)用內(nèi)置函數(shù)的方法:使用函數(shù)名并給出相應(yīng)的入口、出口參數(shù)即可。例如:sin.m函數(shù)
調(diào)用格式:y=sin(2*x)
實(shí)際應(yīng)用中:
x=0:2*pi/180:2*pi;y=sin(2*x)plot(x,y)M函數(shù)文件分兩類:內(nèi)置和自定義MATLAB@SDU26matlab內(nèi)置函數(shù)文件M函數(shù)文MATLAB@SDU27又如sqrt(x)——求x的平方根
abs(x)——求x的絕對(duì)值
det(a)——求行列式的值等等。matlab擁有大量的內(nèi)置數(shù)學(xué)函數(shù),供我們?cè)跀?shù)值運(yùn)算和符號(hào)運(yùn)算中調(diào)用。MATLAB@SDU27又如sqrt(x)——求x的MATLAB@SDU28II函數(shù)m文件—需要輸入變量,返回輸出變量
matlab用戶可以根據(jù)需要編輯自己的m文件,它們可以像庫(kù)函數(shù)一樣方便的調(diào)用,從而極大地?cái)U(kuò)展了matlab的能力。對(duì)于某一類特殊問(wèn)題,如創(chuàng)建了許多m函數(shù)文件,則可形成新的工具箱。這種用matlab語(yǔ)言創(chuàng)建定義新的matlab函數(shù)的功能,正體現(xiàn)了matlab語(yǔ)言強(qiáng)大的擴(kuò)展功能。MATLAB@SDU28II函數(shù)m文件—需要輸入變量,MATLAB@SDU29M函數(shù)類型I函數(shù)句柄
函數(shù)句柄并不是伴隨函數(shù)文件而自動(dòng)形成的文件“屬性”,是必須通過(guò)專門(mén)的定義才會(huì)生成的。為一個(gè)函數(shù)定義句柄的方法有兩種:利用@符號(hào);**利用轉(zhuǎn)換函數(shù)str2func。對(duì)函數(shù)句柄的內(nèi)涵觀察需借助專門(mén)指令Functions實(shí)現(xiàn)。例:為MATLAB的“內(nèi)建”函數(shù)創(chuàng)建函數(shù)句柄,并觀察其內(nèi)涵。hsin=@sin;%(1)創(chuàng)建class(hsin)%(2)類型判別CC=functions(hsin)%(3)借助指令function觀察內(nèi)涵MATLAB@SDU29M函數(shù)類型I函數(shù)句柄函數(shù)句柄并MATLAB@SDU30函數(shù)句柄是matlab特有的語(yǔ)言結(jié)構(gòu),其優(yōu)點(diǎn):方便地實(shí)現(xiàn)函數(shù)間互相調(diào)用兼容函數(shù)加載的所有方式拓寬子函數(shù)包括局部函數(shù)的使用范圍提高函數(shù)調(diào)用的可靠性減少程序設(shè)計(jì)中的冗余提高重復(fù)執(zhí)行的效率數(shù)組、結(jié)構(gòu)數(shù)組、元胞型數(shù)組結(jié)合定義數(shù)據(jù)MATLAB@SDU30函數(shù)句柄是matlab特有的語(yǔ)言結(jié)MATLAB@SDU31函數(shù)句柄根據(jù)內(nèi)置函數(shù)創(chuàng)建函數(shù)句柄
FUNHANDLE=@FUNCTION_NAME匿名函數(shù)創(chuàng)建函數(shù)句柄FUNHANDLE=@(ARGLIST)EXPRESSION
如果函數(shù)句柄不含任何參數(shù),@后列表必須用空括號(hào)表示,調(diào)用也必須使用空括號(hào)參閱helpfunction_handle
MATLAB@SDU31函數(shù)句柄根據(jù)內(nèi)置函數(shù)創(chuàng)建函數(shù)句柄MATLAB@SDU32%本例通過(guò)sin函數(shù)及其句柄演示若干基本用法。%(1)函數(shù)句柄的創(chuàng)建fhandle=str2func('sin');%(2)函數(shù)句柄在sin(pi/4)“數(shù)值計(jì)算”中的情況ys=sin(pi/4) %函數(shù)直接調(diào)用 yfold=feval('sin',pi/4) %feval指令的“老式”調(diào) yfnew=feval(fhandle,pi/4)%feval指令的“新式”調(diào)用%(3)函數(shù)句柄在sin(pi/4)“符號(hào)計(jì)算”中的情況Alpha=sym('pi/4'); %定義符號(hào)常數(shù) yss=sin(Alpha) %函數(shù)直接調(diào)用yfold=feval('sin',Alpha) %feval指令的“老式”調(diào)用ynews=feval(fhandle,Alpha)%feval指令的“新式”調(diào)用%(4)函數(shù)句柄在泛函指令中的用法:在[0,2*pi]間求sin函數(shù)的極小值。xold=fminbnd('sin',0,2*pi) %泛函指令的“老式”調(diào)用xnew=fminbnd(fhandle,0,2*pi)%泛函指令的“新式”調(diào)用MATLAB@SDU32%本例通過(guò)sin函數(shù)及其句柄演示若MATLAB@SDU33M函數(shù)類型II主函數(shù)和子函數(shù)多個(gè)函數(shù)代碼,第一個(gè)是主函數(shù),其它是子函數(shù);主函數(shù)可外部調(diào)用,子函數(shù)不行;多個(gè)子函數(shù)排列次序可改變MATLAB@SDU33M函數(shù)類型II主函數(shù)和子函數(shù)MATLAB@SDU34子函數(shù)的性質(zhì):每個(gè)子函數(shù)的第一行是其自己的函數(shù)申明行。在M函數(shù)文件內(nèi),主函數(shù)的位置不可改變,但子函數(shù)的排列次序可任意改變。子函數(shù)只能被處于同一文件的主函數(shù)或其他子函數(shù)調(diào)用。在M函數(shù)文件中,任何指令通過(guò)“名字”對(duì)函數(shù)進(jìn)行調(diào)用時(shí),子函數(shù)的優(yōu)先級(jí)僅次于內(nèi)裝函數(shù)。同一文件的主函數(shù)、子函數(shù)的工作空間都是彼此獨(dú)立的。各函數(shù)間的信息,或通過(guò)輸入輸出宗量傳遞,或通過(guò)全局變量傳遞,或通過(guò)跨空間指令傳遞。help,lookfor等幫助指令都不能提供關(guān)于子函數(shù)的任何幫助信息。(需要通過(guò)主函數(shù))子函數(shù)的算例P119例4-3。MATLAB@SDU34子函數(shù)的性質(zhì):每個(gè)子函數(shù)的第一行是MATLAB@SDU35私有(用)(局部)private函數(shù)所謂私用(局部)函數(shù),是指位于private目錄上的M文件函數(shù)。私用(局部)函數(shù)的性質(zhì):私用(局部)函數(shù)的構(gòu)造與普通M函數(shù)完全相同。私用(局部)函數(shù)的只能被private目錄的直接父目錄上的M函數(shù)文件所調(diào)用。它不能被其他目錄上的任何M函數(shù)、M腳本文件或MATLAB指令窗中的命令所調(diào)用,也不能被直接父目錄上的M腳本文件調(diào)用。M文件中,任何指令通過(guò)“名字”對(duì)函數(shù)進(jìn)行調(diào)用時(shí),私用(局部)函數(shù)的優(yōu)先級(jí)雖低于內(nèi)裝函數(shù)和子函數(shù),但高與其他任何目錄上的函數(shù)。help,lookfor等指令都不能提供關(guān)于私用(局部)函數(shù)的任何幫助信息(必須通過(guò)private父目錄)。MATLAB@SDU35私有(用)(局部)private函MATLAB@SDU36嵌套函數(shù)任一個(gè)MATLAB函數(shù)體內(nèi)定義函數(shù),稱之為外部函數(shù)的嵌套函數(shù)(舊版本不支持)需用end結(jié)束相互間的調(diào)用和工作空間的訪問(wèn)例子P122-P125MATLAB@SDU36嵌套函數(shù)任一個(gè)MATLAB函數(shù)體內(nèi)MATLAB@SDU37局部變量和全局變量局部(Local)變量它存在于函數(shù)空間內(nèi)部的中間變量,產(chǎn)生于該函數(shù)的運(yùn)行過(guò)程中,其影響范圍也僅限于該函數(shù)本身。全局(Global)變量通過(guò)global指令,MATLAB也允許幾個(gè)不同的函數(shù)空間以及基本空間共享一個(gè)變量。這種被共享的變量稱為全局變量。每個(gè)希望共享全局變量的函數(shù)或MATLAB基本工作空間,必須逐個(gè)用global對(duì)具體變量加以專門(mén)定義。沒(méi)采用global定義的函數(shù)或基本空間,將無(wú)權(quán)享用全局變量。如果某個(gè)函數(shù)的運(yùn)作使全局變量的內(nèi)容發(fā)生了變化,那么其他函數(shù)空間以及基本工作空間中的同名變量也就隨之變化。除非與全局變量聯(lián)系的所有工作空間都被刪除,否則全局變量依然存在。例:p125例4-5MATLAB@SDU37局部變量和全局變量局部(LocalMATLAB@SDU38三、MATLAB控制流for循環(huán)結(jié)構(gòu)while循環(huán)結(jié)構(gòu)if-else-end分支結(jié)構(gòu)switch-case結(jié)構(gòu)try-catch結(jié)構(gòu)控制程序流的其它常用指令MATLAB@SDU38三、MATLAB控制流for循環(huán)結(jié)MATLAB@SDU391、for循環(huán)結(jié)構(gòu)forx=array (commands)endFor循環(huán)的結(jié)構(gòu)以及含義和其他高級(jí)語(yǔ)言的結(jié)構(gòu)和含義基本一致。一個(gè)簡(jiǎn)單的for循環(huán)示例。和其他語(yǔ)言一樣for循環(huán)可以有多重循環(huán)。MATLAB@SDU391、for循環(huán)結(jié)構(gòu)forx=arMATLAB@SDU40例:利用for循環(huán)求1!+2!+3!++5!的值
sum=0;fori=1:5pdr=1;fork=1:ipdr=pdr*k;endsum=sum+pdr;endsum=153MATLAB@SDU40例:利用for循環(huán)求1!+2!+3MATLAB@SDU412、while循環(huán)結(jié)構(gòu)whileexpression (commands)end與for循環(huán)設(shè)置固定循環(huán)次數(shù)來(lái)執(zhí)行循環(huán)體相比較,MATLAB中的while循環(huán)是應(yīng)用邏輯表達(dá)式來(lái)設(shè)置與判斷是否執(zhí)行循環(huán)體,循環(huán)次數(shù)依邏輯判斷條件來(lái)決定,循環(huán)次數(shù)是不固定的。例:Fibonacci數(shù)組的元素滿足Fibonacci規(guī)則:ak+2=ak+ak+1,(k=1,2,…);且a1=a2=1?,F(xiàn)要求該數(shù)組中第一個(gè)大于10000的元素。MATLAB@SDU412、while循環(huán)結(jié)構(gòu)whileMATLAB@SDU42a(1)=1;a(2)=1;i=2;whilea(i)<=10000 a(i+1)=a(i-1)+a(i); %當(dāng)現(xiàn)有的元素仍小于10000時(shí),求解下一個(gè)元素。
i=i+1;end;i,a(i),MATLAB@SDU42a(1)=1;a(2)=1;i=2MATLAB@SDU433、if-else-end分支結(jié)構(gòu)if-else-end指令為程序流提供了一種分支結(jié)構(gòu),它最常用的使用方式:?jiǎn)畏种щp分支多分支ifexpression(commands)endifexpression(commands1)else(commands2)endifexpression1(commands1)elseifexpression2(commands2)…else(commandsk)end常用常用該使用方法常被switch-case所取代MATLAB@SDU433、if-else-end分支結(jié)構(gòu)MATLAB@SDU44例一個(gè)簡(jiǎn)單的分支結(jié)構(gòu)兩個(gè)分支結(jié)構(gòu)多分支結(jié)構(gòu)MATLAB@SDU44例一個(gè)簡(jiǎn)單的分支結(jié)構(gòu)MATLAB@SDU45%一個(gè)簡(jiǎn)單的分支結(jié)構(gòu)clearcost=10;number=12;ifnumber>8sums=number*0.95*cost;end,sums%兩個(gè)分支結(jié)構(gòu)x=input('x=');ifx<=10t=0:0.1*pi:2*pi;y=x*sin(t);plot(t,y)elset=0:0.1*pi:2*pi;y=x/10*cos(t);plot(t,y)endMATLAB@SDU45%一個(gè)簡(jiǎn)單的分支結(jié)構(gòu)MATLAB@SDU46多分支結(jié)構(gòu):
設(shè)某批發(fā)貿(mào)易公司從事蘋(píng)果批發(fā),當(dāng)客戶購(gòu)買(mǎi)5000件以上,15元/件;2500~5000件,16元/件;1000~2500件,17元/件;500~1000件,18元/件;250~500件,19元/件;100~250件,20元/件;50~100件,22元/件;10~50件,24元/件;9件以下,28元/件。試編寫(xiě)程序根據(jù)客戶購(gòu)買(mǎi)的件數(shù),求出總的金額數(shù)。MATLAB@SDU46多分支結(jié)構(gòu):MATLAB@SDU47n=input('請(qǐng)輸入客戶擬購(gòu)買(mǎi)蘋(píng)果的件數(shù)=');ifn>=5000sum=15*n;elseif5000>n&n>=2500%&:為邏輯與
sum=16*n;elseif2500>n&n>=1000sum=17*n;elseif1000>n&n>=500sum=18*n;elseif500>n&n>=250sum=19*n;elseif250>n&n>=100sum=20*n;elseif100>n&n>=50sum=22*n;elseif50>n&n>=10sum=24*nelsesum=28*nend;end;end;end;end;end;end;end%請(qǐng)注意end的個(gè)數(shù)disp('購(gòu)買(mǎi)蘋(píng)果的件數(shù)');n,disp('金額');sum,disp('元');MATLAB@SDU47n=input('請(qǐng)輸入客戶擬購(gòu)買(mǎi)MATLAB@SDU484、switch-case結(jié)構(gòu)switchex casetest1 (commands1) casetest2 (commands2)… casetestk (commandsk) otherwise (commands)end例:學(xué)生成績(jī)管理,用來(lái)演示switch結(jié)構(gòu)的應(yīng)用。MATLAB@SDU484、switch-case結(jié)構(gòu)swMATLAB@SDU49%劃分區(qū)域:滿分(100),優(yōu)秀(90-99),良好(80-89),及格(60-79),不及格(<60)。fori=1:10;a{i}=89+i;b{i}=79+i;c{i}=69+i;d{i}=59+i;end;c=[d,c];Name={'Jack','Marry','Peter','Rose','Tom'}; %元胞數(shù)組Mark={72,83,56,94,100};Rank=cell(1,5);%創(chuàng)建一個(gè)含5個(gè)元素的構(gòu)架數(shù)組S,它有三個(gè)域。S=struct('Name',Name,'Marks',Mark,'Rank',Rank);%根據(jù)學(xué)生的分?jǐn)?shù),求出相應(yīng)的等級(jí)。fori=1:5switchS(i).Markscase100 %得分為100時(shí)
S(i).Rank='滿分'; %列為'滿分'等級(jí)
casea %得分在90和99之間
S(i).Rank='優(yōu)秀'; %列為'優(yōu)秀'等級(jí)
caseb %得分在80和89之間
S(i).Rank='良好'; %列為'良好'等級(jí)
casec %得分在60和79之間
S(i).Rank='及格'; %列為'及格'等級(jí)
otherwise %得分低于60。
S(i).Rank='不及格';%列為'不及格'等級(jí)
endend%將學(xué)生姓名,得分,登記等信息打印出來(lái)。disp(['學(xué)生姓名','得分','等級(jí)']);disp('')fori=1:5;disp([S(i).Name,blanks(6),num2str(S(i).Marks),blanks(6),S(i).Rank]);end;MATLAB@SDU49%劃分區(qū)域:滿分(100),優(yōu)秀(MATLAB@SDU505、try-catch結(jié)構(gòu)錯(cuò)誤控制指令try (commands1) 組命令1總被執(zhí)行。若正確,則跳出此結(jié)構(gòu)catch (commands2) 僅當(dāng)組命令1出現(xiàn)執(zhí)行錯(cuò)誤,組命令2才被執(zhí)行endtry-catch結(jié)構(gòu)應(yīng)用實(shí)例。MATLAB@SDU505、try-catch結(jié)構(gòu)錯(cuò)誤控制MATLAB@SDU51%try-catch結(jié)構(gòu)應(yīng)用實(shí)例clear,N=4;A=magic(3); %設(shè)置3行3列矩陣A。tryA_N=A(N,:), %取A的第N行元素catchA_end=A(end,:), %如果取A(N,:)出錯(cuò),則改取A的最后一行。endlasterr %顯示出錯(cuò)原因
MATLAB@SDU51%try-catch結(jié)構(gòu)應(yīng)用實(shí)例MATLAB@SDU52break語(yǔ)句break語(yǔ)句用來(lái)退出for循環(huán)和while循環(huán)。注意:break只用在if判斷語(yǔ)句和while循環(huán)判斷語(yǔ)句中,break可以中斷if和while語(yǔ)句的執(zhí)行,退出for循環(huán)或while循環(huán),執(zhí)行循環(huán)結(jié)束標(biāo)志end后面的語(yǔ)句。例:用for循環(huán)指令來(lái)尋求Fibonacc數(shù)組中第一個(gè)大于10000的元素。MATLAB@SDU52break語(yǔ)句break語(yǔ)句用來(lái)退MATLAB@SDU53clearn=100;a=ones(1,n);fori=3:na(i)=a(i-1)+a(i-2);ifa(i)>10000a(i),break;%跳出所在的一級(jí)循環(huán)。
end;end,iMATLAB@SDU53clearMATLAB@SDU54echo命令通常運(yùn)行一個(gè)M文件時(shí),文件中的命令不在屏幕上顯示出來(lái)。如果M文件被執(zhí)行之前,首先在MATLAB命令窗中輸入echo命令并予以執(zhí)行,然后再運(yùn)行M文件,則M文件中的程序?qū)⒃贛ATLAB命令窗中顯示出來(lái),但影響程序的執(zhí)行速度。若要清除echo命令的影響,在MATLAB命令窗中鍵入“echooff”并回車即可。MATLAB@SDU54echo命令通常運(yùn)行一個(gè)M文件時(shí),MATLAB@SDU55Input()語(yǔ)句Input()語(yǔ)句用在M文件中,執(zhí)行到input()命令時(shí),MATLAB暫停程序的執(zhí)行,等待用戶用鍵盤(pán)賦值給input()指定的變量。Input()語(yǔ)句還可用于等待用戶輸入MATLAB表達(dá)式和字符串,跟其他語(yǔ)句配合,可以實(shí)現(xiàn)“菜單”的功能。不過(guò)MATLAB中有專用的菜單設(shè)置命令,一般并不使用input()來(lái)建立。MATLAB@SDU55Input()語(yǔ)句Input(MATLAB@SDU56keyboard命令類似于input()但功能更強(qiáng)的keyboard命令是等待鍵盤(pán)輸入內(nèi)容,并把鍵盤(pán)輸入的內(nèi)容作為一個(gè)M文件來(lái)調(diào)用。例如,建立一個(gè)M文件us.m:x=0:0.01*pi:2*pi;keyboard執(zhí)行us.m,計(jì)算機(jī)返回一個(gè)提示符:k此時(shí),可以輸入一個(gè)函數(shù),但要注意這個(gè)函數(shù)自變量和因變量的對(duì)應(yīng)關(guān)系。return命令返回正常狀態(tài),表示增加輸入的文本內(nèi)容輸入完畢,這一條命令是必須的。MATLAB@SDU56keyboard命令類似于inpuMATLAB@SDU576、控制程序流的其它常用指令(1)指令及使用格式使用說(shuō)明v=input(‘message’)v=input(‘message’,’s’)該指令執(zhí)行時(shí),“控制權(quán)”交給鍵盤(pán);待輸入結(jié)束,按下Enter鍵,“控制權(quán)”交還MATLAB。message是提示用的字符串。第一種格式用于鍵入數(shù)值、字符串、元胞數(shù)組等數(shù)據(jù);第二種格式,不管鍵入什么,總是以字符串形式賦給變量vkeyboard遇到keyboard時(shí),將“控制權(quán)”交給鍵盤(pán),用戶可從鍵盤(pán)輸入各種MATLAB指令。僅當(dāng)用戶輸入return指令后,“控制權(quán)”才交還給程序。它與input的區(qū)別是:它允許輸入任意多個(gè)MATLAB指令,而input只能輸入賦給變量的值breakbreak指令可導(dǎo)致包含該指令的while、for環(huán)終止;也可在if-end,switch-case,try-catch中導(dǎo)致中斷continue跳過(guò)位于其后的循環(huán)中的其他指令,執(zhí)行循環(huán)的下一個(gè)迭代pausepause(n)第一種格式使程序暫停執(zhí)行,等待用戶按任意鍵繼續(xù);第二種格式使程序暫停n秒后,再繼續(xù)執(zhí)行MATLAB@SDU576、控制程序流的其它常用指令(1)MATLAB@SDU58控制程序流的其它常用指令(2)指令及使用格式使用說(shuō)明return結(jié)束return指令所在函數(shù)的執(zhí)行,而把控制轉(zhuǎn)至主調(diào)函數(shù)或指令窗。否則,只有待整個(gè)被調(diào)函數(shù)執(zhí)行完后,才會(huì)轉(zhuǎn)出error(‘message’)顯示出錯(cuò)信息message,終止程序lasterr顯示最新出錯(cuò)原因,并終止程序lastwarm顯示MATLAB自動(dòng)給出的最新警告程序繼續(xù)運(yùn)行warning(‘message’)顯示警告信息message,程序繼續(xù)運(yùn)行MATLAB@SDU58控制程序流的其它常用指令(2)指令MATLAB@SDU59四、函數(shù)調(diào)用和變量傳遞函數(shù)調(diào)用參數(shù)傳遞跨空間變量傳遞MATLAB@SDU59四、函數(shù)調(diào)用和變量傳遞函數(shù)調(diào)用MATLAB@SDU60函數(shù)調(diào)用函數(shù)調(diào)用的命令行調(diào)用
functionnamein1in2….inN函數(shù)調(diào)用方式
[out1,out2,…..,outN]=functionname(in1,in2…..inN)輸出方括號(hào),輸入小括號(hào)MATLAB@SDU60函數(shù)調(diào)用函數(shù)調(diào)用的命令行調(diào)用MATLAB@SDU61M文件和內(nèi)部偽代碼調(diào)用M文件時(shí),matlab會(huì)對(duì)該文件進(jìn)行解析,并生成相應(yīng)的內(nèi)部偽代碼(pseudocode,pcode)存放在內(nèi)存,再次調(diào)用時(shí)直接調(diào)用內(nèi)存中的pcode,避免對(duì)相同M文件重復(fù)解析??梢杂胮code產(chǎn)生偽代碼:難以閱讀,保密性好例p135例4-6MATLAB@SDU61M文件和內(nèi)部偽代碼調(diào)用M文件時(shí),mMATLAB@SDU62例2利用函數(shù)文件,實(shí)現(xiàn)直角坐標(biāo)(x,y)與極坐標(biāo)(ρ,θ)之間的轉(zhuǎn)換函數(shù)文件tran.m:
function[rho,theta]=tran(x,y)rho=sqrt(x*x+y*y);theta=atan(y/x);
調(diào)用tran.m的命令文件main1.m:
x=input('Pleaseinputx=:');y=input('Pleaseinputy=:');[rho,the]=tran(x,y);rhotheMATLAB@SDU62例2利用函數(shù)文件,實(shí)現(xiàn)直角坐標(biāo)(xMATLAB@SDU63
參數(shù)傳遞
在調(diào)用函數(shù)時(shí),MATLAB用兩個(gè)永久變量nargin和nargout分別記錄調(diào)用該函數(shù)時(shí)的輸入實(shí)參和輸出實(shí)參的個(gè)數(shù)。只要在函數(shù)文件中包含這兩個(gè)變量,就可以準(zhǔn)確地知道該函數(shù)文件被調(diào)用時(shí)的輸入輸出參數(shù)個(gè)數(shù),從而決定函數(shù)如何進(jìn)行處理。MATLAB@SDU63參數(shù)傳遞MATLAB@SDU64參數(shù)傳遞nargin 在函數(shù)體內(nèi),用于獲取實(shí)際輸入宗量nargout 在函數(shù)體內(nèi),用于獲取實(shí)際輸出宗量nargin(‘fun’) 獲取‘fun’指定函數(shù)的標(biāo)稱輸入宗量數(shù)nargout(‘fun’)獲取‘fun’指定函數(shù)的標(biāo)稱輸出 宗量數(shù)inputname(n)在函數(shù)體內(nèi)使用,給出第n個(gè) 輸入宗量的實(shí)際調(diào)用變量名MATLAB@SDU64參數(shù)傳遞nargin 在函數(shù)體內(nèi)MATLAB@SDU65
例nargin用法示例。函數(shù)文件examp.m:
functionfout=charray(a,b,c)ifnargin==1fout=a;elseifnargin==2fout=a+b;elseifnargin==3fout=(a*b*c)/2;end
命令文件mydemo.m:
x=[1:3];y=[1;2;3];examp(x)examp(x,y')examp(x,y,3)MATLAB@SDU65例nargin用法示例。MATLAB@SDU66跨空間變量傳遞跨空間計(jì)算串表達(dá)式的值跨空間賦值MATLAB@SDU66跨空間變量傳遞跨空間計(jì)算串表達(dá)式的MATLAB@SDU67跨空間計(jì)算串表達(dá)式的值前面已介紹了實(shí)現(xiàn)不同工作空間之間變量傳遞的兩種渠道:函數(shù)的輸入輸出宗量和全局變量。下面介紹第三個(gè)傳遞渠道:跨空間計(jì)算串表達(dá)式值的指令。evalin(‘workspace’,’expression’)
跨空間計(jì)算串表達(dá)式值說(shuō)明:‘workspace’可取兩個(gè)值:‘base’和‘caller’該調(diào)用格式的執(zhí)行機(jī)理:當(dāng)‘workspace’取‘base’表示計(jì)算eval(‘expression’)時(shí),將從基本工作空間獲得變量值。當(dāng)‘workspace’取‘caller’表示計(jì)算eval(‘expression’)時(shí),將從主調(diào)函數(shù)工作空間獲得變量值。主調(diào)函數(shù)是相對(duì)被調(diào)函數(shù)而言的。這里,被調(diào)函數(shù)是指evalin所在的函數(shù)。MATLAB@SDU67跨空間計(jì)算串表達(dá)式的值前面已介紹了MATLAB@SDU68evalin(‘workspace’,’expression1’,’expression2’) 跨空間計(jì)算替代串表達(dá)式值說(shuō)明:‘workspace’可取兩個(gè)值:‘base’和‘caller’該調(diào)用格式的執(zhí)行機(jī)理:先從所在函數(shù)空
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 圍巖收斂施工方案(3篇)
- 做木門(mén)活動(dòng)策劃方案(3篇)
- 路燈接線施工方案(3篇)
- 粉塵車間施工方案(3篇)
- 大學(xué)汽車活動(dòng)方案策劃(3篇)
- 春節(jié)京劇活動(dòng)策劃方案(3篇)
- 市場(chǎng)營(yíng)銷操作手冊(cè)(標(biāo)準(zhǔn)版)
- 2025年航空貨運(yùn)代理操作指南
- 方案書(shū)制作指南
- 2025年中職工業(yè)機(jī)器人(故障排查綜合)試題及答案
- 健合集團(tuán)在線測(cè)評(píng)原題
- 2024年河北省中考?xì)v史試題卷(含答案逐題解析)
- DL∕T 5776-2018 水平定向鉆敷設(shè)電力管線技術(shù)規(guī)定
- 國(guó)防裝備全壽命周期管理
- 人教版小學(xué)六年級(jí)下冊(cè)數(shù)學(xué)教材習(xí)題
- 頸椎病-小講課
- 2022年版煤礦安全規(guī)程
- 文旅夜游燈光方案
- GB/Z 43280-2023醫(yī)學(xué)實(shí)驗(yàn)室測(cè)量不確定度評(píng)定指南
- 人音版(五線譜)(北京)音樂(lè)一年級(jí)上冊(cè)小鼓響咚咚課件(共18張PPT內(nèi)嵌音頻)
- ESPEN指南外科手術(shù)中的臨床營(yíng)養(yǎng)
評(píng)論
0/150
提交評(píng)論