第二章Matlab程序設(shè)計(jì)_第1頁
第二章Matlab程序設(shè)計(jì)_第2頁
第二章Matlab程序設(shè)計(jì)_第3頁
第二章Matlab程序設(shè)計(jì)_第4頁
第二章Matlab程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩60頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第二章 程序設(shè)計(jì)聲明和致謝 課件取自網(wǎng)絡(luò)電子課件,只進(jìn)行了很少的編輯和加工,對(duì)不知名的網(wǎng)絡(luò)電子課件作者表示感謝!前言o現(xiàn)代大地測量領(lǐng)域的大型解算軟件,如GPS和InSAR解算軟件等,一般按以下方式完成解算:n數(shù)據(jù)文件編輯n參數(shù)文件配置n軟件解算并保存結(jié)果到文件n讀取解算結(jié)果文件進(jìn)行分析和可視化顯示(繪圖)o文件操作是大型程序設(shè)計(jì)中很重要的一個(gè)內(nèi)容,繪圖是結(jié)果表達(dá)的重要手段提綱提綱 o1.文件操作n1.1 文件的打開與關(guān)閉n1.2 文件的讀寫操作n1.3 數(shù)據(jù)文件定位寫操作o2. 程序設(shè)計(jì)n2.1 M文件n2.2 函數(shù)文件n2.3 程序設(shè)計(jì)n2.4 程序調(diào)試Matlab環(huán)境下的文件與其它系統(tǒng)一樣

2、,也有二類文件組成,一是文件,又稱M文件,另一類是數(shù)據(jù)文件。系統(tǒng)除提供了文件的一般管理功能外,還提供了對(duì)數(shù)據(jù)文件進(jìn)行操作的特殊功能函數(shù)。數(shù)據(jù)文件的打開與關(guān)閉數(shù)據(jù)文件的打開與關(guān)閉Matlab提供了對(duì)數(shù)據(jù)文件建立、打開、讀、寫以及關(guān)閉等一系列函數(shù),數(shù)據(jù)文件一般存放在磁盤等介質(zhì)上,用文件名標(biāo)識(shí),系統(tǒng)對(duì)文件名沒有特殊要求。文件數(shù)據(jù)格式有二種形式,一是二進(jìn)制格式文件,二是ASCII文本文件,系統(tǒng)對(duì)這兩類文件提供了不同的讀寫功能函數(shù)。打開文件打開文件在讀寫文件之前,必須先用fopen命令打開一個(gè)文件,并指定允許對(duì)該文件進(jìn)行的操作。文件操作結(jié)束后,應(yīng)及時(shí)關(guān)閉文件,以免數(shù)據(jù)的丟失或誤修改。fopen函數(shù)格式為

3、:Fid= fopen(filename,permission)打開文件打開文件 其中filename為文件名,permission為文件格式,可以是下列格式之一:or 打開文件,讀數(shù)據(jù),文件必須存在。ow 打開文件,寫數(shù)據(jù),若文件不存在,系統(tǒng)會(huì)自動(dòng)建立。oa 打開文件,在文件末尾添加數(shù)據(jù)。or+ 打開文件,可以讀和寫數(shù)據(jù),文件必須存在。ow+ 打開文件,供讀與寫數(shù)據(jù)用,會(huì)刪除以前數(shù)據(jù)。oa+ 打開文件,供讀與添加數(shù)據(jù)用。oW 打開文件供寫數(shù)據(jù)用,無自動(dòng)刷新功能。oA 打開文件供添加數(shù)據(jù)用,無自動(dòng)刷新功能。打開文件打開文件例如:打開一個(gè)名為std.dat的數(shù)據(jù)文件并進(jìn)行讀操作,其命令格式為:F

4、id=fopen( std.dat, r )上述打開格式均為二進(jìn)制格式,如果想用ASCII文本格式,則必須在格式字符串中加上字符t,例如用r t表示以ASCII格式打開供讀操作的數(shù)據(jù)文件。關(guān)閉文件關(guān)閉文件文件在進(jìn)行完讀、寫等操作后,應(yīng)及時(shí)關(guān)閉,以保證文件的安全可靠。關(guān)閉文件命令格式為:Sta=fclose(Fid) 關(guān)閉Fid所表示的文件Sta表示關(guān)閉文件操作的返回代碼,若關(guān)閉成功,返回0,否則返回1。提綱提綱 o1.文件操作n1.1 文件的打開與關(guān)閉n1.2 文件的讀寫操作n1.3 數(shù)據(jù)文件定位寫操作o2. 程序設(shè)計(jì)n2.1 M文件n2.2 函數(shù)文件n2.3 程序設(shè)計(jì)n2.4 程序調(diào)試讀二進(jìn)

