MATLAB編程基礎(chǔ)第11講M文件、底層IO命令的數(shù)據(jù)輸入與輸出程序優(yōu)化_第1頁
MATLAB編程基礎(chǔ)第11講M文件、底層IO命令的數(shù)據(jù)輸入與輸出程序優(yōu)化_第2頁
MATLAB編程基礎(chǔ)第11講M文件、底層IO命令的數(shù)據(jù)輸入與輸出程序優(yōu)化_第3頁
MATLAB編程基礎(chǔ)第11講M文件、底層IO命令的數(shù)據(jù)輸入與輸出程序優(yōu)化_第4頁
MATLAB編程基礎(chǔ)第11講M文件、底層IO命令的數(shù)據(jù)輸入與輸出程序優(yōu)化_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、1第十一講第十一講程序流控制、 M文件、底層命令的數(shù)據(jù)輸入與輸出、程序優(yōu)化梁丙臣25.2.5 程序流控制n1. return語句n用來終止當(dāng)前正在執(zhí)行的函數(shù)中的命令,返回調(diào)用它的函數(shù),也可用于終止鍵盤輸入的模式,把控制權(quán)交給鍵盤。3例5-15 return控制nA=1,2,3;4,5,6nx,y=size(A)nif isempty (A)ndisp(Matrix A is empty);nreturnnelseif (x=y)ndisp(Matrix A is not a square);nreturnnelsendisp(Matrix A is a square);nendn 42. ec

2、ho命令necho命令可使文件在執(zhí)行的過程中可見necho on 切換到顯示其后所有被執(zhí)行命令狀態(tài)necho off切換到顯示其后所有被執(zhí)行命令文件指令不被顯示的狀態(tài)3. Pausen使程序運(yùn)行暫停,等待用戶按任何鍵繼續(xù)。54. Break語句n當(dāng)條件滿足時(shí),可使當(dāng)條件滿足時(shí),可使while, for結(jié)構(gòu)的循環(huán)提前終結(jié)構(gòu)的循環(huán)提前終止。止。n例5-16 計(jì)算110的和necho offnn=1nsum=1nwhile n=1&n5n%break;n%endnn=n+1;nsum=sum+n;nendnsumnn 6一、一、MATLBA程序的基本設(shè)計(jì)原則程序的基本設(shè)計(jì)原則1、后面的內(nèi)容是

3、程序的注解、后面的內(nèi)容是程序的注解,注解使程序更具可讀性。,注解使程序更具可讀性。2、在主程序開頭用、在主程序開頭用clear指令清除變量,以消除工作空間中其他變量對(duì)指令清除變量,以消除工作空間中其他變量對(duì)程序運(yùn)行的影響。程序運(yùn)行的影響。但注意在子程序中不要用但注意在子程序中不要用clear。 3、參數(shù)值要集中放在程序的開始部分參數(shù)值要集中放在程序的開始部分,以便維護(hù)。應(yīng)充分利用,以便維護(hù)。應(yīng)充分利用MATLAB工具箱提供的指令來執(zhí)行所要進(jìn)行的運(yùn)算,在語句行之后輸工具箱提供的指令來執(zhí)行所要進(jìn)行的運(yùn)算,在語句行之后輸入分號(hào)使其及中間結(jié)果不在屏幕上顯示,以提高執(zhí)行速度。入分號(hào)使其及中間結(jié)果不在屏幕

