Matlab文件與程序接口_第1頁
Matlab文件與程序接口_第2頁
Matlab文件與程序接口_第3頁
Matlab文件與程序接口_第4頁
Matlab文件與程序接口_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1主要內(nèi)容8.1文件8.2應(yīng)用程序接口Matlab文件與程序接口全文共34頁,當(dāng)前為第1頁。28.1文件

文件可分為兩類:文本文件由字符和與字符的顯示格式有關(guān)的控制符構(gòu)成常見擴(kuò)展名:“TXT”、“BAT”、“HTM”二進(jìn)制文件二進(jìn)制文件為非文本文件常見擴(kuò)展名:“COM”、“EXE”、“BMP”、“WAV”Matlab文件與程序接口全文共34頁,當(dāng)前為第2頁。3MATLAB中基本的低級文件I/O指令:1.打開和關(guān)閉文件fopen、fclose2.格式讀寫fprintf、fscanf、fgetl、fgets3.非格式讀寫fread、fwrite4.文件定位和狀態(tài)feof、fseek、ftell、ferror、frewindMatlab文件與程序接口全文共34頁,當(dāng)前為第3頁。48.1.1文件的打開與關(guān)閉1.fopen函數(shù)fid=fopen(filename,permission)[fid,message]=fopen(filename,permssion)[filename,permission,machineformat]=fopen(fid)fid=fopen('all')2.fclose函數(shù)status=fclose(fid)status=fclose('all')例:打開一個(gè)名為std.dat的數(shù)據(jù)文件并進(jìn)行讀操作,命令為:

fid=fopen('my.txt','r')Matlab文件與程序接口全文共34頁,當(dāng)前為第4頁。58.1.2格式化數(shù)據(jù)的讀寫fprintf函數(shù)

count=fprintf(fid,format,A...)fscanf函數(shù)[A,count]=fscanf(fid,format,size)Matlab文件與程序接口全文共34頁,當(dāng)前為第5頁。6例8-1計(jì)算當(dāng)x=[01]時(shí)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.8f\n',y);fclose(fid);Matlab文件與程序接口全文共34頁,當(dāng)前為第6頁。7例8-2從上例中生成的文件my.txt中讀取數(shù)據(jù),并將結(jié)果輸出到屏幕。程序

fid=fopen('my.txt','r');[a,count]=fscanf(fid,'%f%f',[2inf]);fprintf(1,'%f%f\n',a);fclose(fid);輸出同例8-1文件中的數(shù)據(jù)格式。Matlab文件與程序接口全文共34頁,當(dāng)前為第7頁。88.1.3文件定位和文件狀態(tài)1.feof函數(shù):檢測文件是否已經(jīng)結(jié)束status=feof(fid)2.ferror函數(shù):用于查詢文件的輸入、輸出錯(cuò)誤信息msg=ferror(fid)3.frewind函數(shù):使位置指針重新返回文件的開頭frewind(fid)4.fseek函數(shù):設(shè)置文件的位置指針status=fseek(fid,offset,origin)5.ftell函數(shù):用于查詢當(dāng)前文件指針的位置position=ftell(fid);Matlab文件與程序接口全文共34頁,當(dāng)前為第8頁。9例8-3輸出文件的大小。程序fid=fopen('my.txt','r');fseek(fid,0,'eof');x=ftell(fid);fprintf(1,'FileSize=%d\n',x);frewind(fid);x=ftell(fid);fprintf(1,'FilePosition=%d\n',x);fclose(fid);輸出FileSize=231FilePosition=0Matlab文件與程序接口全文共34頁,當(dāng)前為第9頁。108.1.4按行讀取數(shù)據(jù)1.fgetl函數(shù):按行從文件中讀取數(shù)據(jù),但不讀取換行符。line=fgetl(fid)2.fgets函數(shù):用于從文件中讀取行、保留換行符并把行作為字符串返回。(1)line=fgets(fid)(2)line=fgets(fid,nchar)Matlab文件與程序接口全文共34頁,當(dāng)前為第10頁。11例8-4編寫一個(gè)程序,用于讀取例8-1生成的數(shù)據(jù)。程序

fid=fopen('my.txt','r');while~feof(fid)%在文件沒有結(jié)束時(shí)按行讀取數(shù)據(jù)

