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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

溫馨提示

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

評論

0/150

提交評論