4、上顯示,以提高執(zhí)行速度。4、input指令可以用來輸入一些臨時(shí)的數(shù)據(jù);而對(duì)于大量參數(shù),則通過指令可以用來輸入一些臨時(shí)的數(shù)據(jù);而對(duì)于大量參數(shù),則通過建立一個(gè)存儲(chǔ)參數(shù)的子程序,在主程序中用子程序的名稱來調(diào)用。建立一個(gè)存儲(chǔ)參數(shù)的子程序,在主程序中用子程序的名稱來調(diào)用。5.3 M文件文件75、程序盡量模塊化,也就是、程序盡量模塊化,也就是采用主程序調(diào)用子程序的采用主程序調(diào)用子程序的方法方法,將所有子程序合并在一起來執(zhí)行全部的操作。,將所有子程序合并在一起來執(zhí)行全部的操作。6、充分利用、充分利用Debugger來進(jìn)行程序的調(diào)試(設(shè)置斷點(diǎn)、來進(jìn)行程序的調(diào)試(設(shè)置斷點(diǎn)、單步執(zhí)行、連續(xù)執(zhí)行)。單步執(zhí)行、連續(xù)執(zhí)

5、行)。7、設(shè)置好設(shè)置好MATLAB的工作路徑,以便程序運(yùn)行的工作路徑,以便程序運(yùn)行。8n進(jìn)入進(jìn)入MATLAB的的Editor/Debugger窗口來編輯程序窗口來編輯程序 (edit *.m)n在編輯環(huán)境中,文字的不同顏色顯示表明文字的不同屬性。在編輯環(huán)境中,文字的不同顏色顯示表明文字的不同屬性。綠色:注解綠色:注解;黑色:程序主體黑色:程序主體;紅色:屬性值的設(shè)定;紅色:屬性值的設(shè)定;藍(lán)藍(lán)色:控制流程。色:控制流程。n在運(yùn)行程序之前,必須設(shè)置好在運(yùn)行程序之前,必須設(shè)置好MATLAB的工作路徑,的工作路徑,使得使得所要運(yùn)行的程序及運(yùn)行程序所需要的其他文件處在當(dāng)前目所要運(yùn)行的程序及運(yùn)行程序所需要

6、的其他文件處在當(dāng)前目錄之下,只有這樣,才可以使程序得以正常運(yùn)行。否則可錄之下,只有這樣,才可以使程序得以正常運(yùn)行。否則可能導(dǎo)致無法讀取某些系統(tǒng)文件或數(shù)據(jù),從而程序無法執(zhí)行。能導(dǎo)致無法讀取某些系統(tǒng)文件或數(shù)據(jù),從而程序無法執(zhí)行。n通過通過cd指令在命令窗口中可以更改、顯示當(dāng)前工作路徑。指令在命令窗口中可以更改、顯示當(dāng)前工作路徑。n通過路徑瀏覽器(通過路徑瀏覽器(path browser)也可以進(jìn)行設(shè)置)也可以進(jìn)行設(shè)置二、二、M文件的編輯及文件的編輯及MATLABMATLAB工作路徑的設(shè)置工作路徑的設(shè)置92、程序文件、程序文件n以以.m格式進(jìn)行存取格式進(jìn)行存取,包含一連串的,包含一連串的MATLAB

7、指令和必要指令和必要的注解。需要在工作空間中創(chuàng)建并獲取變量,也就是說處的注解。需要在工作空間中創(chuàng)建并獲取變量,也就是說處理的數(shù)據(jù)為命令窗口中的數(shù)據(jù),理的數(shù)據(jù)為命令窗口中的數(shù)據(jù),沒有輸入?yún)?shù),也不會(huì)返沒有輸入?yún)?shù),也不會(huì)返回參數(shù)?;貐?shù)。(類同于批處理文件類同于批處理文件)n程序運(yùn)行時(shí)只需在工作空間中鍵入其名稱即可。程序運(yùn)行時(shí)只需在工作空間中鍵入其名稱即可。三、三、MATLABMATLAB的程序類型的程序類型MATLABMATLAB的程序類型有三種,一種是在命令窗口下執(zhí)行的的程序類型有三種,一種是在命令窗口下執(zhí)行的腳本腳本M M文件文件;另外一種是可以存取的;另外一種是可以存取的M M文件,也即

8、文件,也即程序文程序文件件( (命令文件命令文件) );最后一種是;最后一種是函數(shù)(函數(shù)(functionfunction)文件。)文件。1 1、腳本、腳本M M文件文件( (歷史命令歷史命令) )在命令窗口中輸入并執(zhí)行,它所用的變量都要在工作空間中在命令窗口中輸入并執(zhí)行,它所用的變量都要在工作空間中獲取,不需要輸入輸出參數(shù)的調(diào)用,退出獲取,不需要輸入輸出參數(shù)的調(diào)用,退出MATLABMATLAB后就釋放了。后就釋放了。10(1)函數(shù)定義行()函數(shù)定義行(關(guān)鍵字關(guān)鍵字function)nfunction out1,out2,.=filename(in1,in2,.)n輸入和輸出(返回)的參數(shù)個(gè)數(shù)