5、制數(shù)據(jù)文件讀二進(jìn)制數(shù)據(jù)文件fread 讀二進(jìn)制數(shù)據(jù)文件。格式為:A,COUNT=fread(Fid,size,precision)其中A為數(shù)據(jù)矩陣,COUNT返回所讀取的數(shù)據(jù)元素個(gè)數(shù)。size為可選項(xiàng),若不選用則讀取整個(gè)文件內(nèi)容,若選用它的值可以是下列值:讀二進(jìn)制數(shù)據(jù)文件讀二進(jìn)制數(shù)據(jù)文件N 讀取 N個(gè)元素到一個(gè)列向量。inf 讀取整個(gè)文件。M,N 讀數(shù)據(jù)到MN的矩陣中,數(shù)據(jù)按列存放。讀二進(jìn)制數(shù)據(jù)文件讀二進(jìn)制數(shù)據(jù)文件precision用于控制所讀數(shù)據(jù)的精度格式。缺省格式為uchar,即無符號(hào)字符格式。例如:Fid=fopen(std.dat, r); A=fread(Fid, 100, long

6、); Sta=fclose(fid);以讀數(shù)據(jù)方式打開數(shù)據(jù)文件std.dat,并按長整型數(shù)據(jù)格式讀取文件的前100個(gè)數(shù)據(jù)放入向量A,然后關(guān)閉文件。寫二進(jìn)制數(shù)據(jù)文件寫二進(jìn)制數(shù)據(jù)文件fwrite 函數(shù)以二進(jìn)制格式向數(shù)據(jù)文件寫數(shù)據(jù),其格式為:COUNT=fwrite (Fid, A, precision)例如:Fid=fopen(magic5.bin, wb);fwrite(Fid, magic, int32);上述語句將矩陣magic中的數(shù)據(jù)寫入文件magic5.bin中,數(shù)據(jù)格式為32位整型二進(jìn)制格式。寫二進(jìn)制數(shù)據(jù)文件寫二進(jìn)制數(shù)據(jù)文件【例例】建立一數(shù)據(jù)文件test.dat,用于存放矩陣A的數(shù)據(jù)。

7、已知 A=-0.6515 -0.2727 -0.4354 -0.3190 -0.9047 -0.7534 -0.4567 -0.3212 -0.4132 -0.3583 -0.9264 -0.8173 -0.7823 -0.3265 -0.0631 -0.1735 -0.7373 -0.0972 -0.3267 -0.6298 -0.4768 -0.6773 -0.6574 -0.1923 -0.4389寫二進(jìn)制數(shù)據(jù)文件寫二進(jìn)制數(shù)據(jù)文件Fid=fopen(test.dat, w)cnt=fwrite(Fid, A, float)fclose(Fid)程序段將矩陣A的數(shù)據(jù)以二進(jìn)制浮點(diǎn)數(shù)格式寫入文

8、件test.dat中。Fid=fopen(test.dat, r)B,cnt=fread(Fid, 5,inf, float)fclose(Fid)讀取文件test.dat的內(nèi)容。讀文本文件讀文本文件fscanf 讀ASCII文本文件A,COUNT= fscanf (Fid, format, size)其中A為數(shù)據(jù)矩陣,用以存放讀取的數(shù)據(jù),COUNT返回所讀取的數(shù)據(jù)元素個(gè)數(shù)。format用以控制讀取的數(shù)據(jù)格式,由%加上格式符組成,格式符為:d, i, o, u, x, e, f, g, s, c與. . . 讀文本文件讀文本文件 例如:s=fscanf(fid, %s) 讀取一個(gè)字符串a(chǎn)=fs

9、canf(fid, %5d) 讀取5位數(shù)的整數(shù)b= fscanf(fid, %6.2d) 讀取浮點(diǎn)數(shù)寫文本文件寫文本文件fprintf 寫ASCII數(shù)據(jù)文件,其格式為: COUNT= fprintf(Fid, format, A,)其中A為要寫入文件的數(shù)據(jù)矩陣,先按format格式化數(shù)據(jù)矩陣A,后寫入到Fid所指定的文件。例如:x = 0: 0.1: 1; y = x; exp(x); Fid = fopen(exp.txt, w); fprintf(Fid,%6.2f %12.8fn,y); fclose(Fid);提綱提綱 o1.文件操作n1.1 文件的打開與關(guān)閉n1.2 文件的讀寫操作n

