VC++與MATLAB混合編程

字號(hào):

MATLAB是MathWorks公司于1982年推出的一種以矩陣為基本運(yùn)算單位的高效數(shù)值計(jì)算軟件,帶有功能強(qiáng)大的數(shù)學(xué)函數(shù)庫(kù),并開發(fā)有多種學(xué)科領(lǐng)域的工具箱函數(shù)庫(kù),廣泛地應(yīng)用于科學(xué)研究與工程計(jì)算。然而,MATLAB自身存在的一些缺點(diǎn)限制了它在更多方面的應(yīng)用:
    (1)MATLAB程序不能脫離其運(yùn)行環(huán)境,可移植性差
    (2)MATLAB是一種解釋性語(yǔ)言,語(yǔ)言執(zhí)行效率低,實(shí)時(shí)性較差
    (3)MATLAB的界面開發(fā)能力較差,難以開發(fā)出友好的應(yīng)用界面
    (4)MATLAB編寫的M文件是文本文件,容易被直接讀取,難以保護(hù)勞動(dòng)者的成果
    VC++用于面向?qū)ο蟮目梢暬幊蹋梢酝瓿蓮牡讓榆浖钡矫嫦蛴脩糗浖雀鞣N應(yīng)用程序的開發(fā)。利用它提供的各種實(shí)用工具,開發(fā)者可以輕松開發(fā)出高效強(qiáng)大的Windows應(yīng)用程序。但在實(shí)際工程開發(fā)中,與MATLAB相比:
    (1) VC++在數(shù)值處理分析和算法工具等方面不如MATLAB
    (2) VC++在準(zhǔn)確方便地繪制數(shù)據(jù)圖形(數(shù)據(jù)可視化)方面不如MATLAB
    因此,把MATLAB在數(shù)值計(jì)算、算法設(shè)計(jì)以及數(shù)據(jù)可視化等領(lǐng)域的優(yōu)勢(shì)與VC++應(yīng)用系統(tǒng)集成,不僅可以完全滿足系統(tǒng)在數(shù)據(jù)運(yùn)算與表現(xiàn)方面的需求,而且還可提高系統(tǒng)處理的效率和穩(wěn)定性,同時(shí)也減少了開發(fā)人員實(shí)現(xiàn)算法的困難,縮短了軟件開發(fā)的周期,提高了軟件質(zhì)量,在實(shí)踐中具有很高的使用價(jià)值。
    VC++與MATLAB混合編程方法
    在VC++下調(diào)用MATLAB,主要有以下三種方法:
    1) 利用MATLAB引擎
    MATLAB Engine庫(kù)是MathWorks公司提供的一組函數(shù)庫(kù),它提供了一種在用戶程序進(jìn)程中與獨(dú)立的MATLAB進(jìn)程通訊的方法,在Windows下使用ActiveX技術(shù)實(shí)現(xiàn)。
    MATLAB Engine不僅可以調(diào)用MATLAB中的C\C++函數(shù),還可以調(diào)用工具箱中的函數(shù),應(yīng)用程序整體性能較好,同時(shí),MATLAB Engine方式可利用MATLAB強(qiáng)大的圖形功能;但該種方式的致命缺陷是不能脫離MATLAB運(yùn)行環(huán)境。
    2) 利用MATLAB自帶編譯器MCC
    從MATLAB 5.1版本開始,MathWorks公司推出了一系列的MATLAB自帶編譯器來(lái)解決MATLAB與C++的接口問(wèn)題。編譯器MCC可以將MATLAB的C/C++數(shù)學(xué)庫(kù)編譯為VC++編譯器能識(shí)別的代碼嵌入VC++環(huán)境。
    利用MCC編譯器,可以有效提高代碼的執(zhí)行效率,而且可以脫離MATLAB運(yùn)行環(huán)境;但待編譯的M文件不能涉及MATLAB的內(nèi)部類,出現(xiàn)編譯文件嵌套時(shí)應(yīng)改寫M文件,而且此種方式不支持圖形功能。
    3) MATCOM轉(zhuǎn)化法
    MATCOM是MathWorks公司開發(fā)的為MATLAB中的M文件進(jìn)行高效解釋和調(diào)試的集成開發(fā)環(huán)境。MATCOM編譯M文件,先將M文件按照與MATCOM的cpp庫(kù)的對(duì)應(yīng)關(guān)系,翻譯為cpp源代碼,然后用C編譯器將cpp文件編譯成相應(yīng)的exe或dll文件。
    用MATCOM方式,生成的代碼可讀性好,支持圖形函數(shù),支持M文件編譯過(guò)程中的文件嵌套情況,可脫離MATLAB環(huán)境;缺陷為待編譯的M文件不能涉及MATLAB的內(nèi)部類。