9、分別由輸入和輸出(返回)的參數(shù)個(gè)數(shù)分別由nargin和和nargout兩兩個(gè)個(gè)MATLAB保留的變量來給出。(保留的變量來給出。(支持多態(tài)支持多態(tài))(2)第一行幫助行,即)第一行幫助行,即H1行行n以(以(%)開頭,作為)開頭,作為lookfor指令搜索的行指令搜索的行3 3、函數(shù)文件、函數(shù)文件 例例myhilb1.m myhilb.m 同樣以同樣以.m.m格式存取,但文件名必須與函數(shù)名相同,函數(shù)接格式存取,但文件名必須與函數(shù)名相同,函數(shù)接受輸入?yún)?shù)受輸入?yún)?shù),然后執(zhí)行并輸出結(jié)果。用,然后執(zhí)行并輸出結(jié)果。用helphelp命令可以顯示命令可以顯示它的注釋說明。它的注釋說明。 具有標(biāo)準(zhǔn)的基本結(jié)構(gòu)

10、。具有標(biāo)準(zhǔn)的基本結(jié)構(gòu)。11(3)函數(shù)體說明及有關(guān)注解)函數(shù)體說明及有關(guān)注解n以(以(%)開頭,用以說明函數(shù)的作用及有關(guān)內(nèi)容)開頭,用以說明函數(shù)的作用及有關(guān)內(nèi)容n如果不希望顯示某段信息,可在它的前面加空行如果不希望顯示某段信息,可在它的前面加空行(4)函數(shù)體語句)函數(shù)體語句n函數(shù)體內(nèi)使用的函數(shù)體內(nèi)使用的除返回和輸入變量這些在除返回和輸入變量這些在function語句中直接引用的變量以外的所有變量都是局部變語句中直接引用的變量以外的所有變量都是局部變量(即需即用),即在該函數(shù)返回之后,這些變量量(即需即用),即在該函數(shù)返回之后,這些變量會(huì)自動(dòng)在會(huì)自動(dòng)在MATLAB的工作空間中清除掉。如果希望的工作

11、空間中清除掉。如果希望這些中間變量成為在整個(gè)程序中都起作用的變量,這些中間變量成為在整個(gè)程序中都起作用的變量,則可以將它們?cè)O(shè)置為全局變量。則可以將它們?cè)O(shè)置為全局變量。 (global)12 1、子程序與主程序之間的數(shù)據(jù)是、子程序與主程序之間的數(shù)據(jù)是通過參數(shù)進(jìn)行傳遞通過參數(shù)進(jìn)行傳遞的,子程的,子程序應(yīng)用主程序傳遞來的參數(shù)進(jìn)行計(jì)算后,將結(jié)果返回主程序應(yīng)用主程序傳遞來的參數(shù)進(jìn)行計(jì)算后,將結(jié)果返回主程序。序。 可利用可利用return命令終止當(dāng)前子程序。命令終止當(dāng)前子程序。 四、聲明子程序(函數(shù)程序)變量四、聲明子程序(函數(shù)程序)變量2 2、如果一個(gè)函數(shù)內(nèi)的變量沒有特別聲明,那么這個(gè)變量只、如果一個(gè)函

12、數(shù)內(nèi)的變量沒有特別聲明,那么這個(gè)變量只在函數(shù)內(nèi)部使用,即為局部變量。在函數(shù)內(nèi)部使用,即為局部變量。如果兩個(gè)或多個(gè)函數(shù)共用如果兩個(gè)或多個(gè)函數(shù)共用一個(gè)變量(或者說在子程序中也要用到主程序中的變量,注一個(gè)變量(或者說在子程序中也要用到主程序中的變量,注意不是參數(shù)),那么可以用意不是參數(shù)),那么可以用globalglobal來將它聲明為全局變量。來將它聲明為全局變量。 全局變量的使用可以減少參數(shù)傳遞,合理利用全局變量可全局變量的使用可以減少參數(shù)傳遞,合理利用全局變量可以提高程序執(zhí)行的效率。以提高程序執(zhí)行的效率。135.4 底層I/O命令的數(shù)據(jù)輸入與輸出n5.4.1 數(shù)據(jù)的輸入n1 直接生成數(shù)據(jù)法n例5

