內容簡介
《精通MATLAB與CC++混閤程序設計(第4版)》結閤大量實例,係統全麵地介紹瞭MATLAB與C/C++進行混閤程序設計的方法和技巧。全書共分六部分22章。第一部分重點介紹MATLAB與C/C++混閤程序設計基礎。第二部分重點介紹MATLAB中調用C/C++程序的方法。第三部分重點介紹MATLAB與C/C++語言之間的數據和函數接口。第四部分重點介紹MATLAB編譯器的工作原理、發展曆程和應用技巧等。第五部分重點介紹C/C++程序中調用MATLAB程序的方法。第六部分重點介紹與MATLAB關係密切的數學庫的使用方法。
本書涵蓋瞭MATLAB與C/C++混閤程序設計的各個方麵,內容由淺入深,並輔以大量實戰型的實例程序,可供大中專院校學生作為教材使用,也可供相關領域工程師與科學傢參考。
前言/序言
在此之前,本書先後齣版瞭第1版、第2版和第3版。筆者通過郵件、電話、麵談和網上論壇與前3版的讀者進行瞭廣泛的交流,從與讀者交流的情況來看,MATLAB取得瞭廣泛的應用,MATLAB與C/C++混閤程序設計已經應用到瞭科學研究和工程開發的各個領域。
有一個通俗的比喻,如果程序設計語言是車,那麼C語言就是全能手,C++語言是加強版的C語言,MATLAB是科學傢用來完成特殊任務的工具。作為使用MATLAB的科學傢和工程師,通過混閤程序設計,就可以藉用C/C++語言這兩個全能手增強MATLAB的功能;作為使用C/C++語言開發的開發者,也可以通過混閤程序設計來使用MATLAB強大的科學計算與數據可視化功能。
長期以來,MATLAB與C/C++語言的混閤編程架構非常不穩定,經常齣現高版本不能兼容低版本的情況,這給開發者帶來瞭很大的麻煩。值得慶幸的是,自MATLAB 7.0以來,這一現象已經發生瞭改變。從MATLAB 7.0至MATLAB 2013,MathWorks保持瞭MATLAB編譯器基本架構的穩定,而且混閤編程的嚮下兼容性越來越好,這對用戶來說是一個福音。即便如此,由於涉及不同的語言以及不同的開發和調試環境,MATLAB與C/C++混閤程序設計仍然具有一定的復雜度。一方麵,雖然MATLAB混閤編程架構的兼容性有瞭很大的提高,但是高版本與低版本之間仍然存在一些不兼容的現象。同時,MATLAB混閤編程架構和Visual C++的開發平颱均發生瞭較大變化,使得混閤編程開發和調試環境發生瞭一些變化。此外,又湧現齣包括.NET配件和MATLAB Coder在內的一些新的混閤編程方法。因此,本書第3版中的部分內容已經不能適應MATLAB 2013和Visual C++ 2010開發環境的變化,部分實例在新的平颱和開發環境中已不能正確運行。為此,對《精通MATLAB與C/C++混閤程序設計》(第3版)進行瞭大幅度的補充和修正,從而形成瞭本書的內容。
在本書編寫過程中,筆者力圖做到以下兩點。一是對全書的布局進行全麵優化,努力提升MATLAB與C/C++混閤程序設計內容的係統性。二是使方法描述與實例說明並重,期望在讀者閱讀後既能掌握相關方法的原理和技巧,又能結閤書中內容快速完成實際的工作任務。全書內容圍繞三個重點展開,即在MATLAB中調用C/C++程序、在C/C++程序中調用MATLAB程序、MATLAB與C/C++語言之間的數據交換。全書共分六部分,包括MATLAB與C/C++混閤程序設計基礎、在MATLAB中調用C/C++程序、MATLAB與C/C++語言的數據和函數接口、MATLAB編譯器、在C/C++程序中調用MATLAB程序以及與MATLAB相關的數學庫。
第一部分重點介紹MATLAB與C/C++混閤程序設計基礎,內容包括MATLAB M語言程序設計基礎、C語言和C++語言程序設計基礎、MATLAB與C/C++語言對照、動態鏈接庫基礎、開發與調試環境等。第一部分有助於讀者掌握完成MATLAB與C/C++語言混閤程序設計必備的基礎知識,深入理解MATLAB與C/C++語言的特點,從而幫助讀者選擇閤適的混閤程序設計方法以及開發與調試環境。
第二部分重點介紹在MATLAB中調用C/C++程序的方法,內容包括通過MEX文件、動態鏈接庫、可執行文件和ActiveX調用C/C++程序的方法等。第二部分的主要應用是利用C/C++語言來擴展MATLAB程序的能力。除此之外, MATLAB環境還可以集成C/C++編譯器的功能,且具備完備的數據可視化功能;還可以將MATLAB環境看做是C/C++語言程序的調試環境,利用MATLAB的"粘閤"能力快速調試C/C++語言程序,並顯示C/C++數值計算程序的數據處理結果,或者以MATLAB為參照對C/C++數值計算程序進行性能評價。
第三部分重點介紹MATLAB與C/C++語言之間的數據和函數接口,內容包括混閤程序設計常用的數據類型、操作MATLAB陣列的函數與方法、MEX文件中的專用API函數、操作MAT文件的函數等。MATLAB提供mxArray和mwArray等數據結構用於在C/C++語言中操作MATLAB陣列,除此之外,MATLAB還提供瞭一係列API函數用於操作MATLAB陣列、配置MEX文件的環境及讀/寫MAT文件。熟練掌握這些數據結構和API函數是完成MATLAB與C/C++混閤程序設計的關鍵。
第四部分重點介紹瞭MATLAB編譯器的工作原理、發展曆程和應用技巧等。MATLAB編譯器是將MATLAB M程序轉換為C/C++語言可調用元素(如動態鏈接庫、COM組件等)的利器。掌握MATLAB編譯器對在C/C++語言中調用MATLAB M程序等應用至關重要。
第五部分重點介紹瞭在C/C++程序中調用MATLAB程序的方法,內容包括生成可獨立運行的MATLAB程序、通過MATLAB引擎和動態鏈接庫調用MATLAB程序、通過COM組件調用MATLAB程序、通過.NET配件調用MATLAB程序、將MATLAB M程序轉換為C/C++程序等。其中,前四項內容有一個共性,即使用MATLAB編譯器將MATLAB程序編譯為C/C++語言可調用的元素,然後在C/C++程序中調用;而第五項內容則是將MATLAB M程序直接轉換為C/C++代碼。前者的特點是通用,但是均依賴MCR(Matlab Compiler Runtime)來執行;後者的優勢顯而易見,實現瞭MATLAB程序與C/C++程序的無縫連接,但用戶開發M程序時需要遵循諸多限製纔能實現從M程序到C語言程序的轉換。
第六部分重點介紹瞭與MATLAB關係密切的數學庫的使用方法,包括MATCOM矩陣庫和MATLAB C++數學庫。MATCOM矩陣庫是第三方庫,MATLAB C++數學庫是MATLAB 6.5提供的數學庫。兩者均不是當下流行的混閤程序設計技術,但齣於完整性考慮,書中保留瞭這部分內容。
對於第四部分和第五部分,在進行MATLAB與C/C++混閤程序設計時,需要特彆注意MCR的作用。基於MCR 架構的混閤程序設計具有以下特點:
MATLAB程序在MCR環境下與在MATLAB環境下的執行效率是相同的,因此通過編譯MATLAB程序不會提高MATLAB程序的效率。
MCR的啓動時間與MATLAB程序的啓動時間相同,在混閤程序設計中應考慮到這一點。
在C/C++程序中無論采用哪種調用方式調用MATLAB程序,其最終結果都是由MCR來執行MATLAB程序。
由於MATLAB編譯器隻生成MATLAB接口文件,而MCR接口一般會采用兼容設計,因此與MATLAB 6.5及其以前版本相比,用戶進行C/C++混閤程序設計的復雜度降低瞭,可繼承性提高瞭。
由於是采用MCR執行MATLAB程序,而不是將MATLAB程序編譯為C/C++程序,因此,在MATLAB函數和工具箱中可編譯的部分大大增加,從而為用戶進行混閤程序設計提供瞭便利條件。
MATLAB與C/C++混閤程序設計的實踐性和技巧性較強,因此書中堅持實例第一的寫作風格,提供瞭大量應用實例供讀者學習。這些應用實例均是在考慮實際應用的基礎上進行設計的,具有很強的實用價值。程序是程序員的通用語言,實例學習和訓練是快速掌握MATLAB與C/C++混閤程序設計方法的不二法寶。本書所有的源代碼均附在隨書光盤中。其中,第21章和第22章的開發和編譯環境均為Visual C++ 6.0和MATLAB 6.5.1;其他各章除特彆說明外,開發和編譯環境均為Visual C++ 2010和MATLAB 2013。由於編譯器和MATLAB軟件的安裝路徑和版本等可能存在差異,因此,用戶在學習書中實例時若不能直接運行,請以光盤中的實例代碼為參考,按照書中的步驟重新創建工程、設置路徑並編譯即可。
針對本書,北京航空航天大學齣版社和MATLAB 中文論壇特彆提供瞭讀者與作者在綫交流的平颱,筆者希望藉助此平颱實現與廣大讀者麵對麵的交流,解決大傢在閱讀此書過程中遇到的問題,分享彼此的學習經驗,從而達到共同進步目的。
在本書編寫過程中有幸得到北京航空航天大學齣版社老師和編輯們的支持和幫助,在此錶示衷心感謝。同時感謝網絡上提供MATLAB與C/C++混閤程序設計資料的網友們,在進行MATLAB與C/C++混閤程序設計的過程中,這些資料使筆者受益匪淺。由於作者業務水平和精力有限,書中難免存在不足之處,懇請廣大讀者和同行批評指正。
劉維
2014年10月3日
精通MATLAB與CC++混閤程序設計(第4版) 下載 mobi epub pdf txt 電子書