10、1.3 數(shù)據(jù)文件定位寫操作o2. 程序設(shè)計(jì)n2.1 M文件n2.2 函數(shù)文件n2.3 程序設(shè)計(jì)n2.4 程序調(diào)試文件指針移動(dòng)fseek函數(shù)移動(dòng)文件位置指針,格式為:status=fseek(Fid, offset, origin) 其中Fid為文件句柄,offset表示位置指針相對(duì)移動(dòng)的字節(jié)數(shù),若為正整數(shù)表示向文件尾方向移動(dòng),若為負(fù)整數(shù)表示向文件頭方向移動(dòng),origin表示位置指針移動(dòng)的參照位置,它的取值有三種可能:cof 表示文件的當(dāng)前位置,bof 表示文件的開始位置,eof 表示文件的結(jié)束位置。若定位成功status返回值為0,否則返回值為1。文件指針的當(dāng)前位置ftell函數(shù)返回文件指針的

11、當(dāng)前位置。其格式為: position=ftell (Fid)返回值為從文件開始到指針當(dāng)前位置的字節(jié)數(shù)。若返回值為1表示獲取文件當(dāng)前位置失敗?!纠肯率龀绦蚨握f明了函數(shù)fseek和ftell的使用。 a=1: 5; Fid=fopen(fdat.bin, w); 以寫方式打開文件fdat.bin fwrite(Fid, a, int16 ); 將a中的5個(gè)數(shù)據(jù)元素分別以雙字節(jié)整型格式寫入 status=fclose(Fid); 文件fdat.bin Fid=fopen(fdat.bin, r); 以讀數(shù)據(jù)方式打開文件status=fseek(Fid, 6, bof); 將文件數(shù)據(jù)指針從開始位

12、置向尾部移動(dòng)6個(gè)字節(jié)four=fread(Fid, 1, int16); 讀取當(dāng)前數(shù)據(jù),即第4個(gè)數(shù)據(jù),并移動(dòng)指針到下一個(gè)數(shù)據(jù)position=ftell(Fid); eight=fread(Fid, 1, int16); 讀取第5個(gè)數(shù)據(jù)status=fclose(Fid);提綱提綱 o1.文件操作n1.1 文件的打開與關(guān)閉n1.2 文件的讀寫操作n1.3 數(shù)據(jù)文件定位寫操作o2. 程序設(shè)計(jì)n2.1 M文件n2.2 函數(shù)文件n2.3 程序設(shè)計(jì)n2.4 程序調(diào)試MATLAB有兩種工作方式:交互式的命令行工作方式M文件的程序工作方式o用MATLAB語言編寫的程序,稱為M文件。o M文件可以根據(jù)調(diào)用方

13、式的不同分為兩類:命令文件(Script File)和函數(shù)文件(Function File)。n命令文件:不返回輸出參數(shù),可以執(zhí)行。n函數(shù)文件:可返回輸出參數(shù),不能執(zhí)行,只能調(diào)用。M文件o建立新的M文件: 從MATLAB命令窗口的File菜單中選擇New菜單項(xiàng),再選擇M-file命令。M文件的建立與編輯o編輯已有的M文件: 從MATLAB命令窗口的Flie菜單中選擇Open M-file命令。o將需要運(yùn)行的命令編輯到一個(gè)命令文件中,然后在MATLAB命令窗口輸入該命令文件的名字,就會(huì)順序執(zhí)行命令文件中的命令。【例】 建立一個(gè)命令文件將變量a,b的值互換。 e31m文件: a=1:9; b=11

14、,12,13;14,15,16;17,18,19; c=a;a=b;b=c; a b 在MATLAB的命令窗口中輸入e31,將會(huì)執(zhí)行該命令文件。命令文件【例】建立命令文件將華氏溫度建立命令文件將華氏溫度f轉(zhuǎn)換為攝氏溫度轉(zhuǎn)換為攝氏溫度c 。f2c.m文件: clear; %清除工作空間中的變量f=input(Input Fahrenheit temperature:);c=5*(f-32)/9在MATLAB的命令窗口中輸入f2c,將會(huì)執(zhí)行該命令文件,執(zhí)行情況為:Input Fahrenheit temperature:73c = 22.7778命令文件提綱提綱 o1.文件操作n1.1 文件的打開

