【學(xué)習(xí)課件】第20章應(yīng)用程序接口_第1頁(yè)
【學(xué)習(xí)課件】第20章應(yīng)用程序接口_第2頁(yè)
【學(xué)習(xí)課件】第20章應(yīng)用程序接口_第3頁(yè)
【學(xué)習(xí)課件】第20章應(yīng)用程序接口_第4頁(yè)
【學(xué)習(xí)課件】第20章應(yīng)用程序接口_第5頁(yè)
已閱讀5頁(yè),還剩14頁(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)介

1、第20章 應(yīng)用程序接口作為一款優(yōu)秀的工程計(jì)算軟件,MATLAB不僅擁有強(qiáng)大的功能和友好的界面支持,還具有很好的開(kāi)放性、可擴(kuò)展性,主要表現(xiàn)在:豐富的工具箱(Toolbox)資源可以適應(yīng)各學(xué)科、各領(lǐng)域的需要,并且用戶可以創(chuàng)建自己的工具箱;廣泛的應(yīng)用程序接口(API),能夠與外部應(yīng)用程序?qū)崿F(xiàn) “無(wú)縫”結(jié)合等。本章針對(duì)MATLAB的C、FORTRN應(yīng)用程序接口,主要介紹以下幾方面內(nèi)容:C/FORTRAN語(yǔ)言中的MATLAB數(shù)據(jù)結(jié)構(gòu)mxArray;MATLAB利用MEX文件調(diào)用C/FORTRAN函數(shù);C/FORTRAN通過(guò)MATLAB引擎(Engine)調(diào)用MATLAB函數(shù);創(chuàng)建能夠讀寫(xiě)MAT文件的C程

2、序,實(shí)現(xiàn)C與MATLAB的數(shù)據(jù)通信。20.1 mxArray數(shù)據(jù)結(jié)構(gòu)數(shù)組是MATLAB程序基本的數(shù)據(jù)組織形式,也是大部分MATLAB運(yùn)算的基本運(yùn)算單位。MATLAB中數(shù)組與C/FORTRAN中數(shù)組的存儲(chǔ)方式是不同的,而且MATLAB和C/FORTRAN對(duì)基本數(shù)據(jù)類(lèi)型,如雙精度類(lèi)型浮點(diǎn)數(shù)、整數(shù)類(lèi)型、字符類(lèi)型等的定義也是不同的。為了能夠在C中表示MATLAB數(shù)據(jù)結(jié)構(gòu),MATLAB提供了一種特殊的C語(yǔ)言結(jié)構(gòu)mxArray。本節(jié)首先簡(jiǎn)要介紹MATLAB和C/FORTRAN中數(shù)組存儲(chǔ)方式的不同,然后詳細(xì)討論mxArray數(shù)據(jù)結(jié)構(gòu)及相關(guān)的操作函數(shù)mx函數(shù)。20.1.1 MATLAB和C/FORTRAN中的

3、數(shù)組數(shù)組是MATLAB數(shù)據(jù)組織的基本形式,這里首先要澄清兩個(gè)概念,即數(shù)據(jù)類(lèi)型和數(shù)據(jù)結(jié)構(gòu)。MATLAB的數(shù)據(jù)類(lèi)型,諸如整型、浮點(diǎn)型、邏輯型等都是數(shù)值類(lèi)型;另外還有字符、字符串、對(duì)象等非數(shù)值類(lèi)型。數(shù)據(jù)結(jié)構(gòu)是指數(shù)據(jù)元素的組織方式,基本的有數(shù)組,另外還有元胞、構(gòu)架等復(fù)雜數(shù)據(jù)結(jié)構(gòu),每個(gè)數(shù)據(jù)元素都有對(duì)應(yīng)的數(shù)據(jù)類(lèi)型。MATLAB按列主序組織數(shù)組中的數(shù)據(jù)元素,例如對(duì)一個(gè)3階魔術(shù)矩陣A,在MATLAB命令窗口輸入以下代碼。 a=magic(3)運(yùn)行結(jié)果如下。a = 8 1 6 3 5 7 4 9 220.1.2 mxArraymxArray是一種C語(yǔ)言結(jié)構(gòu)體,該結(jié)構(gòu)體的定義在Matrix.h中,下面列出了mxA