13、18 直接在命令窗口輸入nA=3 2 1;8 5 2;9 6 3145.4.1 數(shù)據(jù)的輸入n2 使用M文件將文件中的數(shù)據(jù)輸入:n建立一個(gè)M文件,在文件中輸入數(shù)據(jù)。n例519 M文件輸入數(shù)組nfunction matrix1nB=3 2 1;8 5 2;9 6 3;1 1 1155.4.1 數(shù)據(jù)的輸入n3 使用load命令載入數(shù)據(jù):n常用調(diào)用格式load filename.matn例520 load文件nData_B.txtn3 2 1n8 5 2n9 6 3nload Data_B.txtnY=Data_B.3165.4.2 數(shù)據(jù)的輸出n數(shù)據(jù)的輸出主要有3種方式n(1)直接在終端上顯示結(jié)果n(

14、2)diary命令n用來將命令控制窗口中的有關(guān)文件內(nèi)容以文本的形式存入一個(gè)指定文件中,以后可以整理編輯成所需的形式。ndiary filename %將內(nèi)容記錄到文件名為將內(nèi)容記錄到文件名為filename的文件中的文件中ndiary on 再打開上面曾打開過的diary文件,并返回到diary命令原處ndiary off %暫停執(zhí)行diary命令17(3)save命令nsave filename options 保存當(dāng)前工作空間的所有變量到filename制定的文件中,此文件后綴名通常為mat。如果不指定filename變量,則會(huì)默認(rèn)保存到matlab.mat這個(gè)文件中。n具有一下optio

15、ns:n-append 在已經(jīng)存在的mat文件中保存此變量。n-format 確定要保存變量的格式,有下面這些格式:n-ascii 8位ASCII格式.-ascii -tabs 8位ASCII格式以tab位分隔符.-ascii -double 16位ASCII格式.-ascii -double -tabs 16位ASCII格式以tab位分隔符.-mat 默認(rèn)格式n下面使一些例子:n1:save test.mat 把當(dāng)前工作空間的所有變量保存到test.matn2:save(d:mymfilesjune10,vol,temp,-ASCII) 把變量vol和temp保存到June10中,使用ASC

16、II 格式18例521nwhondiary data2.mnb=1:10nb1=eye(4);nb2=magic(5);ndiary offnwhonc=b2.2ntype data2.mnb=1:10nb1=eye(4);nb2=magic(5);ndiary offndiary on nb3=5:15ndiary offntype data2.mnb=1:10nb1=eye(4);nb2=magic(5);ndiary offnb3=5:15ndiary off195.4.3 文件讀寫的I/O命令函數(shù)n1 fopenn常用調(diào)用格式:nfn=fopen(filename,permission

17、)nfopent(all)nfilename,permission=fopen(fn)nfopen(filename)n(1)filename 要打開的文件名n(2)permission 指定的操作方式,常用的有r,w,a(追加)等。Rb,wb,ab針對(duì)二進(jìn)制的文件。Rt wt at針對(duì)文本格式的文件。n(3)fn 指的是被打開文件的文件代號(hào)。如果打開成功為正整數(shù)。否則為1。n(4)all指列出用于當(dāng)前已經(jīng)打開的除標(biāo)準(zhǔn)文件外全部文件的文件代號(hào)。205.4.3 文件讀寫的I/O命令函數(shù)n2 fclosen常用調(diào)用格式:nfclose(fn)nfclose(all)n(1)fn 指的是關(guān)閉文件文件

18、代號(hào)為fn的文件。n(2)all關(guān)閉代號(hào)為0,1,2之外所有已經(jīng)打開的文件。215.4.3 文件讀寫的I/O命令函數(shù)n3 fprintfn常用調(diào)用格式:nfprintf(fn,format,A,)將輸出表中的矩陣A等按照format做指定的格式輸出代號(hào)為fn的文件中。例523fprintf函數(shù)應(yīng)用nx = 0:.1:1; y = x; exp(x);n fid = fopen(exp.txt,w);n fprintf(fid,%6.2f %12.8fn,y);n fclose(fid);n 0.00 1.00000000 0.10 1.10517092 0.20 1.22140276 0.30

