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

文檔簡(jiǎn)介

第12章MATLAB外部接口技術(shù)MATLAB與MicrosoftOffice的混合使用

MATLAB數(shù)據(jù)接口

MATLAB應(yīng)用程序接口12.1MATLAB與MicrosoftOffice的混合使用1.Notebook的安裝與啟動(dòng)Notebook的安裝notebook-setupNotebook的啟動(dòng)在MATLAB的命令窗口中輸入命令:

notebook或notebook文件名在Word窗口的“文件”菜單中選擇“新建”或“打開”命令,選擇新建或打開一個(gè)M-Book文檔。

12.1.1在Word中使用MATLAB2.Notebook菜單項(xiàng)M-Book模板定義了Word與MATLAB進(jìn)行通信的宏指令、文檔樣式和工具欄。Notebook的許多操作都可以通過(guò)“Notebook”菜單項(xiàng)的命令來(lái)完成。3.單元的使用在MATLABNotebook中,凡是在Word與MATLAB之間進(jìn)行傳遞的內(nèi)容稱為單元(Cell),它是Notebook與MATLAB交互的基本單位。(1)輸入輸出單元由M-Book文檔傳向MATLAB的命令稱為輸入單元(InputCell)。在M-Book文檔中任何合法的MATLAB命令都可以定義為輸入單元,輸入單元可以送到MATLAB環(huán)境中去執(zhí)行,執(zhí)行結(jié)果保存在MATLAB工作空間,同時(shí)送回Notebook,成為輸出單元(OutputCell)。定義輸入單元的方法是:首先選中所需命令,然后在Notebook菜單中選擇DefineInputCell命令,被選中的MATLAB命令成為輸入單元。為了執(zhí)行輸入單元,應(yīng)選擇Notebook菜單中的EvaluateCell命令或直接按組合鍵Ctrl

+

Enter。(2)單元組Notebook允許把多行MATLAB命令當(dāng)作一個(gè)整體來(lái)運(yùn)行。在Notebook中,把多行輸入單元或自初始化單元稱為單元組(CellGroup)。定義單元組有以下3種方法。①對(duì)連續(xù)輸入的多行文本型MATLAB命令,用鼠標(biāo)把它們同時(shí)選中,然后在Notebook菜單中選擇DefineInputCell或DefineAutoInitCell命令,分別生成輸入單元組或自初始化單元組。②對(duì)連續(xù)輸入的多行文本型MATLAB命令,用鼠標(biāo)把它們同時(shí)選中,然后在Notebook菜單中選擇EvaluateCell命令或按組合鍵Ctrl

+

Enter,則單元組被定義并執(zhí)行。③把已有的多個(gè)獨(dú)立輸入單元或自初始化單元同時(shí)選中,然后在Notebook菜單中選擇GroupCells命令,于是,便獲得以第一個(gè)獨(dú)立單元的性質(zhì)組合而成的單元組。

4.計(jì)算區(qū)計(jì)算區(qū)(CalcZone)是一個(gè)由普通Word文本、輸入單元和輸出單元組成的連續(xù)區(qū),用于描述某個(gè)具體的作業(yè)或問(wèn)題。在計(jì)算區(qū)里,用戶可以根據(jù)描述問(wèn)題的需要,安排段落、標(biāo)題、分欄,而不受計(jì)算區(qū)外的有關(guān)格式的約束。定義計(jì)算區(qū)的方法是:先選定包含普通Word文本、輸入單元和輸出單元的一個(gè)連續(xù)區(qū),然后選擇Notebook菜單中的DefineCalcZone命令。選擇EvaluateCalcZone命令即可執(zhí)行計(jì)算區(qū)中的全部輸入單元,且在每個(gè)輸入單元后面以輸出單元形式給出相應(yīng)的計(jì)算結(jié)果。12.1.2SpreadsheetLink的使用通過(guò)SpreadsheetLink,可以在Excel工作區(qū)和MATLAB工作空間之間進(jìn)行數(shù)據(jù)交換,也可以使用插件方式在Excel中調(diào)用MATLAB的算法。1.SpreadsheetLink的安裝與啟動(dòng)MATLAB7.X版SpreadsheetLink的安裝是在MATLAB安裝過(guò)程中,選中組件ExcelLink,隨其他組件一起安裝。安裝完成后,還需要在Excel中進(jìn)行一些設(shè)置后才能使用。2.SpreadsheetLink的主要功能和操作SpreadsheetLink支持二維數(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.2MATLAB數(shù)據(jù)接口MATLAB提供多種方法支持將磁盤文件和剪貼板中的數(shù)據(jù)導(dǎo)入到MATLAB的工作區(qū),最簡(jiǎn)單的辦法是使用數(shù)據(jù)導(dǎo)入向?qū)В赏ㄟ^(guò)選擇“File”菜單中的“Importdata”命令或在命令窗口執(zhí)行命令“uiimport”來(lái)激活它),而在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ù),用來(lái)標(biāo)識(shí)該文件;打開文件不成功時(shí),fid=

