第13章 MATLAB外部程序接口技術(shù)_第1頁
第13章 MATLAB外部程序接口技術(shù)_第2頁
第13章 MATLAB外部程序接口技術(shù)_第3頁
第13章 MATLAB外部程序接口技術(shù)_第4頁
第13章 MATLAB外部程序接口技術(shù)_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第13章MATLAB外部程序接口技術(shù)13.1MATLAB與Office軟件的混合使用13.2MATLAB數(shù)據(jù)接口13.3MATLAB與其他語言的接口13.1MATLAB與Office軟件的混合使用為了在Word環(huán)境下調(diào)用MATLAB的計算功能,需要調(diào)用MATLAB的Notebook軟件工具,它為Word提供M-Book.dot模板。利用該模板創(chuàng)建的Word文檔通常稱為M-Book文檔。1.Notebook的安裝與啟動>>notebook-setup13.1.1在Word中使用MATLAB2.Notebook菜單項M-Book模板定義了Word與MATLAB進行通信的宏指令、文檔樣式和工具欄。3.單元的使用在MATLABNotebook中,凡是在Word與MATLAB之間進行傳遞的內(nèi)容稱為單元(cell),它是Notebook與MATLAB交互的基本單位。(1)輸入輸出單元定義輸入單元的方法輸入單元執(zhí)行后產(chǎn)生藍色的輸出單元。(2)自動初始化單元(3)單元組4.計算區(qū)計算區(qū)(calczone)是一個由普通Word文本、輸入單元和輸出單元組成的連續(xù)區(qū),用于描述某個具體的作業(yè)或問題。在計算區(qū)里,用戶可以根據(jù)描述問題的需要,安排段落、標題、分欄,而不受計算區(qū)外的有關(guān)格式的約束。定義計算區(qū)的方法13.1.2在Excel中使用MATLAB通過SpreadsheetLink,可以在Excel工作區(qū)和MATLAB工作空間之間進行數(shù)據(jù)交換,也可以使用插件方式在Excel中調(diào)用MATLAB的算法。1.SpreadsheetLink的安裝與啟動2.SpreadsheetLink的操作(1)將Excel表格中的數(shù)據(jù)導出到MATLAB工作空間中(2)從MATLAB工作空間導入數(shù)據(jù)到Excel表格中(3)調(diào)用MATLAB函數(shù)進行運算13.2MATLAB數(shù)據(jù)接口MATLAB提供多種方法支持將磁盤文件和剪貼板中的數(shù)據(jù)導入到MATLAB的工作區(qū),最簡單的辦法是使用數(shù)據(jù)導入向?qū)В赏ㄟ^在“主頁”選項卡“變量”命令組中選擇“導入數(shù)據(jù)”命令按鈕或在命令行窗口執(zhí)行uiimport命令來激活它),而在M文件中則可以使用MATLAB文件操作函數(shù)。13.2.1文件操作1.文件打開與關(guān)閉(1)fopen函數(shù)fid=fopen(filename,permission)r 以讀方式打開一個文件。w