s=fgets(fid);fprintf(1,'%s',s);endfclose(fid);輸出同例8-1文件中的數(shù)據(jù)格式。Matlab文件與程序接口全文共34頁,當(dāng)前為第11頁。128.1.5二進(jìn)制數(shù)據(jù)文件的讀寫fwrite函數(shù):用于向一個(gè)文件寫入二進(jìn)制數(shù)據(jù)count=fwrite(fid,A,precision)。fread函數(shù):用于從文件中讀二進(jìn)制數(shù)據(jù)[A,count]=fread(fid,size,precision)注意:使用函數(shù)fread()和fwrite()讀寫文件時(shí),必須以二進(jìn)制方式打開文件Matlab文件與程序接口全文共34頁,當(dāng)前為第12頁。13例8-5將5行5列“魔方陣”存入二進(jìn)制文件中。程序fid=fopen('my.dat','w');a=magic(5);fwrite(fid,a,'long');fclose(fid);Matlab文件與程序接口全文共34頁,當(dāng)前為第13頁。14例8-6從二進(jìn)制文件中讀取“魔方陣”。程序fid=fopen('my.dat','r');[A,count]=fread(fid,[5,inf],'long');fclose(fid);AMatlab文件與程序接口全文共34頁,當(dāng)前為第14頁。158.1.6圖像、聲音文件的讀寫1.imread函數(shù):從文件中讀入圖像A=imread(filename,fmt)[A,map]=imread(filename,fmt)2.image函數(shù):顯示圖像image(A)3.imwrite函數(shù):將圖像寫入文件imwrite(A,filename,fmt)imwrite(A,map,filename,fmt)Matlab文件與程序接口全文共34頁,當(dāng)前為第15頁。16例8-7顯示一幅真彩(RGB)圖像。程序[x,map]=imread('C:\MATLAB7\toolbox\matlab\demos\street1.jpg');image(x);Matlab文件與程序接口全文共34頁,當(dāng)前為第16頁。17例8-8將圖像寫入文件程序[x,map]=imread('C:\MATLAB7\toolbox\matlab\demos\street1.jpg');imwrite(x,'my.bmp'); %將圖像保存為真彩色的bmp[x,map]=imread('my.bmp');image(x);Matlab文件與程序接口全文共34頁,當(dāng)前為第17頁。188.1.6圖像、聲音文件的讀寫4.imfinfo函數(shù):查詢圖像文件信息innfo=imflnfo(filename)5.wavread函數(shù):用于讀取擴(kuò)展名為“.wav”的聲音文件y=wavread(file)[y,fs,nbits]=wavread(file)6.wavwrite函數(shù):用于將數(shù)據(jù)寫入到擴(kuò)展名為“wav”的聲音文件中wavwrite(y,fs,nbits,wavefile)7.wavplay函數(shù):利用windows音頻輸出設(shè)備播放聲音wavplay(y,fs)Matlab文件與程序接口全文共34頁,當(dāng)前為第18頁。19例8-9讀取一個(gè)音頻數(shù)據(jù)文件,以不同頻率播放,并顯示聲音波形。程序:y=wavread('C:\MATLAB7\toolbox\simulink\simdemos\simgeneral\toilet.wav')plot(y);wavplay(y);wavplay(y,11025);wavplay(y,44100);Matlab文件與程序接口全文共34頁,當(dāng)前為第19頁。208.2應(yīng)用程序接口MATLAB的外部接口應(yīng)用包括如下內(nèi)容:(1)在MATLAB中調(diào)用已有的C/C++語言代碼;(2)在C/C++語言中調(diào)用MATLAB的算法;(3)利用COM標(biāo)準(zhǔn)進(jìn)行客戶/服務(wù)器模式開發(fā);例如在VisualBasic程序或者M(jìn)icrosoftExcel中調(diào)用MATLAB的算法(4)在C/C++語言中讀寫MAT數(shù)據(jù)文件。Matlab文件與程序接口全文共34頁,當(dāng)前為第20頁。218.2.1MEX文件例8-10簡單MEX文件示例mexHelloWorld.c。程序:#include"mex.h"voidmexFunction(intnlhs,mxArray*plhs[],intnrhs,constmxArray*prhs[]){ mexPrintf("HelloMatlabWorld!");}Matlab文件與程序接口全文共34頁,當(dāng)前為第21頁。228.2.2MATLAB計(jì)算引擎MATLAB的計(jì)算引擎應(yīng)用就是利用MATLAB提供的一組接口函數(shù),在用戶開發(fā)的C/C++語言應(yīng)用程序中,通過某種通信機(jī)制后臺調(diào)用MATLAB應(yīng)用程序以完成復(fù)雜的系統(tǒng)任務(wù)。Matlab文件與程序接口全文共34頁,當(dāng)前為第22頁。23例8-11設(shè)計(jì)一程序,在C/C++語言中調(diào)用mesh函數(shù)來繪制高斯矩陣的曲面。解題步驟:Matlab文件與程序接口全文共34頁,當(dāng)前為第23頁。24例8-11程序:#include<stdio.h>#include"engine.h"voidmain(){ Engine*ep; intstatus=0; //打開計(jì)算引擎