1。(2)fclose函數(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ù)格式由%加上格式符組成,常見(jiàn)的格式符如表11.4所示,在%之后還可以加上數(shù)據(jù)寬度。例如,%3d,它控制讀取的整型數(shù)據(jù)取3位數(shù)字;%10.3f控制讀取實(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]=fread(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用來(lái)存放要寫入文件的數(shù)據(jù),precision用于控制所寫數(shù)據(jù)的類型。4.?dāng)?shù)據(jù)文件定位(1)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ù)用來(lái)查詢文件指針的當(dāng)前位置,其調(diào)用格式為position=ftell(fid)ftell函數(shù)的返回值為從文件頭到指針當(dāng)前位置的字節(jié)數(shù)。若返回值為–1,表示獲取文件當(dāng)前位置失敗。(3)feof函數(shù)用來(lái)判斷當(dāng)前的文件位置指針是否到達(dá)文件尾部,其調(diào)用格式為status=feof(fid)當(dāng)?shù)竭_(dá)文件結(jié)束位置時(shí),測(cè)試結(jié)果為1,否則返回0。(4)ferror函數(shù)用來(lái)查詢最近一次輸入或輸出操作中的出錯(cuò)信息,其調(diào)用格式為:message=ferror(fid)12.2.2MAT文件與應(yīng)用1.MAT文件MATLAB的“save”命令可以將MATLAB系統(tǒng)內(nèi)部數(shù)據(jù)保存為MAT文件,而“l(fā)oad”命令可以將磁盤上的MAT文件中的數(shù)據(jù)讀入到MATLAB系統(tǒng)中。此外,為了有效地管理MAT文件,以及在MATLAB外部讀取和創(chuàng)建MAT文件,MATLAB提供了一個(gè)子程序庫(kù),用戶可以在C/C++、FORTRAN程序中直接調(diào)用這些子程序來(lái)創(chuàng)建和讀取MAT文件。MATLAB提供的用于操作MAT文件的API函數(shù)封裝于兩個(gè)標(biāo)準(zhǔn)庫(kù)文件中:libmat.lib和libmx.lib。前者用于對(duì)MAT文件的操作,后者用于對(duì)MAT文件中矩陣的操作。2.C語(yǔ)言MAT文件應(yīng)用(1)常用MAT文件操作函數(shù)①打開MAT文件。MATFile*matOpen(constchar*filename,constchar*mode)其中,filename為要操作的文件;mode用來(lái)說(shuō)明對(duì)文件的使用方式,它可取以下值:②關(guān)閉MAT文件。intmatClose(MATFile*mfp);其中,mfp指向要操作的MAT文件,如果函數(shù)執(zhí)行成功,返回0,否則返回“EOF”。③向MAT文件中存入一個(gè)矩陣。intmatPutVariable(MATFile*mfp,constchar*name,constmxArray*mp);此函數(shù)將一個(gè)mp指向的mxArray結(jié)構(gòu)體寫入mfp所指向的MAT文件中。如果文件中存在同名的mxArray結(jié)構(gòu)體,那么將覆蓋原來(lái)的值;如果不存在同名的mxArray結(jié)構(gòu)體,則將此結(jié)構(gòu)體添加到文件末尾。函數(shù)執(zhí)行成功,返回0,否則返回一個(gè)非零值。④向MAT文件中存入一個(gè)矩陣。matPutArrayAsGlobal(MATFile*mfp,constmxArray*mp);執(zhí)行此命令后,使得用load命令裝入這個(gè)MAT文件時(shí),該矩陣對(duì)應(yīng)的變量成為全局變量。⑤獲取MAT文件中的變量列表。char*matGetDir(MATFile*mfp,int*num);⑥獲取MAT文件的C語(yǔ)言FILE句柄。FILE*matGetFp(MATFile*mfp);通過(guò)該句柄,用戶可以使用C語(yǔ)言的庫(kù)函數(shù)feof、ferror來(lái)判斷錯(cuò)誤原因。⑦從MAT文件中讀取一個(gè)矩陣。mxArray*matGetVariable(MATFile*mfp,constchar*name);MatGetDir、matGetFp、matGetVariable函數(shù)通過(guò)mxCalloc函數(shù)分配內(nèi)存,在程序結(jié)束時(shí),必須使用mxFree函數(shù)釋放內(nèi)存。⑧從MAT文件中刪除一個(gè)矩陣。intmatDeleteVariable(MATFile*mfp,constchar*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的extern\include\matrix.h文件中。12.3MATLAB與其他語(yǔ)言的接口接口是MATLAB與其他語(yǔ)言程序相互調(diào)用各自函數(shù)的方法,MEX文件使MATLAB可以直接調(diào)用或鏈接C/C++語(yǔ)言編寫的算法函數(shù),而MATLAB引擎使C/C++語(yǔ)言可以調(diào)用MATLAB函數(shù)。12.3.1MEX文件MEX(MATLABExecutable)動(dòng)態(tài)鏈接函數(shù)接口是MATLAB調(diào)用其它語(yǔ)言編寫的程序或算法的接口,通過(guò)mex命令將C、FORTRAN語(yǔ)言編寫的算法函數(shù)編譯成動(dòng)態(tài)鏈接程序,使之成為MATLAB的一個(gè)擴(kuò)展函數(shù)。在Windows系統(tǒng)中,MEX文件是DLL格式,使用DLL格式可以直接訪問(wèn)Windows系統(tǒng)的各種資源,生成圖形用戶界面,還可以利用Windows的動(dòng)態(tài)數(shù)據(jù)交換能力,與其他的Windows應(yīng)用程序交換數(shù)據(jù)。1.MEX函數(shù)MEX函數(shù)用于從MATLAB環(huán)境中獲取必要的矩陣數(shù)據(jù)和相應(yīng)信息。所有MEX函數(shù)均在MATLAB的子文件夾extern\include中的頭文件mex.h得到聲明。2.MEX文件的建立C語(yǔ)言的MEX文件的源程序由如下兩個(gè)部分組成。(1)入口子程序mexFunction其作用是在MATLAB系統(tǒng)與被調(diào)用的外部子程序之間建立通信聯(lián)系,定義被MATLAB調(diào)用的外部子程序的入口地址、MATLAB系統(tǒng)和子程序傳遞的參數(shù)等。入口子程序的構(gòu)成如下:voidmexFunction(intnlhs,mxArray*plhs[],intnrhs,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ì)算子程序(ComputationalRoutine)它包含所有完成計(jì)算功能的程序代碼,由入口子程序調(diào)用。3.MEX文件的編譯MEX文件的編譯需要具備兩個(gè)條件:一是要求已經(jīng)安裝MATLAB應(yīng)用程序接口組件及其相應(yīng)的工具,另一個(gè)是要求有合適的C/C++語(yǔ)言編譯器。MEX文件的編譯使用mex命令,如果第一次使用,需要配置mex采用什么編譯器。在MATLAB命令窗口下輸入mex-setup按提示選取一種編譯器。這樣在進(jìn)行MEX文件編譯操作時(shí),系統(tǒng)將會(huì)自動(dòng)使用默認(rèn)編譯器。配置正確后,才可以進(jìn)行MEX文件編譯操作。12.3.2MATLAB引擎MATLAB引擎(Engine)是用于和外部程序結(jié)合使用的一組函數(shù)和程序庫(kù),用戶在C語(yǔ)言編寫的應(yīng)用程序中用它們來(lái)調(diào)用MATLAB中的函數(shù)。MATLAB引擎有以下典型的功能應(yīng)用:(1)調(diào)用MATLAB特有的強(qiáng)大數(shù)值計(jì)算和分析等函數(shù)進(jìn)行運(yùn)算。(2)可以為一個(gè)特定的任務(wù)構(gòu)建一個(gè)完整的系統(tǒng)。1.MATLAB引擎函數(shù)MATLAB引擎是MathWorks公司提供的一組函數(shù)庫(kù),它提供了在

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論