![高級(jí)編程技術(shù)課件_第1頁(yè)](http://file4.renrendoc.com/view/86fb89b944acc2d7a9c7c1f6e1f96d5b/86fb89b944acc2d7a9c7c1f6e1f96d5b1.gif)
![高級(jí)編程技術(shù)課件_第2頁(yè)](http://file4.renrendoc.com/view/86fb89b944acc2d7a9c7c1f6e1f96d5b/86fb89b944acc2d7a9c7c1f6e1f96d5b2.gif)
![高級(jí)編程技術(shù)課件_第3頁(yè)](http://file4.renrendoc.com/view/86fb89b944acc2d7a9c7c1f6e1f96d5b/86fb89b944acc2d7a9c7c1f6e1f96d5b3.gif)
![高級(jí)編程技術(shù)課件_第4頁(yè)](http://file4.renrendoc.com/view/86fb89b944acc2d7a9c7c1f6e1f96d5b/86fb89b944acc2d7a9c7c1f6e1f96d5b4.gif)
![高級(jí)編程技術(shù)課件_第5頁(yè)](http://file4.renrendoc.com/view/86fb89b944acc2d7a9c7c1f6e1f96d5b/86fb89b944acc2d7a9c7c1f6e1f96d5b5.gif)
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第8章 高級(jí)編程技術(shù)1第1頁(yè),共36頁(yè)。本章目標(biāo)掌握MATLAB文件處理方法理解MATLAB應(yīng)用程序接口的原理了解結(jié)構(gòu)和元胞這兩種復(fù)雜數(shù)據(jù)類(lèi)型了解面向?qū)ο缶幊痰幕靖拍?第2頁(yè),共36頁(yè)。主要內(nèi)容8.1文件8.2 應(yīng)用程序接口3第3頁(yè),共36頁(yè)。8.1文件文件可分為兩類(lèi): 文本文件 由字符和與字符的顯示格式有關(guān)的控制符構(gòu)成常見(jiàn)擴(kuò)展名:“TXT” 、“BAT”、“HTM”二進(jìn)制文件 二進(jìn)制文件為非文本文件常見(jiàn)擴(kuò)展名:“COM”、“EXE” 、“BMP” 、“WAV”4第4頁(yè),共36頁(yè)。MATLAB中基本的低級(jí)文件I/O指令:1打開(kāi)和關(guān)閉文件fopen、fclose2格式讀寫(xiě)fprintf、fsc
2、anf、fgetl、fgets3非格式讀寫(xiě)fread、fwrite4文件定位和狀態(tài)feof、fseek、ftell、ferror、frewind5第5頁(yè),共36頁(yè)。8.1.1文件的打開(kāi)與關(guān)閉1fopen函數(shù)fidfopen(filename,permission)fid,message=fopen(filename,permssion)filename,permission,machineformat=fopen(fid)fid =fopen(all)2fclose函數(shù)status=fclose(fid) status=fclose(all)例:打開(kāi)一個(gè)名為std.dat的數(shù)據(jù)文件并進(jìn)行讀操作
3、,命令為: fidfopen(my.txt,r)6第6頁(yè),共36頁(yè)。8.1.2格式化數(shù)據(jù)的讀寫(xiě)fprintf函數(shù) count=fprintf(fid,format , A .)fscanf函數(shù)A, count=fscanf(fid, format, size)7第7頁(yè),共36頁(yè)。例8-1計(jì)算當(dāng)x=0 1時(shí)f(x)=ex的值,并將結(jié)果寫(xiě)入到文件my.txt中。程序 x=0:0.1:1;y=x;exp(x);%y有兩行數(shù)據(jù)fid=fopen(my.txt,w);fprintf(fid,%6.2f %12.8fn,y);fclose(fid);8第8頁(yè),共36頁(yè)。例8-2從上例中生成的文件my.tx
4、t中讀取數(shù)據(jù),并將結(jié)果輸出到屏幕。程序 fid = fopen(my.txt,r);a,count = fscanf(fid,%f %f,2 inf); fprintf(1,%f %fn,a); fclose(fid);輸出 同例8-1文件中的數(shù)據(jù)格式。9第9頁(yè),共36頁(yè)。8.1.3 文件定位和文件狀態(tài)1feof函數(shù):檢測(cè)文件是否已經(jīng)結(jié)束status=feof(fid)2ferror函數(shù):用于查詢(xún)文件的輸入、輸出錯(cuò)誤信息msg=ferror(fid)3frewind函數(shù):使位置指針重新返回文件的開(kāi)頭frewind(fid) 4fseek函數(shù):設(shè)置文件的位置指針status=fseek(fid,
5、 offset, origin) 5ftell函數(shù):用于查詢(xún)當(dāng)前文件指針的位置position=ftell(fid);10第10頁(yè),共36頁(yè)。例8-3 輸出文件的大小。程序 fid=fopen(my.txt,r);fseek(fid,0,eof);x=ftell(fid);fprintf(1,File Size=%dn,x);frewind(fid);x=ftell(fid);fprintf(1,File Position =%dn,x);fclose(fid);輸出 File Size = 231File Position = 011第11頁(yè),共36頁(yè)。8.1.4按行讀取數(shù)據(jù)1fgetl函數(shù)
6、:按行從文件中讀取數(shù)據(jù),但不讀取換行符。line=fgetl(fid)2fgets函數(shù):用于從文件中讀取行、保留換行符并把行作為字符串返回。(1)line=fgets(fid) (2)line=fgets(fid,nchar) 12第12頁(yè),共36頁(yè)。例8-4編寫(xiě)一個(gè)程序,用于讀取例8-1生成的數(shù)據(jù)。程序 fid=fopen(my.txt,r);while feof(fid)%在文件沒(méi)有結(jié)束時(shí)按行讀取數(shù)據(jù) s=fgets(fid); fprintf(1,%s,s);endfclose(fid);輸出 同例8-1文件中的數(shù)據(jù)格式。13第13頁(yè),共36頁(yè)。8.1.5二進(jìn)制數(shù)據(jù)文件的讀寫(xiě)fwrite
7、函數(shù):用于向一個(gè)文件寫(xiě)入二進(jìn)制數(shù)據(jù)count=fwrite(fid, A, precision)。fread函數(shù):用于從文件中讀二進(jìn)制數(shù)據(jù)A,count=fread(fid, size, precision) 注意:使用函數(shù)fread()和fwrite()讀寫(xiě)文件時(shí),必須以二進(jìn)制方式打開(kāi)文件14第14頁(yè),共36頁(yè)。例8-5將5行5列“魔方陣”存入二進(jìn)制文件中。程序fid=fopen(my.dat,w);a=magic(5);fwrite(fid,a,long);fclose(fid);15第15頁(yè),共36頁(yè)。例8-6從二進(jìn)制文件中讀取“魔方陣”。程序fid=fopen(my.dat,r);A,
8、count=fread(fid, 5, inf, long);fclose(fid);A16第16頁(yè),共36頁(yè)。8.1.6 圖像、聲音文件的讀寫(xiě)1imread函數(shù):從文件中讀入圖像A = imread(filename,fmt)A, map = imread(filename,fmt)2image函數(shù):顯示圖像image(A) 3imwrite函數(shù):將圖像寫(xiě)入文件imwrite(A, filename, fmt) imwrite(A, map, filename, fmt) 17第17頁(yè),共36頁(yè)。例8-7顯示一幅真彩(RGB)圖像。程序x,map=imread(C:MATLAB7toolbo
9、xmatlabdemosstreet1.jpg);image(x);18第18頁(yè),共36頁(yè)。例8-8 將圖像寫(xiě)入文件程序x,map=imread(C:MATLAB7toolboxmatlabdemosstreet1.jpg);imwrite(x,my.bmp);%將圖像保存為真彩色的bmpx,map=imread(my.bmp);image(x);19第19頁(yè),共36頁(yè)。8.1.6圖像、聲音文件的讀寫(xiě)4imfinfo函數(shù):查詢(xún)圖像文件信息innfo imflnfo(filename)5wavread函數(shù):用于讀取擴(kuò)展名為“.wav”的聲音文件 y=wavread(file) y, fs, nb
10、its=wavread(file) 6wavwrite函數(shù):用于將數(shù)據(jù)寫(xiě)入到擴(kuò)展名為“wav”的聲音文件中wavwrite(y, fs, nbits, wavefile) 7wavplay函數(shù):利用windows音頻輸出設(shè)備播放聲音wavplay(y,fs)20第20頁(yè),共36頁(yè)。例8-9讀取一個(gè)音頻數(shù)據(jù)文件,以不同頻率播放,并顯示聲音波形。程序:y=wavread(C:MATLAB7toolboxsimulinksimdemossimgeneraltoilet.wav)plot(y);wavplay(y);wavplay(y,11025);wavplay(y,44100);21第21頁(yè),共3
11、6頁(yè)。8.2 應(yīng)用程序接口 MATLAB的外部接口應(yīng)用包括如下內(nèi)容:(1)在MATLAB中調(diào)用已有的C/C+語(yǔ)言代碼;(2)在C/C+語(yǔ)言中調(diào)用MATLAB的算法;(3)利用COM標(biāo)準(zhǔn)進(jìn)行客戶(hù)/服務(wù)器模式開(kāi)發(fā);例如在Visual Basic程序或者M(jìn)icrosoft Excel中調(diào)用MATLAB的算法(4)在C/C+語(yǔ)言中讀寫(xiě)MAT數(shù)據(jù)文件。22第22頁(yè),共36頁(yè)。8.2.1 MEX文件例8-10 簡(jiǎn)單MEX文件示例mexHelloWorld.c。程序:#include mex.hvoid mexFunction(int nlhs,mxArray *plhs,int nrhs,const mx
12、Array *prhs)mexPrintf(Hello Matlab World!);23第23頁(yè),共36頁(yè)。8.2.2 MATLAB計(jì)算引擎MATLAB的計(jì)算引擎應(yīng)用就是利用MATLAB提供的一組接口函數(shù),在用戶(hù)開(kāi)發(fā)的C/C+語(yǔ)言應(yīng)用程序中,通過(guò)某種通信機(jī)制后臺(tái)調(diào)用MATLAB應(yīng)用程序以完成復(fù)雜的系統(tǒng)任務(wù)。 24第24頁(yè),共36頁(yè)。例8-11設(shè)計(jì)一程序,在C/C+語(yǔ)言中調(diào)用mesh函數(shù)來(lái)繪制高斯矩陣的曲面。解題步驟:25第25頁(yè),共36頁(yè)。例8-11 程序:#include #include engine.hvoid main()Engine *ep;int status = 0;/ 打開(kāi)計(jì)
13、算引擎ep = engOpen(NULL);if( ep = (Engine *)NULL )printf(錯(cuò)誤:無(wú)法打開(kāi)MATLAB計(jì)算引擎n );exit(-1);/ 執(zhí)行MATLAB指令engEvalString(ep,mesh(peaks););getchar();/ 關(guān)閉MATLAB計(jì)算引擎status = engClose(ep);if(status != 0)printf(無(wú)法正常關(guān)閉MATLAB計(jì)算引擎n);exit(-1);26第26頁(yè),共36頁(yè)。8.2.3基于COM組件的接口編程該方法的主要特點(diǎn)有:(1)應(yīng)用程序完全脫離MATLAB工作環(huán)境;(2)MATLAB數(shù)學(xué)庫(kù)和工具箱
14、中包括的各種各樣的函數(shù),所以降低了編寫(xiě)算法難度;(3)由于將算法程序做成了COM組件的形式,所以實(shí)現(xiàn)了算法的保密。27第27頁(yè),共36頁(yè)。8.2.4在C/C+語(yǔ)言中讀寫(xiě)MAT數(shù)據(jù)文件支持C/C+語(yǔ)言讀寫(xiě)MAT文件的函數(shù)庫(kù)有下面幾個(gè):1打開(kāi)數(shù)據(jù)文件matOpenMATFile * matOpen(const char *filename,const char *mode)2關(guān)閉數(shù)據(jù)文件matCloseint matClose(MATFile *mfp)3獲取變量matGetVariablemxArray *matGetVariable(MATFile *mfp,const char *name)
15、4寫(xiě)入數(shù)據(jù)matPutVariableint matPutVariable(MATFile *mfp, const char *name,const mxArray *mp)28第28頁(yè),共36頁(yè)。擴(kuò)展閱讀8.3 結(jié)構(gòu)數(shù)組8.4 元胞數(shù)組8.5 面向?qū)ο蟪绦蛟O(shè)計(jì)29第29頁(yè),共36頁(yè)。應(yīng)用舉例例8-12 在C/C+語(yǔ)言中調(diào)用MATLAB計(jì)算魔方陣,并將結(jié)果顯示到屏幕。30第30頁(yè),共36頁(yè)。程序代碼1#include engine.h#include void main()Engine *ep;double *p;mxArray *equation;int i = 0,j=0;int stat
16、us = 0;/ 打開(kāi)計(jì)算引擎ep = engOpen(NULL);if( ep = (Engine *)NULL )printf(錯(cuò)誤:無(wú)法打開(kāi)MATLAB計(jì)算引擎n );exit(-1);31第31頁(yè),共36頁(yè)。程序代碼2/ 執(zhí)行MATLAB指令engEvalString(ep,A = magic(5););equation=engGetVariable(ep,A);p=mxGetPr(equation);printf(nMATLAB 中計(jì)算magic(5)n);for(i=0;i5;i+)for(j=0;j5;j+)printf(%8.0lf,*(p+i+j*5);printf(n);/
17、 關(guān)閉MATLAB計(jì)算引擎status = engClose(ep);if(status != 0)printf(無(wú)法正常關(guān)閉MATLAB計(jì)算引擎n);exit(-1);32第32頁(yè),共36頁(yè)。例8-1333第33頁(yè),共36頁(yè)。程序代碼1#include #include #include engine.hvoid main()Engine *ep;int status = 0;ep = engOpen(NULL);/ 執(zhí)行MATLAB指令double A=2, 3, 4, -1, 1, -1, 3, -5, 1,B=5,5,9;double *pa,*pb,*pc;mxArray *x,*y,*z;34第34頁(yè),共36頁(yè)。程序代碼2x=mxCreateDoubleMatrix(3,3,mxREAL);y=mxCreateDoubleMatrix(3,1,mxREAL);pa=mxGetPr(x);pb=mxGetPr(y);memcpy(pa,A,9*sizeof(double);memcpy(p
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 施工現(xiàn)場(chǎng)施工防生物安全事故制度
- 小學(xué)生心理健康教育的校本課程設(shè)計(jì)研究
- DB4404T 72-2024電梯維修保養(yǎng)服務(wù)安全規(guī)范
- 不服合作合同爭(zhēng)議仲裁起訴狀范本
- 個(gè)人股權(quán)轉(zhuǎn)讓合作合同模板
- 兩人合伙創(chuàng)業(yè)合同范本
- 個(gè)人股權(quán)轉(zhuǎn)讓合同簡(jiǎn)單范文
- 二手房買(mǎi)賣(mài)合同簡(jiǎn)易版
- 個(gè)人公寓租賃合同范本
- 產(chǎn)學(xué)研一體化碩士專(zhuān)班合作協(xié)議合同
- 行業(yè)會(huì)計(jì)比較(第三版)PPT完整全套教學(xué)課件
- 值機(jī)業(yè)務(wù)與行李運(yùn)輸實(shí)務(wù)(第3版)高職PPT完整全套教學(xué)課件
- 高考英語(yǔ)語(yǔ)法填空專(zhuān)項(xiàng)訓(xùn)練(含解析)
- 42式太極劍劍譜及動(dòng)作說(shuō)明(吳阿敏)
- 部編版語(yǔ)文小學(xué)五年級(jí)下冊(cè)第一單元集體備課(教材解讀)
- GB/T 10095.1-2022圓柱齒輪ISO齒面公差分級(jí)制第1部分:齒面偏差的定義和允許值
- 仁愛(ài)英語(yǔ)九年級(jí)下冊(cè)單詞表(中英文)
- 危險(xiǎn)化學(xué)品企業(yè)安全生產(chǎn)標(biāo)準(zhǔn)化課件
- 巨鹿二中骨干教師個(gè)人工作業(yè)績(jī)材料
- 《美的歷程》導(dǎo)讀課件
- 心電圖 (史上最完美)課件
評(píng)論
0/150
提交評(píng)論