




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第8章 高級編程技術1第1頁,共36頁。本章目標掌握MATLAB文件處理方法理解MATLAB應用程序接口的原理了解結構和元胞這兩種復雜數(shù)據(jù)類型了解面向對象編程的基本概念2第2頁,共36頁。主要內容8.1文件8.2 應用程序接口3第3頁,共36頁。8.1文件文件可分為兩類: 文本文件 由字符和與字符的顯示格式有關的控制符構成常見擴展名:“TXT” 、“BAT”、“HTM”二進制文件 二進制文件為非文本文件常見擴展名:“COM”、“EXE” 、“BMP” 、“WAV”4第4頁,共36頁。MATLAB中基本的低級文件I/O指令:1打開和關閉文件fopen、fclose2格式讀寫fprintf、fsc
2、anf、fgetl、fgets3非格式讀寫fread、fwrite4文件定位和狀態(tài)feof、fseek、ftell、ferror、frewind5第5頁,共36頁。8.1.1文件的打開與關閉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)例:打開一個名為std.dat的數(shù)據(jù)文件并進行讀操作
3、,命令為: fidfopen(my.txt,r)6第6頁,共36頁。8.1.2格式化數(shù)據(jù)的讀寫fprintf函數(shù) count=fprintf(fid,format , A .)fscanf函數(shù)A, count=fscanf(fid, format, size)7第7頁,共36頁。例8-1計算當x=0 1時f(x)=ex的值,并將結果寫入到文件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頁,共36頁。例8-2從上例中生成的文件my.tx
4、t中讀取數(shù)據(jù),并將結果輸出到屏幕。程序 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頁,共36頁。8.1.3 文件定位和文件狀態(tài)1feof函數(shù):檢測文件是否已經結束status=feof(fid)2ferror函數(shù):用于查詢文件的輸入、輸出錯誤信息msg=ferror(fid)3frewind函數(shù):使位置指針重新返回文件的開頭frewind(fid) 4fseek函數(shù):設置文件的位置指針status=fseek(fid,
5、 offset, origin) 5ftell函數(shù):用于查詢當前文件指針的位置position=ftell(fid);10第10頁,共36頁。例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頁,共36頁。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頁,共36頁。例8-4編寫一個程序,用于讀取例8-1生成的數(shù)據(jù)。程序 fid=fopen(my.txt,r);while feof(fid)%在文件沒有結束時按行讀取數(shù)據(jù) s=fgets(fid); fprintf(1,%s,s);endfclose(fid);輸出 同例8-1文件中的數(shù)據(jù)格式。13第13頁,共36頁。8.1.5二進制數(shù)據(jù)文件的讀寫fwrite
7、函數(shù):用于向一個文件寫入二進制數(shù)據(jù)count=fwrite(fid, A, precision)。fread函數(shù):用于從文件中讀二進制數(shù)據(jù)A,count=fread(fid, size, precision) 注意:使用函數(shù)fread()和fwrite()讀寫文件時,必須以二進制方式打開文件14第14頁,共36頁。例8-5將5行5列“魔方陣”存入二進制文件中。程序fid=fopen(my.dat,w);a=magic(5);fwrite(fid,a,long);fclose(fid);15第15頁,共36頁。例8-6從二進制文件中讀取“魔方陣”。程序fid=fopen(my.dat,r);A,
8、count=fread(fid, 5, inf, long);fclose(fid);A16第16頁,共36頁。8.1.6 圖像、聲音文件的讀寫1imread函數(shù):從文件中讀入圖像A = imread(filename,fmt)A, map = imread(filename,fmt)2image函數(shù):顯示圖像image(A) 3imwrite函數(shù):將圖像寫入文件imwrite(A, filename, fmt) imwrite(A, map, filename, fmt) 17第17頁,共36頁。例8-7顯示一幅真彩(RGB)圖像。程序x,map=imread(C:MATLAB7toolbo
9、xmatlabdemosstreet1.jpg);image(x);18第18頁,共36頁。例8-8 將圖像寫入文件程序x,map=imread(C:MATLAB7toolboxmatlabdemosstreet1.jpg);imwrite(x,my.bmp);%將圖像保存為真彩色的bmpx,map=imread(my.bmp);image(x);19第19頁,共36頁。8.1.6圖像、聲音文件的讀寫4imfinfo函數(shù):查詢圖像文件信息innfo imflnfo(filename)5wavread函數(shù):用于讀取擴展名為“.wav”的聲音文件 y=wavread(file) y, fs, nb
10、its=wavread(file) 6wavwrite函數(shù):用于將數(shù)據(jù)寫入到擴展名為“wav”的聲音文件中wavwrite(y, fs, nbits, wavefile) 7wavplay函數(shù):利用windows音頻輸出設備播放聲音wavplay(y,fs)20第20頁,共36頁。例8-9讀取一個音頻數(shù)據(jù)文件,以不同頻率播放,并顯示聲音波形。程序:y=wavread(C:MATLAB7toolboxsimulinksimdemossimgeneraltoilet.wav)plot(y);wavplay(y);wavplay(y,11025);wavplay(y,44100);21第21頁,共3
11、6頁。8.2 應用程序接口 MATLAB的外部接口應用包括如下內容:(1)在MATLAB中調用已有的C/C+語言代碼;(2)在C/C+語言中調用MATLAB的算法;(3)利用COM標準進行客戶/服務器模式開發(fā);例如在Visual Basic程序或者Microsoft Excel中調用MATLAB的算法(4)在C/C+語言中讀寫MAT數(shù)據(jù)文件。22第22頁,共36頁。8.2.1 MEX文件例8-10 簡單MEX文件示例mexHelloWorld.c。程序:#include mex.hvoid mexFunction(int nlhs,mxArray *plhs,int nrhs,const mx
12、Array *prhs)mexPrintf(Hello Matlab World!);23第23頁,共36頁。8.2.2 MATLAB計算引擎MATLAB的計算引擎應用就是利用MATLAB提供的一組接口函數(shù),在用戶開發(fā)的C/C+語言應用程序中,通過某種通信機制后臺調用MATLAB應用程序以完成復雜的系統(tǒng)任務。 24第24頁,共36頁。例8-11設計一程序,在C/C+語言中調用mesh函數(shù)來繪制高斯矩陣的曲面。解題步驟:25第25頁,共36頁。例8-11 程序:#include #include engine.hvoid main()Engine *ep;int status = 0;/ 打開計
13、算引擎ep = engOpen(NULL);if( ep = (Engine *)NULL )printf(錯誤:無法打開MATLAB計算引擎n );exit(-1);/ 執(zhí)行MATLAB指令engEvalString(ep,mesh(peaks););getchar();/ 關閉MATLAB計算引擎status = engClose(ep);if(status != 0)printf(無法正常關閉MATLAB計算引擎n);exit(-1);26第26頁,共36頁。8.2.3基于COM組件的接口編程該方法的主要特點有:(1)應用程序完全脫離MATLAB工作環(huán)境;(2)MATLAB數(shù)學庫和工具箱
14、中包括的各種各樣的函數(shù),所以降低了編寫算法難度;(3)由于將算法程序做成了COM組件的形式,所以實現(xiàn)了算法的保密。27第27頁,共36頁。8.2.4在C/C+語言中讀寫MAT數(shù)據(jù)文件支持C/C+語言讀寫MAT文件的函數(shù)庫有下面幾個:1打開數(shù)據(jù)文件matOpenMATFile * matOpen(const char *filename,const char *mode)2關閉數(shù)據(jù)文件matCloseint matClose(MATFile *mfp)3獲取變量matGetVariablemxArray *matGetVariable(MATFile *mfp,const char *name)
15、4寫入數(shù)據(jù)matPutVariableint matPutVariable(MATFile *mfp, const char *name,const mxArray *mp)28第28頁,共36頁。擴展閱讀8.3 結構數(shù)組8.4 元胞數(shù)組8.5 面向對象程序設計29第29頁,共36頁。應用舉例例8-12 在C/C+語言中調用MATLAB計算魔方陣,并將結果顯示到屏幕。30第30頁,共36頁。程序代碼1#include engine.h#include void main()Engine *ep;double *p;mxArray *equation;int i = 0,j=0;int stat
16、us = 0;/ 打開計算引擎ep = engOpen(NULL);if( ep = (Engine *)NULL )printf(錯誤:無法打開MATLAB計算引擎n );exit(-1);31第31頁,共36頁。程序代碼2/ 執(zhí)行MATLAB指令engEvalString(ep,A = magic(5););equation=engGetVariable(ep,A);p=mxGetPr(equation);printf(nMATLAB 中計算magic(5)n);for(i=0;i5;i+)for(j=0;j5;j+)printf(%8.0lf,*(p+i+j*5);printf(n);/
17、 關閉MATLAB計算引擎status = engClose(ep);if(status != 0)printf(無法正常關閉MATLAB計算引擎n);exit(-1);32第32頁,共36頁。例8-1333第33頁,共36頁。程序代碼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頁,共36頁。程序代碼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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度XX幼兒園安保人員服務及設施維護合同
- 2025年度解除廠房租賃合同與知識產權歸屬協(xié)議
- 二零二五年度幼師實習實踐項目合作協(xié)議
- 二零二五年度房屋租賃合同租賃物租賃期限續(xù)約管理補充協(xié)議
- 二零二五年度文化藝術加盟合作協(xié)議
- 《銳捷RCNA路由與交換技術實戰(zhàn)》 課件 項目9 多部門VLAN基于三層交換的互聯(lián)部署v1.1
- 2025浙江寧波市象山縣水務集團有限公司第一期招聘8人筆試參考題庫附帶答案詳解
- 急救知識培訓課件下載
- 交通監(jiān)控系統(tǒng)知到智慧樹章節(jié)測試課后答案2024年秋山東交通學院
- 信貸業(yè)務員知識培訓課件
- 統(tǒng)編版五年級下冊道德與法治全冊優(yōu)秀課件
- 湘雅五醫(yī)院-建筑方案設計課件
- 《教育管理學》課件
- 凈水設備技術參數(shù)要求
- 《M公司員工忠誠度分析案例報告》
- 工程計量報審表
- 腦血管造影護理課件
- 被執(zhí)行人財產申報表
- 課題申報講座課件
- 系統(tǒng)科學與系統(tǒng)工程的理論基礎
- 四步創(chuàng)業(yè)法:創(chuàng)業(yè)必備知識點課件
評論
0/150
提交評論