Matlab高級編程技術(shù)教程.ppt_第1頁
Matlab高級編程技術(shù)教程.ppt_第2頁
Matlab高級編程技術(shù)教程.ppt_第3頁
Matlab高級編程技術(shù)教程.ppt_第4頁
Matlab高級編程技術(shù)教程.ppt_第5頁
已閱讀5頁,還剩31頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1,第8章 高級編程技術(shù),2,本章目標,掌握MATLAB文件處理方法 理解MATLAB應用程序接口的原理 了解結(jié)構(gòu)和元胞這兩種復雜數(shù)據(jù)類型 了解面向?qū)ο缶幊痰幕靖拍?3,主要內(nèi)容,8.1文件 8.2 應用程序接口,4,8.1文件,文件可分為兩類: 文本文件 由字符和與字符的顯示格式有關(guān)的控制符構(gòu)成 常見擴展名:“TXT” 、“BAT”、“HTM” 二進制文件 二進制文件為非文本文件 常見擴展名:“COM”、“EXE” 、“BMP” 、“WAV”,5,MATLAB中基本的低級文件I/O指令:,1打開和關(guān)閉文件 fopen、fclose 2格式讀寫 fprintf、fscanf、fgetl、fg

2、ets 3非格式讀寫 fread、fwrite 4文件定位和狀態(tài) feof、fseek、ftell、ferror、frewind,6,8.1.1文件的打開與關(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) 例:打開一個名為std.dat的數(shù)據(jù)文件并進行讀操作,命令為: f

3、idfopen(my.txt,r),7,8.1.2格式化數(shù)據(jù)的讀寫,fprintf函數(shù) count=fprintf(fid,format , A .) fscanf函數(shù) A, count=fscanf(fid, format, size),8,例8-1,計算當x=0 1時f(x)=ex的值,并將結(jié)果寫入到文件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);,9,例8-2,從上例中生成的文件my.txt中讀取數(shù)據(jù),并將結(jié)果輸出到屏幕。

4、程序 fid = fopen(my.txt,r); a,count = fscanf(fid,%f %f,2 inf); fprintf(1,%f %fn,a); fclose(fid); 輸出 同例8-1文件中的數(shù)據(jù)格式。,10,8.1.3 文件定位和文件狀態(tài),1feof函數(shù):檢測文件是否已經(jīng)結(jié)束 status=feof(fid) 2ferror函數(shù):用于查詢文件的輸入、輸出錯誤信息 msg=ferror(fid) 3frewind函數(shù):使位置指針重新返回文件的開頭 frewind(fid) 4fseek函數(shù):設(shè)置文件的位置指針 status=fseek(fid, offset, origi

5、n) 5ftell函數(shù):用于查詢當前文件指針的位置 position=ftell(fid);,11,例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 = 231 File Position = 0,12,8.1.4按行讀取數(shù)據(jù),1fgetl函數(shù):按行從文件中讀取數(shù)據(jù),但不讀取換行

6、符。 line=fgetl(fid) 2fgets函數(shù):用于從文件中讀取行、保留換行符并把行作為字符串返回。 (1)line=fgets(fid) (2)line=fgets(fid,nchar),13,例8-4,編寫一個程序,用于讀取例8-1生成的數(shù)據(jù)。 程序 fid=fopen(my.txt,r); while feof(fid)%在文件沒有結(jié)束時按行讀取數(shù)據(jù) s=fgets(fid); fprintf(1,%s,s); end fclose(fid); 輸出 同例8-1文件中的數(shù)據(jù)格式。,14,8.1.5二進制數(shù)據(jù)文件的讀寫,fwrite函數(shù):用于向一個文件寫入二進制數(shù)據(jù) count=f

7、write(fid, A, precision)。 fread函數(shù):用于從文件中讀二進制數(shù)據(jù) A,count=fread(fid, size, precision) 注意:使用函數(shù)fread()和fwrite()讀寫文件時,必須以二進制方式打開文件,15,例8-5,將5行5列“魔方陣”存入二進制文件中。 程序 fid=fopen(my.dat,w); a=magic(5); fwrite(fid,a,long); fclose(fid);,16,例8-6,從二進制文件中讀取“魔方陣”。 程序 fid=fopen(my.dat,r); A,count=fread(fid, 5, inf, lon

8、g); fclose(fid); A,17,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),18,例8-7,顯示一幅真彩(RGB)圖像。 程序 x,map=imread(C:MATLAB7toolboxmatlabdemosstreet1.jpg); image(x)

9、;,19,例8-8 將圖像寫入文件,程序 x,map=imread(C:MATLAB7toolboxmatlabdemosstreet1.jpg); imwrite(x,my.bmp);%將圖像保存為真彩色的bmp x,map=imread(my.bmp); image(x);,20,8.1.6圖像、聲音文件的讀寫,4imfinfo函數(shù):查詢圖像文件信息 innfo imflnfo(filename) 5wavread函數(shù):用于讀取擴展名為“.wav”的聲音文件 y=wavread(file) y, fs, nbits=wavread(file) 6wavwrite函數(shù):用于將數(shù)據(jù)寫入到擴展名

