MATLAB程序設(shè)計(jì)綜合教程(第二版)第12章MATLAB外部接口技術(shù)_第1頁(yè)
MATLAB程序設(shè)計(jì)綜合教程(第二版)第12章MATLAB外部接口技術(shù)_第2頁(yè)
MATLAB程序設(shè)計(jì)綜合教程(第二版)第12章MATLAB外部接口技術(shù)_第3頁(yè)
MATLAB程序設(shè)計(jì)綜合教程(第二版)第12章MATLAB外部接口技術(shù)_第4頁(yè)
MATLAB程序設(shè)計(jì)綜合教程(第二版)第12章MATLAB外部接口技術(shù)_第5頁(yè)
已閱讀5頁(yè),還剩37頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、MATLAB程序設(shè)計(jì)綜合教程(第二版)第12章 MATLAB外部接口技術(shù) MATLAB與Microsoft Office的混合使用 MATLAB數(shù)據(jù)接口 MATLAB應(yīng)用程序接口12.1 MATLAB與Microsoft Office的混合使用1Notebook的安裝與啟動(dòng)Notebook的安裝notebook -setupNotebook的啟動(dòng)在MATLAB的命令窗口中輸入命令: notebook或notebook 文件名在Word窗口的“文件”菜單中選擇“新建”或“打開”命令,選擇新建或打開一個(gè)M-Book文檔。 12.1.1 在Word中使用MATLAB2Notebook菜單項(xiàng)M-Boo

2、k模板定義了Word與MATLAB進(jìn)行通信的宏指令、文檔樣式和工具欄。Notebook的許多操作都可以通過“Notebook”菜單項(xiàng)的命令來完成。3單元的使用在MATLAB Notebook中,凡是在Word與MATLAB之間進(jìn)行傳遞的內(nèi)容稱為單元(Cell),它是Notebook與MATLAB交互的基本單位。(1)輸入輸出單元由M-Book文檔傳向MATLAB的命令稱為輸入單元(Input Cell)。在M-Book文檔中任何合法的MATLAB命令都可以定義為輸入單元,輸入單元可以送到MATLAB環(huán)境中去執(zhí)行,執(zhí)行結(jié)果保存在MATLAB工作空間,同時(shí)送回Notebook,成為輸出單元(Out

3、put Cell)。定義輸入單元的方法是:首先選中所需命令,然后在Notebook菜單中選擇Define Input Cell命令,被選中的MATLAB命令成為輸入單元。為了執(zhí)行輸入單元,應(yīng)選擇Notebook菜單中的Evaluate Cell命令或直接按組合鍵Ctrl+Enter。(2)單元組Notebook允許把多行MATLAB命令當(dāng)作一個(gè)整體來運(yùn)行。在Notebook中,把多行輸入單元或自初始化單元稱為單元組(Cell Group)。 定義單元組有以下3種方法。 對(duì)連續(xù)輸入的多行文本型MATLAB命令,用鼠標(biāo)把它們同時(shí)選中,然后在Notebook菜單中選擇Define Input Cel

4、l或Define AutoInit Cell命令,分別生成輸入單元組或自初始化單元組。 對(duì)連續(xù)輸入的多行文本型MATLAB命令,用鼠標(biāo)把它們同時(shí)選中,然后在Notebook菜單中選擇Evaluate Cell命令或按組合鍵Ctrl+Enter,則單元組被定義并執(zhí)行。 把已有的多個(gè)獨(dú)立輸入單元或自初始化單元同時(shí)選中,然后在Notebook菜單中選擇Group Cells命令,于是,便獲得以第一個(gè)獨(dú)立單元的性質(zhì)組合而成的單元組。 4計(jì)算區(qū)計(jì)算區(qū)(Calc Zone)是一個(gè)由普通Word文本、輸入單元和輸出單元組成的連續(xù)區(qū),用于描述某個(gè)具體的作業(yè)或問題。在計(jì)算區(qū)里,用戶可以根據(jù)描述問題的需要,安排段

