版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、 M文件與程序設(shè)計復(fù)雜冋題的解算需要借助 MATLAB程序進行。這種程序的擴展名為 m 故稱為 M文件。M文件分為(M )腳本文件和(M )函數(shù)文件。本章介紹編寫MATLAB程序時常用的控制結(jié)構(gòu)、函數(shù)文件 的構(gòu)造、主函數(shù)、子函數(shù)及述函數(shù)句柄的創(chuàng)建、觀察和調(diào)用。6.1MATLAB控制流6.1.1語法說明if表達式語句體1 elseif語句體2 else語句體3 end若表達式返回數(shù)組,則僅當所 有元素都不為零時為真;若數(shù)組為 空,則為假。elseif和 else可選,其中可有多 個 elseifoswitch表達式 case表達式1語句體1 case式2,式3語句體2 otherwise語句體3
2、end僅執(zhí)行第一個滿足條件的語句 體。case后可用化括號把多個表達 式以或”邏輯連接起來??捎卸鄠€case語句。otherwise可選。for x =表達式語句體end執(zhí)行確定次數(shù)的循環(huán)。表達式為矩陣時,x把矩陣按 列拉長為向量取值。while表達式語句體end右表達式為真時,循環(huán)執(zhí)仃語句 體。if-else-end控制結(jié)構(gòu)if-else-end指令為程序流提供了一種分支控制。單分支雙分支多分支if expr (commands) endif expr (commands) else (commands2) endif expr1 (commands) elseif expr2 (comma
3、nds)else (commandsk) end當expr給出“邏輯1”時, (commands) 指令組才被 執(zhí)行。當expr給出“邏 輯1 ”時,(commands)指 令組被執(zhí)行;否 貝打(commands2) 被執(zhí)行。expr1, expr2,中,首 先給出“邏輯1”的那個 分支的指令組被執(zhí)行;否 貝打(commandsk)被執(zhí)行。該使用方法常被 switch-case所 取代。表6.1-1 if-else-end分支結(jié)構(gòu)的使用方式x芝I x!3 xI x+1e【例6.1-1】已知函數(shù)y編寫能對任意一組輸入 x值求相應(yīng)y值的程序。編寫函數(shù)文件程序:function y=exm06010
4、1(x)% y=exm060101(x) Function calculate of exa mple 6.1-1 n=length(x);for k=1:nif x(k)=1 y(k)=ex p(1-x(k); else y(k)=x(k)A3;endend保存在搜索路徑上調(diào)用函數(shù)文件x=-2,-12-0.4,0.8,1,6 y=exm060101(x)6.1.2switch-case空制結(jié)構(gòu)表6.1-2 switch-case空制結(jié)構(gòu)的使用方式指令格式switch exprcase value 1expr為根據(jù)此前給定變量進行計算的表 達式(commands) case value 2(c
5、ommands2) case value k(commandsk)otherwise(commands) endvalue_1是給定的數(shù)值、字符串標量(或 單元數(shù)組)若expr結(jié)果與value_1 (或其中的單元元素)相等,則執(zhí)行。value_k是給定的數(shù)值、字符串標量(或 單元數(shù)組)若expr結(jié)果與value_k (或其中的單元元素)相等,則執(zhí)行。該情況是以上的“并”的“補”若所有case都不發(fā)生,則執(zhí)行該組命令?!纠?.1-2】已知學(xué)生的名字和百分制分數(shù)。要求根據(jù)學(xué)生的百 分制分數(shù),分別采用“滿分”、“優(yōu)秀”、“良好”、“及格” 和“不及格”等表示學(xué)生的學(xué)習(xí)成績。clear;for k=1
6、:10a(k)=89+k;b(k)=79+k;c(k)=69+k;d(k)=59+k;end;c=d,c;%A=cell(3,5);A(1,:)=Jack,Marry, Peter,Rose,Tom;A(2,:)=72,83,56,94,100;%for k=1:5switch A2,kcase 100r=滿分;case ar=優(yōu)秀:case br=良好;case cr=及格;otherwiser=不及格;end6.1.3A(3,k)=r; end Afor循環(huán)while循環(huán)for ix=arraywhile exp ression(commands)(commands)endendfor循環(huán)
7、和while循環(huán)表6.1-3循環(huán)結(jié)構(gòu)的使用方式【例6.1-3】創(chuàng)建Hilbert矩陣。(1) Hilbert 矩陣 a(i,j)=。i + J T(2)K=5;A = zeros(K,K); for m = 1:Kfor n = 1:KA(m, n) = 1/(m+n -1); endend format ratA%format short gA =Columns 1 through 411/21/31/41/21/31/41/51/31/41/51/61/41/51/61/71/51/61/71/8Column 51/51/61/71/81/9(3)clearticK=1000;for m
8、= 1:Kfor n = 1:KA1(m,n) = 1/(m+n -1); end end t1=toc ticK=1000;A2 = zeros(K,K);for m = 1:Kfor n = 1:KA2(m,n) = 1/(m+n -1)endendt2=toc(4)ticN=1000; n=repmat(1:N,N,1);m=n;A3=1./(n+m-1);t3=tocclearticN=5; n=repmat(1:N,N,1); m=n;A3=1./(n+m-1)t3=tocformat ratA3A3 =10.50.333330.250.20.50.333330.250.20.166
9、670.333330.250.20.166670.142860.250.20.166670.142860.1250.20.166670.142860.1250.111110.66052t3 =11/21/31/41/21/31/41/51/31/41/51/61/41/51/61/71/51/61/71/8A3 =Columns 1 through 4Column 51/51/61/71/81/9【例 6.1-5】 偶數(shù)。% exm060105.m為能被 4整除的偶數(shù)。% A為魔方矩陣% n魔方矩陣的階數(shù)clear clc while 1n=i np ut(請輸入一個能被 4整除的正整數(shù)!n
10、=);if mod(n,4)=0breakend end G=logical(eye(4,4)+rot90(eye(4,4); m=n/4;K=repmat(G,m,m);N=n2;創(chuàng)建n階魔方矩陣,限定條件是n為能被4整除的生成一類魔方矩陣,該魔方矩陣的階 nA=resha pe(1:N,n,n); A(K)=N-A(K)+1驗證所生成的魔方陣正確與否的程序: sO=rou nd( n*( n*n+1)/2);dis p(i nt2str( n), ,i nt2str(s0) Ns0=rou nd(2*( n+1); B=A; SC=sum(A); SR=sum(B); Sd=sum(dia
11、g(A); Sdi=sum(diag(B); LS=SC,SR,Sd,Sdi=s0; NS=rou nd(sum(LS); if NS=Ns0dis p( elsedis p( end階魔方矩陣的標稱和是經(jīng)驗證,A是魔方矩陣。)經(jīng)驗證,A不是魔方矩陣。)指令格式使用說明v=inpu t(message) v=inpu t(message,s)該指令執(zhí)行時,“控制權(quán)”交給鍵盤;待輸 入結(jié)束,按下 Enter鍵,“控制權(quán)”交還 MATLAB。message是提示用的字符串。keyboard遇到keyboard時,將“控制權(quán)”交給鍵盤, 用戶可以從鍵盤輸入各種 MATLAB指令。breakbreak
12、指令,或?qū)е掳撝噶畹?while、for 循環(huán)終止,或在 if - end, switch - case, tr catch中導(dǎo)致中斷。參見例 6.1-5。continue跳過位于它之后的循環(huán)體中其他指令,而執(zhí) 行循環(huán)的下一個迭代.見例6.1-5。p ause p ause(n)第一種格式使程序暫停執(zhí)行,等待用戶按任 意鍵繼續(xù);第二種格式使程序暫停n秒后,再繼續(xù)執(zhí)行。return結(jié)束return指令所在函數(shù)的執(zhí)行,而把控制控制程序流的其它常用指令表6.1-4控制程序流的其它常用指令6.1.4轉(zhuǎn)至主調(diào)函數(shù)或者指令窗。否則,只有待整 個被調(diào)函數(shù)執(zhí)行完后,才會轉(zhuǎn)出。try語句體1 catch語句
13、體2 end語句體1總被執(zhí)行,若沒有錯誤則跳出 try/catch 塊。若語句體1執(zhí)行過程中發(fā)生錯誤,則執(zhí) 行語句體2??梢郧短资褂?。利用try-catch模塊,MATLAB編譯系統(tǒng)發(fā) 現(xiàn)的錯誤將被用戶捕獲,用戶可以控制MATLAB怎樣對發(fā)生的錯誤進行處理。error(e1:%s bad,svar)顯示錯誤信息并退出程序。warning顯示警告信息但不退出程序。dbst op if all error如遇錯誤/警告,則停止執(zhí)行并進入調(diào)試狀 態(tài)6.2腳本文件和函數(shù)文件 注意:用戶自己創(chuàng)建的 M文件的文件名要避免與 MATLAB 的內(nèi)建函 數(shù)和工具箱中的函數(shù)重名,以免發(fā)生內(nèi)置函數(shù)被替換的情況。6.
14、2.1 M腳本文件對于一些比較簡單的問題,從指令窗中直接輸入指令進行計算是十分輕松簡 單的事。但隨指令數(shù)的增加,或隨控制流復(fù)雜度的增加,或重復(fù)計算要求的提 出,直接從指令窗進行計算就顯得煩瑣。而此時腳本文件最為適宜?!澳_本”本身反映這樣一個事實:MATLAB只是按文件所寫的指令執(zhí)行。MATLAB指令集合。 MATLAB基本 只要用戶不使用clear指令加以清除,這些變量腳本文件的特點是: 它只是一串按用戶意圖排列而成的 腳本文件運行后,產(chǎn)生的所有變量都駐留在 工作空間中。將一直保存在基本工作空間但ase works pace中?;究臻g隨 MATLAB的啟動而產(chǎn)生;只有當關(guān)閉 MATLAB 時
15、,該基本空間才被刪除。6.2.2 M函數(shù)文件函數(shù)文件猶如一個“黑箱”。從外界只看到:傳給它的輸入量和送出來的計算結(jié)果。而內(nèi)部運作是藏而不見的。函數(shù)文件的特點是:從形式上看,與腳本文件不同,函數(shù)文件的第一行總是以function引導(dǎo)的“函數(shù)申明行”。該行還羅列出函數(shù)與外界的聯(lián)系的全部“標稱”輸入輸出宗量。但對“輸入輸出宗量”的 標稱數(shù)目并沒有限制,即可以完全沒有輸入輸出宗量,也可以 是任意數(shù)目。MATLAB 允許使用比“標稱數(shù)目”較少的輸入輸出宗量, 實現(xiàn)對函數(shù)的調(diào)用。在一次調(diào)用中所用到的輸入和輸出變量的 個數(shù)可以通過分別調(diào)用函數(shù) nargin 和 nargout 來確定。因為 nargin 和
16、 nargout 是函數(shù)而不是變量,所以用戶不能用諸如 nargin=nargin+pi 之類的語句對它們進行重新賦值。從運行上看,與腳本文件運行不同,每當函數(shù)文件運行, MATLAB 就會專門為它開辟一個臨時工作空間,稱之謂 函數(shù)工 作空間(Function works pace)。所有中間變量都存放在函數(shù)工作 空間中。當執(zhí)行完文件最后一條指令或遇到 return 時,就結(jié)束 該函數(shù)文件的運行,同時該臨時函數(shù)空間及其所有的中間變量 就立即被清除。函數(shù)空間隨具體 M 函數(shù)文件的被調(diào)用而產(chǎn)生,隨調(diào)用結(jié) 束而刪除。函數(shù)空間是相對基本空間獨立的、臨時的。在 MATLAB 整個運行期間,可以產(chǎn)生任意多
17、個臨時函數(shù)空間。假如在函數(shù)文件中, 發(fā)生對某腳本文件的調(diào)用, 那么該腳 本文件運行產(chǎn)生的所有變量都存放于該函數(shù)空間之中,而不是 存放在基本空間。6.2.3 局部變量和全局變量局部(Local)變量中間變量被稱為局部變量。存在于函數(shù)空間內(nèi)部的中間變量,產(chǎn)生于該函數(shù)的運行過程 中,其影響范圍也僅限于該函數(shù)本身。正由于這種空間、時間 上的局部性,全局(Global)變量通過 global 指令, MATLAB 也允許幾個不同的函數(shù)空間以 及基本工作空間共享同一個變量。這種被共享的變量稱為全局 變量。每個希望共享全局變量的函數(shù)或 MATLAB 基本工作空間, 必須逐個用global對具體變量加以專門定
18、義。沒采用 global定 義的函數(shù)或基本工作空間,將無權(quán)享用全局變量。如果某個函數(shù)的運作使全局變量的內(nèi)容發(fā)生了變化,那么其他函數(shù)空間以及基本工作空間中的同名變量也就隨之變化。除非與全局變量聯(lián)系的所有工作空間都被刪除,否則全局變 量依然存在。說明對全局變量的定義必須在該變量被使用之前進行。建議把全局變量的定義放 在函數(shù)體的首行位置。雖然MATLAB對全局變量的名字沒有任何特別的限制,但是為了提高M文件的可讀性,建議選用大寫字符命名全局變量。全局變量損害函數(shù)的封裝性,因此不提倡使用全局變量?;窘M成部分函數(shù)示例函數(shù)頭,定義函數(shù)名和輸入輸出參 數(shù)(僅用于函數(shù)文件)function f=fact(n
19、)help幫助:指M文件最前面連續(xù)的注 釋行,注意空行前也要有注 釋符。命令 helP fact可顯 示這些信息;H1行指M文 件的第一行注釋,用于 ookfor快速查找。H1行% FACT Factorial.% FACT(N) returns N!% FACT(N) is equal to P R0D(1:N).% Exa mples% f=fact(5)% See also P ROD這個不帶%的空行表示 he Ip幫 助結(jié)束普通注釋% Author: WHM文件的一般結(jié)構(gòu)(看 PPT課件)6.2.4%$Version:1.0$ $Date:20036$語句體檢查輸入輸出參數(shù),僅用 于函
20、數(shù)文件(也可以沒有)if nargin=1 |isnumeric(n) |.all(size(n)= 1 1)error(Input must be a. integer.)end功能語句f=p rod(1:n);從結(jié)構(gòu)上看,腳本文件只是比函數(shù)文件少一個 “函數(shù)申明行”。 典型M函數(shù)文件的結(jié)構(gòu)如下:函數(shù)申明行:位于函數(shù)文件的首行,以 function開頭,函數(shù)名以及函數(shù)的輸 入輸出宗量都在這一行定義。H1 行:它是緊隨函數(shù)申明行之后以開頭的第一注釋行。H1行包含:大寫體的函數(shù)文件名;運用關(guān)鍵詞簡要描述的函數(shù)功能。 該H1行供lookfor關(guān)鍵詞查詢和help在線幫助使用。在線幫助文本(HelP
21、 text)區(qū):H1行及其之后的連續(xù)以開頭的所有注釋行構(gòu)成整個在線幫助 文本。它通常包括:函數(shù)輸入輸出宗量的含義,調(diào)用格式說明。編寫和修改記錄:與在線幫助文本區(qū)相隔一個“空”行,也以開頭,標志編 寫及修改該M文件的作者和日期、版本記錄。它用于軟件檔案 管理。函數(shù)體(Function body):為清晰起見,它與前面的注釋以“空”行相隔。這部分內(nèi)容 由實現(xiàn)該M函數(shù)文件功能的 MATLAB指令組成。它接收輸入 宗量,進行程序流控制,得到輸出宗量。若僅從運算角度看,惟有“函數(shù)申明行”和“函數(shù)體”兩部 分是構(gòu)成M函數(shù)文件所必不可少的?!纠?.2-1】編寫一個M函數(shù)文件。它具有以下功能:(A)根 據(jù)指定
22、的半徑,畫出藍色圓周線;( B)可以通過輸入字符串, 改變圓周線的顏色、線型;(C)如果需要輸出圓面積,則繪出 圓。( 1) M 函數(shù)文件function S,L=exm060201(N,R,str)% exm060201.m The area and perimeter of a regular polygon (正多邊形的面積和周長 )%N%R%strtype/color%S%L% exm060201% exm060201(N)形% exm060201(N,R)形% exm060201(N,R,str)正 N 邊形% S=exm060201(.)邊形填色圖% S,L=exm060201(.
23、)應(yīng)正多邊形填色圖The number of sidesThe circumradiusA line specification to determine lineThe area of the regular polygonThe perimeter of the regular polygon 用藍實線畫半徑為 1 的圓 用藍實線畫外接半徑為 1 的正 N 邊用藍實線畫外接半徑為 R 的正 N 邊用 str 指定的線畫外接半徑為 R 的給出多邊形面積 S ,并畫相應(yīng)正多給出多邊形面積S和周長L,并畫相switch nargincase0N=100;R=1;str= -b;case1R=1;
24、str= -b ;case2str=-b ;case3 ;otherwiseerror( 輸入量太多。 ); end;t=0:2*pi/N:2*pi; x=R*sin(t);y=R*cos(t);if nargout=0 plot(x,y,str);elseif nargout2error( 輸出量太多。 ); elseS=N*R*R*sin(2*pi/N)/2;L=2*N*R*sin(pi/N); fill(x,y,str)endaxis equal squarebox onshg (2)調(diào)用指令S,L=exm060201(6,2,-g)6.3 MATLAB 的函數(shù)類別中,函數(shù) 又被細分為:
25、主函數(shù);子函數(shù);嵌套在 MATLAB 函數(shù);私用函數(shù);匿名函數(shù)等。本節(jié)只對主函數(shù)、子函數(shù)及匿 名函數(shù)進行闡述。6.3.1主函數(shù)( Primary function )6.3.2子函數(shù)( Subfunction)【例 6.3-1】編寫一個內(nèi)含子函數(shù)的 M 函數(shù)繪圖文件。( 1)M 函數(shù)文件function Hr=exm060301(flag )% exm060301.m Demo for handles of primary functions and subfunctions% flag 可以取字符串 line 或 circle 。% Hr 子函數(shù) cirline 的句柄 t=(0:50)/5
26、0*2*pi;x=sin(t); y=cos(t); Hr=cirline; feval(Hr,flag,x,y,t) % subfunctionfunction cirline(wd,x,y,t) % cirline(wd,x,y,t) % % % %wd t x y是位于 exm060301.m 函數(shù)體內(nèi)的子函數(shù) 接受字符串 line 或 circle 畫線用的獨立參變量 由 t 產(chǎn)生的橫坐標變量 由 t 產(chǎn)生的縱坐標變量switch wd caselineplot(t, x, b ,t , y, r , LineWidth , 2) casecircleplot(x, y, -g, Li
27、neWidth , 8), axis square off otherwiseerror( 輸入宗量只能取 line 或 circle ! ) end shg( 2) 在命令窗調(diào)用該函數(shù)的命令 HH=exm060301(circle)( 3)直接利用創(chuàng)建的子函數(shù)句柄調(diào)用該主函數(shù)的子函數(shù) t=0:2*pi/5:2*pi;x=cos(t);y=sin(t);%為繪制正五邊形準備數(shù)據(jù)利用句柄繪圖HH(circle,x,y,t) %6.3.3* (根據(jù)學(xué)時選講)匿名函數(shù)(Anonymous function)匿名函數(shù)提供了一種創(chuàng)建簡單程序的方法, 使用它用戶可以不必每次都編寫M 文件。用戶可以在 MA
28、TLAB 的命令窗口或是其他任意 M 文件和腳本文件中 使用匿名函數(shù)。1)創(chuàng)建匿名函數(shù)的一般方法: FH= (arglist) expr2)匿名函數(shù)的調(diào)用格式直接調(diào)用格式間接調(diào)用格式FH(arglist) feval(FH, arglist)匿名函數(shù)算例:10【例 4.1-6】求 s =xydxdy。syms x ys=v pa(i nt(i nt(x八y,x,0,1),y,1,2) s =.40546510810816438197801311546432 format longs_n=dblquad(x,y)x.八y,0,1,1,2)函數(shù)句柄(Function handle)是MATLAB 的一種數(shù)據(jù)類型。 它攜帶著“相應(yīng)函數(shù)創(chuàng)建句柄時的路徑、視野、函數(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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 連云港職業(yè)技術(shù)學(xué)院《體育-臺球》2023-2024學(xué)年第一學(xué)期期末試卷
- 江西現(xiàn)代職業(yè)技術(shù)學(xué)院《音樂選配與編輯》2023-2024學(xué)年第一學(xué)期期末試卷
- 江蘇大學(xué)《水資源系統(tǒng)分析》2023-2024學(xué)年第一學(xué)期期末試卷
- 華東理工大學(xué)《國學(xué)經(jīng)典選讀》2023-2024學(xué)年第一學(xué)期期末試卷
- 隔膜壓縮機開機停機操作規(guī)程
- 湖北工業(yè)職業(yè)技術(shù)學(xué)院《醫(yī)藥學(xué)基礎(chǔ)實驗》2023-2024學(xué)年第一學(xué)期期末試卷
- 遵義醫(yī)科大學(xué)《材料與結(jié)構(gòu)選型》2023-2024學(xué)年第一學(xué)期期末試卷
- 珠海城市職業(yè)技術(shù)學(xué)院《Python程序開發(fā)》2023-2024學(xué)年第一學(xué)期期末試卷
- 重慶旅游職業(yè)學(xué)院《地下水資源勘查與評價》2023-2024學(xué)年第一學(xué)期期末試卷
- 浙江特殊教育職業(yè)學(xué)院《審計理論與方法》2023-2024學(xué)年第一學(xué)期期末試卷
- 2023七年級英語下冊 Unit 3 How do you get to school Section A 第1課時(1a-2e)教案 (新版)人教新目標版
- 泌尿科主任述職報告
- 新零售門店運營管理流程手冊
- 心理學(xué)專業(yè)知識考試參考題庫500題(含答案)(一)
- 2024年浙江高考技術(shù)試題(含答案)
- 資管行業(yè)投研一體化建設(shè)
- 提高保險公司客戶投訴處理能力的整改措施
- 物業(yè)費收取協(xié)議書模板
- 電工(中級工)理論知識練習(xí)題(附參考答案)
- 起重機的維護保養(yǎng)要求與月度、年度檢查記錄表
- 消防設(shè)施維護保養(yǎng)記錄表
評論
0/150
提交評論