4、rray定義相關(guān)的代碼:mxArray結(jié)構(gòu)體由很多字段組成,這些字段保存了MATLAB數(shù)據(jù)的所有信息:數(shù)據(jù)類(lèi)型;數(shù)組維數(shù);數(shù)組大小,行數(shù)、列數(shù);數(shù)據(jù)主體;如果是數(shù)值對(duì)象,則保存數(shù)據(jù)是實(shí)數(shù)還是復(fù)數(shù);如果是稀疏矩陣,則保存矩陣中非零元素的個(gè)數(shù)和索引。20.1.3 mx函數(shù)為了方便mxArray數(shù)據(jù)對(duì)象的操作,MATLAB專門(mén)提供了一組mxArray數(shù)據(jù)操作函數(shù),即mx函數(shù)。利用mx函數(shù)可以創(chuàng)建和訪問(wèn)mxArray數(shù)據(jù)對(duì)象,本小節(jié)首先介紹幾類(lèi)主要mxArray數(shù)據(jù)對(duì)象的創(chuàng)建,其間會(huì)涉及相應(yīng)mxArray數(shù)據(jù)對(duì)象的訪問(wèn)和賦值操作,隨后討論了mxArray數(shù)據(jù)對(duì)象相關(guān)的內(nèi)存操作。下面對(duì)兩類(lèi)常用的mxAr

5、ray數(shù)據(jù)對(duì)象的創(chuàng)建及相關(guān)的訪問(wèn)、賦值操作進(jìn)行詳細(xì)介紹,這兩類(lèi)mxArray數(shù)據(jù)對(duì)象是:數(shù)值數(shù)組;邏輯數(shù)組。20.2 C/FORTRAN MEXC/FORTRAN語(yǔ)言應(yīng)用于工程、科學(xué)等領(lǐng)域具有較長(zhǎng)的歷史,積累了大量可用的代碼,通過(guò)MEX文件,可以直接將這些已有的C/FORTRAN代碼集成到MATLAB應(yīng)用中,而且能夠彌補(bǔ)MATLAB本身的一些不足,如對(duì)計(jì)算機(jī)低層硬件的操作、網(wǎng)絡(luò)操作等。本節(jié)首先簡(jiǎn)要介紹C MEX文件的結(jié)構(gòu),為了創(chuàng)建C MEX文件,需要對(duì)MATLAB 編譯器作相關(guān)的設(shè)置MEX配置,20.2.3和20.2.4分別以示例的形式討論了C MEX和FORTRAN MEX的創(chuàng)建方法。注意:

6、MEX是MATLAB Compiler 3等早期MATLAB編譯器的功能,MATLAB 7.0的編譯器(MATLAB Compiler 4)已不能支持MEX文件。20.2.1 MEX文件簡(jiǎn)介MEX即為MATLAB和Executable的縮寫(xiě),一般地,MEX文件由C語(yǔ)言或FORTRAN語(yǔ)言開(kāi)發(fā),經(jīng)過(guò)編譯后可以被MATLAB直接調(diào)用。在使用上MEX文件與M文件相似,但比M文件具有更高的執(zhí)行優(yōu)先級(jí)。利用MEX文件,用戶可以完成:在MATLAB直接使用已有的C/FORTRAN代碼;隱藏算法的細(xì)節(jié);利用C語(yǔ)言對(duì)低層硬件進(jìn)行操作,擴(kuò)展MATLAB的能力。20.2.2 配置MEXMEX文件一般由C/FORT