5、落、標(biāo)題、分欄,而不受計(jì)算區(qū)外的有關(guān)格式的約束。 定義計(jì)算區(qū)的方法是:先選定包含普通Word文本、輸入單元和輸出單元的一個(gè)連續(xù)區(qū),然后選擇Notebook菜單中的Define Calc Zone命令。選擇Evaluate Calc Zone命令即可執(zhí)行計(jì)算區(qū)中的全部輸入單元,且在每個(gè)輸入單元后面以輸出單元形式給出相應(yīng)的計(jì)算結(jié)果。12.1.2 Spreadsheet Link的使用通過Spreadsheet Link,可以在Excel工作區(qū)和MATLAB工作空間之間進(jìn)行數(shù)據(jù)交換,也可以使用插件方式在Excel中調(diào)用MATLAB的算法。1Spreadsheet Link的安裝與啟動(dòng)版Spreads

6、heet Link的安裝是在MATLAB安裝過程中,選中組件Excel Link,隨其他組件一起安裝。安裝完成后,還需要在Excel中進(jìn)行一些設(shè)置后才能使用。2Spreadsheet Link的主要功能和操作Spreadsheet Link支持二維數(shù)值數(shù)組、一維字符數(shù)組和二維單元數(shù)組,不支持多維數(shù)組和結(jié)構(gòu)。(1)將Excel表格中的數(shù)據(jù)導(dǎo)出到MATLAB工作空間中(2)從MATLAB工作空間導(dǎo)入數(shù)據(jù)到Excel表格中(3)調(diào)用MATLAB函數(shù)進(jìn)行運(yùn)算12.2 MATLAB數(shù)據(jù)接口MATLAB提供多種方法支持將磁盤文件和剪貼板中的數(shù)據(jù)導(dǎo)入到MATLAB的工作區(qū),最簡(jiǎn)單的辦法是使用數(shù)據(jù)導(dǎo)入向?qū)В?/p>

7、通過選擇“File”菜單中的“Import data”命令或在命令窗口執(zhí)行命令“uiimport”來激活它),而在M文件中則可以使用MATLAB輸入/輸出函數(shù)。12.2.1 文件輸入/輸出操作1文件打開與關(guān)閉(1)fopen函數(shù)fopen函數(shù)用于打開文件以供讀寫,其調(diào)用格式為fid = fopen (filename, permission)其中fid為文件識(shí)別號(hào),filename為待操作的文件名,permission為對(duì)文件的允許使用方式。permission常用值有r、w、a、r+,默認(rèn)為只讀。打開文件成功時(shí),fid返回一整數(shù),用來標(biāo)識(shí)該文件;打開文件不成功時(shí),fid = 1。(2)fcl

8、ose函數(shù)fclose函數(shù)用于關(guān)閉已打開的文件,其調(diào)用格式為status = fclose(fid)關(guān)閉標(biāo)識(shí)為fid的文件。如果fid為all,則關(guān)閉所有已打開的文件,但標(biāo)準(zhǔn)文件除外。返回0表示關(guān)閉成功,返回1則表示關(guān)閉不成功。2文本文件的讀寫操作(1)fscanf函數(shù)fscanf 函數(shù)用于讀取文本文件的內(nèi)容,并按指定格式存入矩陣。其調(diào)用格式為A, count= fscanf (fid, fmt, size)其中A用于存放讀取的數(shù)據(jù),count返回成功讀取的數(shù)據(jù)元素個(gè)數(shù),fid為文件識(shí)別號(hào),fmt用以控制讀取的數(shù)據(jù)格式,size指定讀取多少數(shù)據(jù)。數(shù)據(jù)格式由%加上格式符組成,常見的格式符如表所示

9、,在%之后還可以加上數(shù)據(jù)寬度。例如,%3d,它控制讀取的整型數(shù)據(jù)取3位數(shù)字;控制讀取實(shí)型數(shù)據(jù),取10個(gè)字符(含小數(shù)點(diǎn)),小數(shù)部分占3位。 (2)fprintf函數(shù)fprintf函數(shù)可以將數(shù)據(jù)按指定格式寫入到文本文件中。其調(diào)用格式為count = fprintf (fid, fmt, A)其中fid和fmt的意義與fscanf函數(shù)相同,A存放要寫入文件的數(shù)據(jù),count返回成功輸出的字節(jié)數(shù)。先按fmt指定的格式將數(shù)據(jù)矩陣A格式化,然后寫入到fid所關(guān)聯(lián)的文件。如果不指定fid,則默認(rèn)輸出到屏幕。3二進(jìn)制文件的讀寫操作(1)fread函數(shù)從文件中讀入二進(jìn)制數(shù)據(jù)。其調(diào)用格式為A,count = fr