以寫方式打開一個文件。a 打開一個文件,隨后的操作可在該文件末尾添加數(shù)據(jù)r+ 以讀和寫方式打開一個文件fopen默認打開二進制文件,如果打開的是文本文件,則需在上述允許方式后加t,如rt、wt等。例如:F1=fopen('old.txt','rt')F2=fopen('new.dat','r+')(2)fclose函數(shù)fclose函數(shù)用于關(guān)閉已打開的文件,其調(diào)用格式為:status=fclose(fid)2.文件的讀寫(1)fscanf函數(shù)fscanf函數(shù)用于讀取文本文件的內(nèi)容,并按指定格式存入矩陣,其調(diào)用格式為:[A,count]=fscanf(fid,fmt,size)例如:x=fscanf(fid,'%5d',100);y=fscanf(fid,'%5d',[10,10]);(2)fprintf函數(shù)fprintf函數(shù)可以將數(shù)據(jù)按指定格式寫入到文本文件中,其調(diào)用格式為:count=fprintf(fid,fmt,A)例13-1計算當x=[0.0,0.1,0.2,…,1.0]時,f(x)=ex的值,并將結(jié)果寫入文件demo1.txt。程序如下:x=0:0.1:1;Y=[x;exp(x)];fid=fopen('demo1.txt','w');fprintf(fid,'%6.2f%12.8f\n',Y);fclose(fid);(3)fgetl與fgets函數(shù)除上述對文本文件進行讀寫操作的函數(shù)外,讀取文本文件的函數(shù)還有fgetl和fgets,它們按行讀取數(shù)據(jù),其調(diào)用格式為:line=fgetl(fid)line=fgets(fid,nchar)例13-2讀出例13-1生成的文件demo1.txt中的數(shù)據(jù)。fid=fopen('demo1.txt','r');while1line=fgetl(fid);ifline<0breakenddisp(line)endfclose(fid);(4)textscan函數(shù)如果一個文件中的數(shù)據(jù)全部由ASCII字符組成,且數(shù)據(jù)間有間隔符(如空格、逗號、分號、制表位),則文件稱為有格式文件。有格式文件可以使用文本輸入函數(shù)textscan讀取數(shù)據(jù),函數(shù)調(diào)用格式為:C=textscan(fid,fmt,N,param,value)例13-3假定文件textdemo.txt中有以下格式的數(shù)據(jù):NameEnglishChineseMathmaticsWang 9998100Li 988970Zhang 809097Zhao 776587從該文件中將前3個數(shù)據(jù)讀入到grades的程序段如下:fid=fopen('textdemo.txt','r');grades=textscan(fid,'%s%d%d%d',3,'headerlines',1);(5)fread函數(shù)該函數(shù)從文件中讀入二進制數(shù)據(jù),其調(diào)用格式為:[A,count]=fread(fid,size,precision,skip)例13-4假設(shè)文件alphabet.txt的內(nèi)容是按順序排列的26個大寫英文字母,讀取前5個字母的ASCII和這5個字符。程序如下:fid=fopen('alphabet.txt','r');c=fread(fid,5);frewind(fid);d=fread(fid,5,'*char');fclose(fid);(6)fwrite函數(shù)fwrite函數(shù)按照指定的數(shù)據(jù)類型將矩陣中的元素寫入到文件中,其調(diào)用格式為:count=fwrite(fid,A,precision)例13-5建立一數(shù)據(jù)文件magic5.dat,用于存放5階魔方陣。程序如下:fid=fopen('magic5.dat','w');cnt=fwrite(fid,magic(5),'int32');fclose(fid);3.數(shù)據(jù)文件定位(1)fseek函數(shù)該函數(shù)用于定位文件位置指針,其調(diào)用格式為:status=fseek(fid,offset,origin)例如:fseek(fid,0,-1) %指針指向文件頭fseek(fid,-5,'eof') %指針指向文件尾前第5個字節(jié)(2)ftell函數(shù)該函數(shù)用來查詢文件指針的當前位置,其調(diào)用格式為:position=ftell(fid)ftell函數(shù)的返回值為從文件頭到指針當前位置的字節(jié)數(shù)。若返回值為-1,表示獲取文件當前位置失敗。例13-6下列程序執(zhí)行后,變量four、position和three的值是多少?a=1:5;fid=fopen('fdat.bin','w');fwrite(fid,a,'int16');fclose(fid);fid=fopen('fdat.bin','r');status=fseek(fid,6,'bof');four=fread(fid,1,'int16');position=ftell(fid);status=fseek(fid,-4,'cof');three=fread(fid,1,'int16');status=fclose(fid);(3)feof函數(shù)該函數(shù)用來判斷當前的文件位置指針是否到達文件尾部:status=feof(fid)當?shù)竭_文件結(jié)束位置時,測試結(jié)果為1,否則返回0。(4)ferror函數(shù)用來查詢最近一次輸入或輸出操作中的出錯信息:message=ferror(fid)13.2.2MAT文件與應(yīng)用1.MAT文件save命令可以將MATLAB系統(tǒng)內(nèi)部數(shù)據(jù)保存為MAT文件,而load命令可以將磁盤上的MAT文件中的數(shù)據(jù)讀入到MATLAB系統(tǒng)中。MATLAB提供的用于操作MAT文件的API函數(shù)封裝于兩個標準庫文件中:libmat.lib和libmx.lib。前者用于對MAT文件的操作,后者用于對MAT文件中矩陣的操作2.C語言MAT函數(shù)用于在C程序中對MAT文件進行操作。3.MAT文件的基本操作在C程序中,通過指向MAT文件的指針對文件進行操作,定義指向MAT文件的指針的格式為:MATFile*mfp;(1)打開MAT文件mfp=matOpen(filename,mode)(2)讀寫MAT文件①