ep=engOpen(NULL); if(ep==(Engine*)NULL){ printf("錯(cuò)誤:無法打開MATLAB計(jì)算引擎\n"); exit(-1); } //執(zhí)行MATLAB指令

engEvalString(ep,"mesh(peaks);"); getchar(); //關(guān)閉MATLAB計(jì)算引擎

status=engClose(ep); if(status!=0){ printf("無法正常關(guān)閉MATLAB計(jì)算引擎\n"); exit(-1); }}Matlab文件與程序接口全文共34頁,當(dāng)前為第24頁。258.2.3基于COM組件的接口編程該方法的主要特點(diǎn)有:(1)應(yīng)用程序完全脫離MATLAB工作環(huán)境;(2)MATLAB數(shù)學(xué)庫和工具箱中包括的各種各樣的函數(shù),所以降低了編寫算法難度;(3)由于將算法程序做成了COM組件的形式,所以實(shí)現(xiàn)了算法的保密。Matlab文件與程序接口全文共34頁,當(dāng)前為第25頁。268.2.4在C/C++語言中讀寫MAT數(shù)據(jù)文件支持C/C++語言讀寫MAT文件的函數(shù)庫有下面幾個(gè):1.打開數(shù)據(jù)文件──matOpenMATFile*matOpen(constchar*filename,constchar*mode)2.關(guān)閉數(shù)據(jù)文件──matCloseintmatClose(MATFile*mfp)3.獲取變量──matGetVariablemxArray*matGetVariable(MATFile*mfp,constchar*name)4.寫入數(shù)據(jù)──matPutVariableintmatPutVariable(MATFile*mfp,constchar*name,constmxArray*mp)Matlab文件與程序接口全文共34頁,當(dāng)前為第26頁。27擴(kuò)展閱讀8.3

結(jié)構(gòu)數(shù)組8.4元胞數(shù)組8.5面向?qū)ο蟪绦蛟O(shè)計(jì)Matlab文件與程序接口全文共34頁,當(dāng)前為第27頁。28應(yīng)用舉例例8-12在C/C++語言中調(diào)用MATLAB計(jì)算魔方陣,并將結(jié)果顯示到屏幕。Matlab文件與程序接口全文共34頁,當(dāng)前為第28頁。29程序代碼-1#include"engine.h"#include<stdio.h>voidmain(){ Engine*ep; double*p; mxArray*equation; inti=0,j=0; intstatus=0; //打開計(jì)算引擎

ep=engOpen(NULL); if(ep==(Engine*)NULL){ printf("錯(cuò)誤:無法打開MATLAB計(jì)算引擎\n"); exit(-1); }Matlab文件與程序接口全文共34頁,當(dāng)前為第29頁。30程序代碼-2 //執(zhí)行MATLAB指令

engEvalString(ep,"A=magic(5);"); equation=engGetVariable(ep,"A"); p=mxGetPr(equation); printf("\nMATLAB中計(jì)算magic(5)\n"); for(i=0;i<5;i++) { for(j=0;j<5;j++) printf("%8.0lf",*(p+i+j*5)); printf("\n"); } //關(guān)閉MATLAB計(jì)算引擎

status=engClose(ep); if(status!=0){ printf("無法正常關(guān)閉MATLAB計(jì)算引擎\n"); exit(-1); }}Matlab文件與程序接口全文共34頁,當(dāng)前為第30頁。31例8-13Matlab文件與程序接口全文共34頁,當(dāng)前為第31頁。32程序代碼-1#include<stdio.h>#include<string.h>#include"engine.h"voidmain(){ Engine*ep; intstatus=0; ep=engOpen(NULL); //執(zhí)行MATLAB指令

doubleA[]={2,3,4,-1,1,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論