15、與關(guān)閉n1.2 文件的讀寫操作n1.3 數(shù)據(jù)文件定位寫操作o2. 程序設(shè)計(jì)n2.1 M文件n2.2 函數(shù)文件n2.3 程序設(shè)計(jì)n2.4 程序調(diào)試o函數(shù)文件是另一種形式的M文件,每一個(gè)函數(shù)文件都定義一個(gè)函數(shù)。事實(shí)上,MATLAB提供的標(biāo)準(zhǔn)函數(shù)大部分都是由函數(shù)文件定義的。函數(shù)文件函數(shù)文件由function語句引導(dǎo),其格式為: function 輸出形參表=函數(shù)名(輸入形參表) 注釋說明部分 函數(shù)體注:其中函數(shù)名的命名規(guī)則與變量名相同。輸入形參為函數(shù)的輸入?yún)?shù),輸出形參為函數(shù)的輸出參數(shù)。當(dāng)輸出形參多于1個(gè)時(shí),則應(yīng)該用方括號(hào)括起來。函數(shù)文件格式 【例例】 編寫函數(shù)文件求半徑為編寫函數(shù)文件求半徑為r的圓

16、的面積和周長。的圓的面積和周長。 函數(shù)文件如下: function s,p=fcircle(r)%CIRCLE calculate the area and perimeter of a circle of radii r%r 圓半徑%s 圓面積%p 圓周長%2004年7月30日編s=pi*r*r;p=2*pi*r;函數(shù)調(diào)用的一般格式是:函數(shù)調(diào)用的一般格式是: 輸出實(shí)參表輸出實(shí)參表=函數(shù)名函數(shù)名(輸入實(shí)參表輸入實(shí)參表) 要注意的是,函數(shù)調(diào)用時(shí)各實(shí)參出現(xiàn)的順序、個(gè)數(shù),要注意的是,函數(shù)調(diào)用時(shí)各實(shí)參出現(xiàn)的順序、個(gè)數(shù),應(yīng)與函數(shù)定義時(shí)形參的順序、個(gè)數(shù)一致,否則會(huì)出錯(cuò)。應(yīng)與函數(shù)定義時(shí)形參的順序、個(gè)數(shù)一致,

17、否則會(huì)出錯(cuò)。函數(shù)調(diào)用時(shí),先將實(shí)參傳遞給相應(yīng)的形參,從而實(shí)現(xiàn)函數(shù)調(diào)用時(shí),先將實(shí)參傳遞給相應(yīng)的形參,從而實(shí)現(xiàn)參數(shù)傳遞,然后再執(zhí)行函數(shù)的功能。參數(shù)傳遞,然后再執(zhí)行函數(shù)的功能。 s,p=fcircle(5)s = 78.5398p = 31.4159函數(shù)調(diào)用o 在MATLAB中,全局變量用命令global定義。函數(shù)文件的內(nèi)部變量是局部的,與其他函數(shù)文件及MATLAB工作空間相互隔離。但是,如果在若干函數(shù)中,都把某一變量定義為全局變量,那么這些函數(shù)將公用這一個(gè)變量。全局變量的作用域是整個(gè)MATLAB工作空間,即全程有效。所有的函數(shù)都可以對(duì)它進(jìn)行存取和修改。因此,定義全局變量是函數(shù)間傳遞信息的一種手段。局

18、部變量與全局變量【例】 全局變量應(yīng)用示例先建立函數(shù)文件wadd.m,該函數(shù)將輸入的參數(shù)加權(quán)相加。function f=wadd(x,y) %add two variable global ALPHA BETA f=ALPHA*x+BETA*y;在命令窗口中輸入: global ALPHA BETA ALPHA=1; BETA=2; s=wadd(1,2)輸出為: s = 5局部變量與全局變量oMATLAB在函數(shù)調(diào)用上有一個(gè)與眾不同之處:函數(shù)所傳遞參數(shù)數(shù)目的可調(diào)性。憑借這一點(diǎn),一個(gè)函數(shù)可完成多種功能。o 在調(diào)用函數(shù)時(shí),MATLAB用兩個(gè)永久變量nargin和nargout分別記錄調(diào)用該函數(shù)時(shí)的輸

19、入實(shí)參和輸出實(shí)參的個(gè)數(shù)。只要在函數(shù)文件中包含這兩個(gè)變量,就可以準(zhǔn)確地知道該函數(shù)文件被調(diào)用時(shí)的輸入輸出參數(shù)個(gè)數(shù),從而決定函數(shù)如何進(jìn)行處理。函數(shù)所傳遞參數(shù)的可調(diào)性【例】 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.m: x=1:3;y=1;2;3; examp(x) examp(x,y) examp(x,y,3)執(zhí)行mydemo.m后的輸出是: ans =