10、ead(fid,size,precision)其中A用于存放讀取的數(shù)據(jù),count返回所讀取的數(shù)據(jù)元素個(gè)數(shù),fid為文件識(shí)別號(hào),size用于指定讀入數(shù)據(jù)的元素?cái)?shù)量(可取值與fscanf函數(shù)相同,省略時(shí)則讀取整個(gè)文件內(nèi)容),precision指定讀寫數(shù)據(jù)的類型,其默認(rèn)值為uchar。(2)fwrite函數(shù)fwrite 函數(shù)按照指定的數(shù)據(jù)類型將矩陣中的元素寫入到文件中。其調(diào)用格式為count = fwrite (fid, A, precision)其中count返回成功寫入文件的數(shù)據(jù)元素個(gè)數(shù),fid為文件句柄,A用來存放要寫入文件的數(shù)據(jù),precision用于控制所寫數(shù)據(jù)的類型。4數(shù)據(jù)文件定位(1

11、)fseek函數(shù)用于定位文件位置指針,其調(diào)用格式為status = fseek(fid, offset, origin)其中fid為文件識(shí)別號(hào);offset表示位置指針相對(duì)移動(dòng)的字節(jié)數(shù),若為正整數(shù)表示向文件尾方向移動(dòng),若為負(fù)整數(shù)表示向文件頭方向移動(dòng);origin表示位置指針移動(dòng)的參照位置,它的取值有3種可能:cof 或0表示文件的當(dāng)前位置,bof 或1表示文件的開始位置,eof或1表示文件的結(jié)束位置。若定位成功,status返回值為0,否則返回值為1。(2)ftell函數(shù)用來查詢文件指針的當(dāng)前位置,其調(diào)用格式為position = ftell (fid)ftell函數(shù)的返回值為從文件頭到指針當(dāng)

12、前位置的字節(jié)數(shù)。若返回值為1,表示獲取文件當(dāng)前位置失敗。(3)feof函數(shù)用來判斷當(dāng)前的文件位置指針是否到達(dá)文件尾部,其調(diào)用格式為 status = feof (fid)當(dāng)?shù)竭_(dá)文件結(jié)束位置時(shí),測(cè)試結(jié)果為1,否則返回0。(4)ferror函數(shù)用來查詢最近一次輸入或輸出操作中的出錯(cuò)信息,其調(diào)用格式為: message = ferror(fid)12.2.2 MAT文件與應(yīng)用1MAT文件MATLAB的“save”命令可以將MATLAB系統(tǒng)內(nèi)部數(shù)據(jù)保存為MAT文件,而“l(fā)oad”命令可以將磁盤上的MAT文件中的數(shù)據(jù)讀入到MATLAB系統(tǒng)中。此外,為了有效地管理MAT文件,以及在MATLAB外部讀取和創(chuàng)

13、建MAT文件,MATLAB提供了一個(gè)子程序庫(kù),用戶可以在C/C+、FORTRAN程序中直接調(diào)用這些子程序來創(chuàng)建和讀取MAT文件。MATLAB提供的用于操作MAT文件的API函數(shù)封裝于兩個(gè)標(biāo)準(zhǔn)庫(kù)文件中:和。前者用于對(duì)MAT文件的操作,后者用于對(duì)MAT文件中矩陣的操作。2C語言MAT文件應(yīng)用(1)常用MAT文件操作函數(shù) 打開MAT文件。MATFile *matOpen(const char *filename, const char *mode)其中,filename為要操作的文件;mode用來說明對(duì)文件的使用方式,它可取以下值: 關(guān)閉MAT文件。int matClose(MATFile *mfp

14、);其中,mfp指向要操作的MAT文件,如果函數(shù)執(zhí)行成功,返回0,否則返回“EOF”。 向MAT文件中存入一個(gè)矩陣。int matPutVariable(MATFile *mfp, const char *name, const mxArray *mp);此函數(shù)將一個(gè)mp指向的mxArray結(jié)構(gòu)體寫入mfp所指向的MAT文件中。如果文件中存在同名的mxArray結(jié)構(gòu)體,那么將覆蓋原來的值;如果不存在同名的mxArray結(jié)構(gòu)體,則將此結(jié)構(gòu)體添加到文件末尾。函數(shù)執(zhí)行成功,返回0,否則返回一個(gè)非零值。 向MAT文件中存入一個(gè)矩陣。matPutArrayAsGlobal(MATFile*mfp, co

15、nst mxArray*mp);執(zhí)行此命令后,使得用load命令裝入這個(gè)MAT文件時(shí),該矩陣對(duì)應(yīng)的變量成為全局變量。 獲取MAT文件中的變量列表。char *matGetDir(MATFile *mfp, int *num); 獲取MAT文件的C語言FILE句柄。FILE *matGetFp(MATFile *mfp);通過該句柄,用戶可以使用C語言的庫(kù)函數(shù)feof、ferror來判斷錯(cuò)誤原因。 從MAT文件中讀取一個(gè)矩陣。mxArray *matGetVariable(MATFile *mfp, const char *name);MatGetDir、matGetFp、matGetVaria