7、RAN語(yǔ)言開(kāi)發(fā),然后利用MATLAB Compiler將C/FORTRAN源代碼編譯為MEX文件。為此需要對(duì)MATLAB Compiler作相應(yīng)的配置,配置過(guò)程與本書(shū)第19章的mbuild配置相似,即是選擇合適的C/FORTRAN編譯器。在MATLAB命令窗口輸入以下指令: mex setup運(yùn)行結(jié)果如下。Please choose your compiler for building external interface (MEX) files: Would you like mex to locate installed compilers y/n?20.2.3 C MEX前面對(duì)MEX文件

8、的結(jié)構(gòu)、MATLAB Compiler的MEX配置進(jìn)行了詳細(xì)介紹,本小節(jié)通過(guò)一個(gè)簡(jiǎn)單的例子說(shuō)明創(chuàng)建C MEX應(yīng)用程序的完整過(guò)程。20.2.4 FORTRAN MEX作為專業(yè)的科學(xué)計(jì)算程序語(yǔ)言,F(xiàn)ORTRAN在數(shù)值計(jì)算方面具有很多優(yōu)于C語(yǔ)言的性質(zhì),所以FOTRAN MEX在MATLAB外部接口編程中也經(jīng)常遇到。FORTRAN MEX的創(chuàng)建方法與C MEX非常相似,下面就以上一小節(jié)相同的例子介紹FORTRAN MEX的創(chuàng)建過(guò)程。20.3 MATLAB引擎前面介紹了利用MEX文件在MATALB集成已有的C/FORTRAN代碼。盡管MATLAB在科學(xué)計(jì)算、工程應(yīng)用領(lǐng)域具有無(wú)可比擬的優(yōu)勢(shì),但在復(fù)雜用戶界

9、面、底層硬件設(shè)備操作等方面都有較大的缺陷。一種可行的方案是在C/C+等高級(jí)語(yǔ)言中調(diào)用MATLAB函數(shù)實(shí)現(xiàn)后臺(tái)計(jì)算,而用戶界面、底層硬件操作由C/C+等完成。為了能夠在其他高級(jí)語(yǔ)言中調(diào)用MATLAB函數(shù),MATLAB提供了多種手段完成,其中計(jì)算引擎是一種常用也是最容易實(shí)現(xiàn)的一種方法。本節(jié)首先簡(jiǎn)要介紹了MATLAB引擎應(yīng)用程序的工作原理和基本結(jié)構(gòu),第20.3.1節(jié)詳細(xì)討論了引擎函數(shù)(eng函數(shù)),最后以一個(gè)示例介紹設(shè)計(jì)MATLAB引擎應(yīng)用程序的完整過(guò)程。20.3.1 MATLAB引擎簡(jiǎn)介MATLAB引擎應(yīng)用程序的思路與MEX文件相反,MEX文件是在MATLAB環(huán)境下調(diào)用C/FORTRAN程序,而M

10、ATLAB引擎是在C/FORTRAN中調(diào)用MATLAB函數(shù)。MATLAB引擎應(yīng)用程序一般由C/FORTRAN語(yǔ)言開(kāi)發(fā),運(yùn)行時(shí)利用某種通信機(jī)制將計(jì)算任務(wù)請(qǐng)求提交給后臺(tái)的MATLAB進(jìn)程,后臺(tái)MATLAB進(jìn)程完成計(jì)算任務(wù)后將結(jié)果返回給C/FORTRAN主程序。在Windows平臺(tái)下,這種通信機(jī)制是利用COM應(yīng)用接口IEngine完成的,圖20.5顯示了MATLAB引擎應(yīng)用程序的工作原理。20.3.2 MATLAB引擎函數(shù)MATLAB引擎應(yīng)用程序通過(guò)在C/FORTRAN語(yǔ)言中調(diào)用一組MATLAB API函數(shù),實(shí)現(xiàn)客戶應(yīng)用程序與MATLAB環(huán)境的交互,這些函數(shù)以eng為前綴。C/FORTRAN通過(guò)MA