20、1 2 3 ans = 2 4 6 ans = 21提綱提綱 o1.文件操作n1.1 文件的打開與關(guān)閉n1.2 文件的讀寫操作n1.3 數(shù)據(jù)文件定位寫操作o2. 程序設(shè)計(jì)n2.1 M文件n2.2 函數(shù)文件n2.3 程序設(shè)計(jì)n2.4 程序調(diào)試程序設(shè)計(jì)程序設(shè)計(jì) o輸入數(shù)據(jù)組織方式o輸出設(shè)計(jì)o函數(shù)設(shè)計(jì)o主程序設(shè)計(jì)輸入數(shù)據(jù)組織方式o按文件方式組織,ASCII或二進(jìn)制數(shù)據(jù)文件n采用load, fread, textread, fscanf 等讀入程序o在命令文件中使用賦值語句o用“input”即時(shí)賦值o數(shù)據(jù)組織的好壞,會(huì)極大影響程序編寫的方便程度。輸出設(shè)計(jì)o按文件方式輸出結(jié)果,ASCII或二進(jìn)制數(shù)據(jù)文件

21、n采用fprintf, fwrite等寫入文件o在命令窗口輸出函數(shù)設(shè)計(jì)o把功能相對(duì)單一的程序塊,設(shè)計(jì)成函數(shù)n功能單一n輸入、輸出相對(duì)固定主程序設(shè)計(jì)o順序結(jié)構(gòu)o選擇結(jié)構(gòu)o循環(huán)結(jié)構(gòu)按script的順序執(zhí)行:【例】 建立一個(gè)命令文件將變量a,b的值互換。 e31m文件: a=1:9; b=11,12,13;14,15,16;17,18,19; c=a; a=b; b=c; a b主程序設(shè)計(jì)順序結(jié)構(gòu)程序的暫停程序的暫停 暫停程序的執(zhí)行可以使用pause函數(shù),其調(diào)用格式為: pause(延遲秒數(shù)) 如果省略延遲時(shí)間,直接使用pause,則將暫停程序,直到用戶按任一鍵后程序繼續(xù)執(zhí)行。 若要強(qiáng)行中止程序的運(yùn)

22、行可使用Ctrl+C命令。主程序設(shè)計(jì)順序結(jié)構(gòu)選擇結(jié)構(gòu)的語句有if語句和switch語句。o1 if語句語句 格式一: if 條件 語句組 end格式二: if 條件 語句組1 else 語句組2 end主程序設(shè)計(jì)選擇結(jié)構(gòu)格式三: if 條件1 語句組1 elseif 條件2 語句組2 elseif 條件m 語句組m else 語句組m+1 end主程序設(shè)計(jì)選擇結(jié)構(gòu)【例】 輸入三角形的三條邊,求面積。 A=input(請(qǐng)輸入三角形的三條邊:); if A(1)+A(2)A(3) & A(1)+A(3)A(2) & A(2)+A(3)A(1) p=(A(1)+A(2)+A(3)/2; s=sqrt

23、(p*(p-A(1)*(p-A(2)*(p-A(3); disp(s); else disp(不能構(gòu)成一個(gè)三角形。) end運(yùn)行: 請(qǐng)輸入三角形的三條邊:4 5 6 9.9216主程序設(shè)計(jì)選擇結(jié)構(gòu)【例】 輸入一個(gè)字符,若為大寫字母,則輸出其后繼字符,若為小寫字母,則輸出其前導(dǎo)字符,若為其他字符則原樣輸出。 c=input(Please input a letter ,s); if c=A & c=a& c=z disp(setstr(abs(c)-1); else disp(c); end主程序設(shè)計(jì)選擇結(jié)構(gòu)2 switch語句語句oswitch語句根據(jù)變量或表達(dá)式的取值不同,分別執(zhí)行不同的語句

24、。其格式為: switch 表達(dá)式 case 值1 語句組1 case 值2語句組2 case 值m 語句組m otherwise 語句組m+1 end主程序設(shè)計(jì)選擇結(jié)構(gòu)【例】 根據(jù)變量 num 的值來決定顯示的內(nèi)容。 num=input(請(qǐng)輸入一個(gè)數(shù)); switch num case -1 disp(I am a teacher.); case 0 disp(I am a student.); case 1 disp(You are a teacher.); otherwise disp(You are a student.); end主程序設(shè)計(jì)選擇結(jié)構(gòu)實(shí)現(xiàn)循環(huán)結(jié)構(gòu)的語句:for語句和while語句。o1 for語句:語句:格式: for 循環(huán)變量=

溫馨提示

  • 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)論