16、ble函數(shù)通過mxCalloc函數(shù)分配內(nèi)存,在程序結(jié)束時(shí),必須使用mxFree函數(shù)釋放內(nèi)存。 從MAT文件中刪除一個(gè)矩陣。int matDeleteVariable(MATFile *mfp, const char *name);其中name為要?jiǎng)h除的矩陣。如果函數(shù)執(zhí)行成功,將返回0,否則返回一個(gè)非零值。(2)mx-函數(shù)在C程序中使用MATLAB數(shù)據(jù)時(shí)還用到MATLAB提供的接口函數(shù)中的mx-函數(shù),以完成對(duì)mxArray對(duì)象的操作。MATLAB的矩陣運(yùn)算是以mxArray結(jié)構(gòu)體(C+中是mwArray類)為核心構(gòu)建的,mxArray結(jié)構(gòu)體的定義在MATLAB的文件中。12.3 MATLAB與其

17、他語言的接口接口是MATLAB與其他語言程序相互調(diào)用各自函數(shù)的方法,MEX文件使MATLAB可以直接調(diào)用或鏈接C/C+語言編寫的算法函數(shù),而MATLAB引擎使C/C+語言可以調(diào)用MATLAB函數(shù)。12.3.1 MEX文件MEX(MATLAB Executable)動(dòng)態(tài)鏈接函數(shù)接口是MATLAB調(diào)用其它語言編寫的程序或算法的接口,通過mex命令將C、FORTRAN語言編寫的算法函數(shù)編譯成動(dòng)態(tài)鏈接程序,使之成為MATLAB的一個(gè)擴(kuò)展函數(shù)。在Windows系統(tǒng)中,MEX文件是DLL格式,使用DLL格式可以直接訪問Windows系統(tǒng)的各種資源,生成圖形用戶界面,還可以利用Windows的動(dòng)態(tài)數(shù)據(jù)交換能

18、力,與其他的Windows應(yīng)用程序交換數(shù)據(jù)。1MEX函數(shù)MEX函數(shù)用于從MATLAB環(huán)境中獲取必要的矩陣數(shù)據(jù)和相應(yīng)信息。所有MEX函數(shù)均在MATLAB的子文件夾externinclude中的頭文件得到聲明。 2MEX文件的建立C語言的MEX文件的源程序由如下兩個(gè)部分組成。(1)入口子程序mexFunction其作用是在MATLAB系統(tǒng)與被調(diào)用的外部子程序之間建立通信聯(lián)系,定義被MATLAB調(diào)用的外部子程序的入口地址、MATLAB系統(tǒng)和子程序傳遞的參數(shù)等。入口子程序的構(gòu)成如下:void mexFunction(int nlhs,mxArray*plhs,int nrhs,mxArray*prhs)函數(shù)中有4個(gè)參數(shù)nlhs、plhs、nrhs和prhs。nlhs是輸出數(shù)據(jù)的個(gè)數(shù),plhs是指向輸出數(shù)據(jù)的指針,nrhs是輸入數(shù)據(jù)的個(gè)數(shù),prhs是指向輸入數(shù)據(jù)的指針。 (2)計(jì)算子程序(Computational Routine)它包含所有完成計(jì)算功能的程序代碼,由入口子程序調(diào)用。3MEX文件的編譯MEX文件的編譯需要具備兩個(gè)條件:一是要求已經(jīng)安裝MATLAB應(yīng)用程序接口組件及其相應(yīng)的工具,另一個(gè)是要求有合適的C/C+語言編譯器。MEX文件的編譯使用mex命令,如果第一次使用,需要配置mex采用什么編譯器。在MAT

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論