10、為“wav”的聲音文件中 wavwrite(y, fs, nbits, wavefile) 7wavplay函數(shù):利用windows音頻輸出設(shè)備播放聲音 wavplay(y,fs),21,例8-9,讀取一個音頻數(shù)據(jù)文件,以不同頻率播放,并顯示聲音波形。 程序: y=wavread(C:MATLAB7toolboxsimulinksimdemossimgeneraltoilet.wav) plot(y); wavplay(y); wavplay(y,11025); wavplay(y,44100);,22,8.2 應用程序接口,MATLAB的外部接口應用包括如下內(nèi)容: (1)在MATLAB中調(diào)用

11、已有的C/C+語言代碼; (2)在C/C+語言中調(diào)用MATLAB的算法; (3)利用COM標準進行客戶/服務(wù)器模式開發(fā); 例如在Visual Basic程序或者Microsoft Excel中調(diào)用MATLAB的算法 (4)在C/C+語言中讀寫MAT數(shù)據(jù)文件。,23,8.2.1 MEX文件,例8-10 簡單MEX文件示例mexHelloWorld.c。 程序: #include mex.h void mexFunction(int nlhs,mxArray *plhs,int nrhs,const mxArray *prhs) mexPrintf(Hello Matlab World!); ,2

12、4,8.2.2 MATLAB計算引擎,MATLAB的計算引擎應用就是利用MATLAB提供的一組接口函數(shù),在用戶開發(fā)的C/C+語言應用程序中,通過某種通信機制后臺調(diào)用MATLAB應用程序以完成復雜的系統(tǒng)任務(wù)。,25,例8-11,設(shè)計一程序,在C/C+語言中調(diào)用mesh函數(shù)來繪制高斯矩陣的曲面。 解題步驟:,26,例8-11 程序:,#include #include engine.h void main() Engine *ep; int status = 0; / 打開計算引擎 ep = engOpen(NULL); if( ep = (Engine *)NULL ) printf(錯誤:無法

13、打開MATLAB計算引擎n ); exit(-1); / 執(zhí)行MATLAB指令 engEvalString(ep,mesh(peaks);); getchar(); / 關(guān)閉MATLAB計算引擎 status = engClose(ep); if(status != 0) printf(無法正常關(guān)閉MATLAB計算引擎n); exit(-1); ,27,8.2.3基于COM組件的接口編程,該方法的主要特點有: (1)應用程序完全脫離MATLAB工作環(huán)境; (2)MATLAB數(shù)學庫和工具箱中包括的各種各樣的函數(shù),所以降低了編寫算法難度; (3)由于將算法程序做成了COM組件的形式,所以實現(xiàn)了算法

14、的保密。,28,8.2.4在C/C+語言中讀寫MAT數(shù)據(jù)文件,支持C/C+語言讀寫MAT文件的函數(shù)庫有下面幾個: 1打開數(shù)據(jù)文件matOpen MATFile * matOpen(const char *filename,const char *mode) 2關(guān)閉數(shù)據(jù)文件matClose int matClose(MATFile *mfp) 3獲取變量matGetVariable mxArray *matGetVariable(MATFile *mfp,const char *name) 4寫入數(shù)據(jù)matPutVariable int matPutVariable(MATFile *mfp,

15、const char *name,const mxArray *mp),29,擴展閱讀,8.3 結(jié)構(gòu)數(shù)組 8.4 元胞數(shù)組 8.5 面向?qū)ο蟪绦蛟O(shè)計,30,應用舉例,例8-12 在C/C+語言中調(diào)用MATLAB計算魔方陣,并將結(jié)果顯示到屏幕。,31,程序代碼1,#include engine.h #include void main() Engine *ep; double *p; mxArray *equation; int i = 0,j=0; int status = 0; / 打開計算引擎 ep = engOpen(NULL); if( ep = (Engine *)NULL ) pr

16、intf(錯誤:無法打開MATLAB計算引擎n ); exit(-1); ,32,程序代碼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); / 關(guān)閉MATLAB計算引擎 status = engClose(ep); if(status != 0) prin

17、tf(無法正常關(guān)閉MATLAB計算引擎n); exit(-1); ,33,例8-13,34,程序代碼1,#include #include #include engine.h void 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;,35,程序代碼2,x=mxCreateDoubleMatrix(3,3,mxREAL); y=mxCreateDoubleMatrix(3,1,mxREAL); pa=mxGetPr(x); pb=mxGetPr(y); memcpy(pa,A,9*sizeof(double); memc

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論