向MAT文件中寫入一個矩陣。matPutVariable(mfp,name,mp)matPutArrayAsGlobal(mfp,mp)②

獲取MAT文件中的變量列表。matGetDir(mfp,num)③

從MAT文件中讀取一個矩陣。matGetVariable(mfp,name)(3)關(guān)閉MAT文件。matClose(mfp)4.mx函數(shù)在C程序中,使用MATLAB數(shù)據(jù)時還用到MATLAB提供的接口函數(shù)中的mx函數(shù),以完成對mxArray對象的操作。MATLAB的矩陣運算是以mxArray結(jié)構(gòu)體(C++中是mwArray類)為核心構(gòu)建的。5.MAT文件操作舉例例13-7創(chuàng)建對MAT文件進行操作的C程序。編譯生成應(yīng)用程序的兩種方法。(1)利用MicrosoftVisualStudio2010集成環(huán)境(2)利用MATLAB編譯器13.3MATLAB與其他語言的接口MEX(MATLABexecutable)動態(tài)鏈接函數(shù)接口是MATLAB調(diào)用其他語言程序的接口,通過mex命令將C、C++等語言編寫的函數(shù)編譯成動態(tài)鏈接程序,使之成為MATLAB的一個擴展函數(shù)。13.3.1MEX文件1.MEX函數(shù)MEX函數(shù)用于從MATLAB環(huán)境中獲取必要的矩陣數(shù)據(jù)和相應(yīng)信息。所有MEX函數(shù)均在MATLAB的子文件夾extern\include中的頭文件mex.h得到聲明。2.MEX文件的建立C語言的MEX文件的源程序由如下兩個部分組成。(1)入口子程序(mexFunction)voidmexFunction(intnlhs,mxArray*plhs[],intnrhs,constmxArray*prhs[]){…}(2)計算子程序(computationalroutine)包含所有完成計算功能的程序代碼,由入口子程序調(diào)用。例13-8編寫求兩個數(shù)的最小公倍數(shù)的C語言MEX文件。3.MEX文件的編譯MEX文件的編譯需要具備兩個條件:一是要求已經(jīng)安裝MATLAB應(yīng)用程序接口組件及其相應(yīng)的工具,另一個是要求有合適的C語言編譯器。MEX文件的編譯使用mex命令,如果第一次使用,需要配置mex采用什么編譯器。>>mex–setup編譯上述MEX文件,在MATLAB命令行窗口下輸入命令:>>mexc_mex.c13.3.2MATLAB引擎MATLAB引擎(engine)是用于和外部程序結(jié)合使用的一組函數(shù)和程序庫,在C語言程序中利用MATLAB引擎來調(diào)用MATLAB中的函數(shù)。1.MATLAB引擎函數(shù)2.MATLAB引擎的使用首先需要將mxArray轉(zhuǎn)換成MATLAB中可操作的形式。①將mxArray轉(zhuǎn)換成MATLAB可理解的形式。一是用函數(shù)mxCreate來創(chuàng)建矩陣,然后用mxSetName

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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

提交評論