• /  36
  • 下載費用: 9.90積分  

MATLAB程序設計基礎教學課件 作者 課件Matlab教程Ch8.ppt

'MATLAB程序設計基礎教學課件 作者 課件Matlab教程Ch8.ppt'
第8章 高級編程技術1本章目標掌握MATLAB文件處理方法理解MATLAB應用程序接口的原理了解結構和元胞這兩種復雜數據類型了解面向對象編程的基本概念2主要內容8.1文件8.2 應用程序接口38.1文件 文件可分為兩類: 文本文件 由字符和與字符的顯示格式有關的控制符構成常見擴展名:“TXT” 、“BAT”、“HTM”二進制文件 二進制文件為非文本文件常見擴展名:“COM”、“EXE” 、“BMP” 、“WAV”4MATLAB中基本的低級文件I/O指令:1.打開和關閉文件fopen、fclose2.格式讀寫fprintf、fscanf、fgetl、fgets3.非格式讀寫fread、fwrite4.文件定位和狀態feof、fseek、ftell、ferror、frewind58.1.1文件的打開與關閉1.fopen函數fid=fopen(filename,permission)[fid,message]=fopen(filename,permssion)[filename,permission,machineformat]=fopen(fid)fid =fopen('all')2.fclose函數status=fclose(fid) status=fclose('all')例:打開一個名為std.dat的數據文件并進行讀操作,命令為: fid=fopen('my.txt','r')68.1.2格式化數據的讀寫fprintf函數 count=fprintf(fid,format , A ...)fscanf函數[A, count]=fscanf(fid, format, size)7例8-1計算當x=[0 1]時f(x)=ex的值,并將結果寫入到文件my.txt中。程序 x=0:0.1:1;y=[x;exp(x)]; %y有兩行數據fid=fopen('my.txt','w');fprintf(fid,'%6.2f %12.8f\n',y);fclose(fid);8例8-2從上例中生成的文件my.txt中讀取數據,并將結果輸出到屏幕。程序 fid = fopen('my.txt','r');[a,count] = fscanf(fid,'%f %f',[2 inf]); fprintf(1,'%f %f\n',a); fclose(fid);輸出 同例8-1文件中的數據格式。98.1.3 文件定位和文件狀態1.feof函數:檢測文件是否已經結束status=feof(fid)2.ferror函數:用于查詢文件的輸入、輸出錯誤信息msg=ferror(fid)3.frewind函數:使位置指針重新返回文件的開頭frewind(fid) 4.fseek函數:設置文件的位置指針status=fseek(fid, offset, origin) 5.ftell函數:用于查詢當前文件指針的位置position=ftell(fid);10例8-3 輸出文件的大小。程序 fid=fopen('my.txt','r');fseek(fid,0,'eof');x=ftell(fid);fprintf(1,'File Size=%d\n',x);frewind(fid);x=ftell(fid);fprintf(1,'File Position =%d\n',x);fclose(fid);輸出 File Size = 231File Position = 0118.1.4按行讀取數據1.fgetl函數:按行從文件中讀取數據,但不讀取換行符。line=fgetl(fid)2.fgets函數:用于從文件中讀取行、保留換行符并把行作為字符串返回。(1)line=fgets(fid) (2)line=fgets(fid,nchar) 12例8-4編寫一個程序,用于讀取例8-1生成的數據。程序 fid=fopen('my.txt','r');while ~feof(fid)%在文件沒有結束時按行讀取數據 s=fgets(fid); fprintf(1,'%s',s);endfclose(fid);輸出 同例8-1文件中的數據格式。138.1.5二進制數據文件的讀寫fwrite函數:用于向一個文件寫入二進制數據count=fwrite(fid, A, precision)。fread函數:用于從文件中讀二進制數據[A,count]=fread(fid, size, precision) 注意:使用函數fread()和fwrite()讀寫文件時,必須以二進制方式打開文件14例8-5將5行5列“魔方陣”存入二進制文件中。程序fid=fopen('my.dat','w');a=magic(5);fwrite(fid,a,'long');fclose(fid);15例8-6從二進制文件中讀取“魔方陣”。程序fid=fopen('my.dat','r');[A,count]=fread(fid, [5, inf], 'long');fclose(fid);A168.1.6 圖像、聲音文件的讀寫1.imread函數:從文件中讀入圖像A = imread(filename,fmt)[A, map] = imread(filename,fmt)2.image函數:顯示圖像image(A) 3.imwrite函數:將圖像寫入文件imwrite(A, filename, fmt) imwrite(A, map, filename, fmt) 17例8-7顯示一幅真彩(RGB)圖像。程序[x,map]=imread('C:\MATLAB7\toolbox\matlab\demos\street1.jpg');image(x);18例8-8 將圖像寫入文件程序[x,map]=imread('C:\MATLAB7\toolbox\matlab\demos\street1.jpg');imwrite(x,'my.bmp'); %將圖像保存為真彩色的bmp[x,map]=imread('my.bmp');image(x);198.1.6圖像、聲音文件的讀寫4.imfinfo函數:查詢圖像文件信息innfo = imflnfo(filename)5.wavread函數:用于讀取擴展名為“.wav”的聲音文件 y=wavread(file) [y, fs, nbits]=wavread(file) 6.wavwrite函數:用于將數據寫入到擴展名為“wav”的聲音文件中wavwrite(y, fs, nbits, wavefile) 7.wavplay函數:利用windows音頻輸出設備播放聲音wavplay(y,fs)20例8-9讀取一個音頻數據文件,以不同頻率播放,并顯示聲音波形。程序:y=wavread('C:\MATLAB7\toolbox\simulink\simdemos\simgeneral\toilet.wav')plot(y);wavplay(y);wavplay(y,11025);wavplay(y,44100);218.2 應用程序接口 MATLAB的外部接口應用包括如下內容:(1)在MATLAB中調用已有的C/C++語言代碼;(2)在C/C++語言中調用MATLAB的算法;(3)利用COM標準進行客戶/服務器模式開發;例如在Visual Basic程序或者Microsoft Excel中調用MATLAB的算法(4)在C/C++語言中讀寫MAT數據文件。228.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!");}238.2.2 MATLAB計算引擎MATLAB的計算引擎應用就是利用MATLAB提供的一組接口函數,在用戶開發的C/C++語言應用程序中,通過某種通信機制后臺調用MATLAB應用程序以完成復雜的系統任務。 24例8-11設計一程序,在C/C++語言中調用mesh函數來繪制高斯矩陣的曲面。解題步驟:25例8-11 程序:#include #include "engine.h"void main(){ Engine *ep; int status = 0; // 打開計算引擎 ep = engOpen(NULL); if( ep == (Engine *)NULL ){ printf("錯誤:無法打開MATLAB計算引擎\n" ); exit(-1); } // 執行MATLAB指令 engEvalString(ep,"mesh(peaks);"); getchar(); // 關閉MATLAB計算引擎 status = engClose(ep); if(status != 0){ printf("無法正常關閉MATLAB計算引擎\n"); exit(-1); }}268.2.3基于COM組件的接口編程該方法的主要特點有:(1)應用程序完全脫離MATLAB工作環境;(2)MATLAB數學庫和工具箱中包括的各種各樣的函數,所以降低了編寫算法難度;(3)由于將算法程序做成了COM組件的形式,所以實現了算法的保密。278.2.4在C/C++語言中讀寫MAT數據文件支持C/C++語言讀寫MAT文件的函數庫有下面幾個:1.打開數據文件──matOpenMATFile * matOpen(const char *filename,const char *mode)2.關閉數據文件──matCloseint matClose(MATFile *mfp)3.獲取變量──matGetVariablemxArray *matGetVariable(MATFile *mfp,const char *name)4.寫入數據──matPutVariableint matPutVariable(MATFile *mfp, const char *name,const mxArray *mp)28擴展閱讀8.3 結構數組8.4 元胞數組8.5 面向對象程序設計29應用舉例例8-12 在C/C++語言中調用MATLAB計算魔方陣,并將結果顯示到屏幕。30程序代碼-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 ){ printf("錯誤:無法打開MATLAB計算引擎\n" ); exit(-1); }31程序代碼-2 // 執行MATLAB指令 engEvalString(ep,"A = magic(5);"); equation=engGetVariable(ep,"A"); p=mxGetPr(equation); printf("\nMATLAB 中計算magic(5)\n"); for(i=0;i<5;i++) { for(j=0;j<5;j++) printf("%8.0lf",*(p+i+j*5)); printf("\n"); } // 關閉MATLAB計算引擎 status = engClose(ep); if(status != 0){ printf("無法正常關閉MATLAB計算引擎\n"); exit(-1); }}32例8-1333程序代碼-1#include #include #include "engine.h"void main(){ Engine *ep; int status = 0; ep = engOpen(NULL); // 執行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程序代碼-2 x=mxCreateDoubleMatrix(3,3,mxREAL); y=mxCreateDoubleMatrix(3,1,mxREAL); pa=mxGetPr(x); pb=mxGetPr(y); memcpy(pa,A,9*sizeof(double)); memcpy(pb,B,3*sizeof(double)); engPutVariable(ep,"A",x); engPutVariable(ep,"B",y); engEvalString(ep,"C=A\\B;"); z=engGetVariable(ep,"C"); pc=mxGetPr(z); printf("\nAX=B的結果為:\n"); for(int i=0;i<3;i++) { printf("%8.0lf\n",*(pc+i)); } status = engClose(ep);}35學好計算機的唯一途徑是 你的編程能力與你在計算機上投入的時間成 結 束 語上機練習正比36
關 鍵 詞:
matlab 教學 作者 教程 基礎 ch8 程序設計 ch
 天天文庫所有資源均是用戶自行上傳分享,僅供網友學習交流,未經上傳用戶書面授權,請勿作他用。
關于本文
本文標題:MATLAB程序設計基礎教學課件 作者 課件Matlab教程Ch8.ppt
鏈接地址: http://www.476824.live/p-51617684.html
關于我們 - 網站聲明 - 網站地圖 - 資源地圖 - 友情鏈接 - 網站客服點擊這里,給天天文庫發消息,QQ:1290478887 - 聯系我們

本站為“文檔C2C交易模式”,即用戶上傳的文檔直接賣給(下載)用戶,本站只是中間服務平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有【成交的100%(原創)】。本站是網絡服務平臺方,若您的權利被侵害,侵權客服QQ:1290478887 歡迎舉報。

[email protected] 2017-2027 http://www.476824.live 網站版權所有

粵ICP備19057495號 

收起
展開
球探网即时蓝球比分 重庆幸运农场开奖号码 湖北快3开奖结果 短线牛股 一肖二码免费资料 甘肃快3规律 双塔食品股票 河北十一选五直选前三 pk10精确计划群 三分彩 内蒙古快3开奖结果360代购技巧