11、TLAB引擎函數(shù)打開(kāi)或關(guān)閉MATLAB引擎,從MATLAB中獲取數(shù)據(jù)或向MATLAB寫(xiě)入數(shù)據(jù)及執(zhí)行MATLAB命令等操作。MATLAB引擎函數(shù)函 數(shù) 名功 能可否被C調(diào)用可否被FORTRAN調(diào)用engOpen打開(kāi)MATLAB引擎engClose關(guān)閉MATLAB引擎engGetVariable從MATLAB后臺(tái)會(huì)話中讀取變量engPutVariable將變量寫(xiě)入MATLAB后臺(tái)會(huì)話中engEvalString執(zhí)行MATLAB命令engOutputBuffer創(chuàng)建MATLAB文本輸出緩存區(qū)engOpenSingleUse啟動(dòng)一個(gè)非共享的MATLAB引擎engGetVisible獲取MATLAB引擎

12、的可視屬性engSetVisible設(shè)置MATLAB引擎的可視屬性20.3.3 MATLAB引擎應(yīng)用示例前面介紹了MATLAB引擎應(yīng)用程序的基本原理、基本結(jié)構(gòu)及引擎函數(shù),下面以一個(gè)具體的例子說(shuō)明創(chuàng)建MATLAB引擎應(yīng)用程序的完整過(guò)程。20.4 C讀寫(xiě)MAT文件MAT文件是MATLAB用于存儲(chǔ)數(shù)據(jù)的一種特殊二進(jìn)制文件,利用MATLAB API提供的接口函數(shù)(mat函數(shù)),C/FORTRAN可以方便地讀寫(xiě)MAT文件,從而實(shí)現(xiàn)C/FORTRAN程序和MATLAB的數(shù)據(jù)通信。本節(jié)首先簡(jiǎn)要介紹MAT文件的結(jié)構(gòu)及其在MATLAB中的應(yīng)用,20.4.2介紹C讀寫(xiě)MAT文件的接口函數(shù)(MAT函數(shù)),最后給出了

13、一個(gè)C讀寫(xiě)MAT文件的應(yīng)用示例。說(shuō)明:MATLAB為用戶提供了豐富的數(shù)據(jù)I/O接口,可以讀取各種數(shù)據(jù)文件,如文本文件、二進(jìn)制文件、圖像文件、聲音文件、視頻文件等,詳細(xì)內(nèi)容可以參考本書(shū)第18章。 20.4.1 MAT文件MAT文件是MATLAB提供的用于存儲(chǔ)數(shù)據(jù)的一種特殊二進(jìn)制文件,MAT文件能夠獨(dú)立于各種平臺(tái),為MATLAB提供了跨平臺(tái)的數(shù)據(jù)交互能力。MAT文件可以分為文件頭和數(shù)據(jù)主體兩部分,其中文件頭包含了一些描述性的信息及相應(yīng)版本、標(biāo)識(shí)信息,這部分占用128個(gè)字節(jié);數(shù)據(jù)體按照數(shù)據(jù)類(lèi)型、數(shù)據(jù)長(zhǎng)度和數(shù)據(jù)依次保存。在MATLAB中,用戶可以通過(guò)save指令將當(dāng)前工作空間中的指定變量保存至MAT文件中,當(dāng)用戶需要再次使用這些變量時(shí),可以通過(guò)load指令方便地將數(shù)據(jù)導(dǎo)入到當(dāng)前工作空間中。20.4.2 MAT函數(shù)利用C讀寫(xiě)MAT數(shù)據(jù)文件,需要調(diào)用MATLAB API提供的mat函數(shù),這些函數(shù)具有C語(yǔ)言的格式用于MAT數(shù)據(jù)文件的打開(kāi)關(guān)閉、讀寫(xiě)數(shù)據(jù)等操作:matOpen,用于打開(kāi)MAT數(shù)據(jù)文件;matClose,關(guān)閉MAT數(shù)據(jù)文件;matGetVariable,讀入MAT數(shù)據(jù)文件中的變量;matPutVariable,將變量寫(xiě)入到MAT數(shù)據(jù)文件中。20.4.3 C讀寫(xiě)MAT文件本小節(jié)通過(guò)

溫馨提示

  • 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)論