19、 1.34985881 0.40 1.49182470 0.50 1.64872127 0.60 1.82211880 0.70 2.01375271 0.80 2.22554093 0.90 2.45960311 1.00 2.71828183n 225.4.3 文件讀寫的I/O命令函數(shù)n4 fscanfn常用調(diào)用格式:nA,cn=fscanf(fn,format,size)將文件代號(hào)為fn的文件讀入到數(shù)組A中。5 fread函數(shù)A,cn=fread(fn,size)從代號(hào)為fn的文件中讀取二進(jìn)制數(shù)據(jù)到數(shù)組A,參數(shù)如同fscanf6 fwrite函數(shù)cn=fwrite(fn,A)將數(shù)組A的元

20、素寫入代號(hào)為fn的文件中。7 fgetl函數(shù)fgetl(fn):從代號(hào)為fn的文件中讀入一行字符串8 fseek函數(shù)status=fseek(fn,offset,origin):定位代號(hào)為fn的文件位置指針status,參數(shù)origin為所指定的位置,offset為偏移量。9 ftell函數(shù)position=ftell(fn):返回fn文件位置指針status的當(dāng)前位置。如果訪問失敗將返回1。235.5 程序的優(yōu)化n1 環(huán)向量化n把循環(huán)向量化把循環(huán)向量化,能縮短程序的長度,提高程序的執(zhí)行效率。n2 預(yù)定義變量nMatlab將任何一個(gè)變量都看成一個(gè)矩陣一個(gè)變量都看成一個(gè)矩陣。245.6 面向?qū)ο?/p>

21、的編程綜述n1 類和對(duì)象n類是抽象的概念,由對(duì)象集合而成。表征著各個(gè)對(duì)象所共同具有的數(shù)據(jù)結(jié)構(gòu)。nisa(),iscell(),ischar()等邏輯判斷函數(shù)n2 面向?qū)ο缶幊痰膬?nèi)涵n充分利用“類”“對(duì)象”進(jìn)行的編程成為面向?qū)ο缶幊?。n(1)創(chuàng)建類目錄n(2)選定待建類的數(shù)據(jù)結(jié)構(gòu)n(3)對(duì)象構(gòu)造函數(shù)n(4)顯示函數(shù)n(5)與其他類之間的轉(zhuǎn)換函數(shù)25n% cfwave.mn% curve fitting for 1/nt wave heightn% compare the expected maximum wave heightn%nn=10:1:1000;nra=nthwave(n);nhrms

22、=1;nhs=hrms*nthwave(3);nr = hrms / hs % it was found that Hrms/Hs = 0.7063nhu=hrms*nthwave(n);nlogn=log(n);ny=polyval(polyfit(sqrt(logn),hu,2),sqrt(logn); n%4.2164e-002 7.2920e-001 6.0004e-001 from polyfit(sqrt(logn),hu,2), if n=2:1:1000npolyfit(sqrt(logn),hu,2)nloglog(n,abs(1-y./hu);n%n% hmax1=0.70

23、7*hs* ( sqrt(log(n); n% hmax2= hmax1 + 0.707*hs*0.5772 ./ (2 * sqrt(log(n) ) ;n% dif1 = hmax1 - hu;n% dif2 = hmax2 - hu;n% dif3 = hmax2 - hmax1;n% plot(n,dif1,-,n,dif2,-.,n,dif3,-)26nfunction hn = nthwave(n)n%-n% function hn = nthwave(n)n%n% Return the ratio of 1/n(th) and rms wave height based on n

24、% Rayleigh model. (See D&D for analytical formula)n%n% The input n can be an arrayn%n% If n =3, it returns the ratio of significant wave heightn% with the rms wave height (hn 1.416)n%n% If n =1, it returns the ratio of mean wave heightn% with the rms wave height (hn 0.886)n%n%-nht = sqrt(log(n);nhn = ht + sqrt(pi)/2 .*n .*erfc(ht);27nfunction Kr,alpha = refra(d,T,alpha_o)n%-n% function Kr,alpha = refra(d,T,alpha_o)n%n% Calculate refraction coefficient and angle of incidencen% (between wave crests and bottom contours) for parallel, n% straigh

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論