1. 編寫背景
經(jīng)30多年的實踐檢驗、市場篩選和時間凝煉,MATLAB已經(jīng)成為國際上廣泛認可和普遍使用的數(shù)學(xué)分析和數(shù)值計算軟件,也是教學(xué)、科研、工程界極可信賴的科學(xué)計算環(huán)境、標準仿真平臺和十分可靠的數(shù)學(xué)資源庫。
近年來,隨著深度學(xué)習、大數(shù)據(jù)分析、人工智能的突破和迅速市場化,學(xué)術(shù)界、工程界、科研部門和開發(fā)機構(gòu)所面臨的軟件建模和程序開發(fā)問題越來越復(fù)雜。它們或輸入來源多種,或輸出任務(wù)多樣,或輸入輸出間關(guān)系錯綜復(fù)雜,或被處理數(shù)據(jù)規(guī)模龐大,或離散事件隨機多發(fā),或數(shù)學(xué)計算和多界面操控高度交叉。面對這類綜合性問題,既不再能單憑一連串數(shù)學(xué)公式的“MATLAB面向過程”編程所能解決,也不再可單憑“C/C++面向?qū)ο蟆本幊趟軕?yīng)對。于是,“MATLAB面向?qū)ο蟆焙汀癕ATLAB面向C/C++”編程的應(yīng)用需求強烈凸顯。這也促使高校本科和研究生的MATLAB教學(xué)必須向高層次方向發(fā)展。
另一方面,從書籍出版角度看,迄今可見的千余種MATLAB書籍,絕大多數(shù)只涉及數(shù)學(xué)計算、建模及“面向過程”的編程,論及“面向?qū)ο蟆被颉懊嫦駽/C++”的書籍則屈指可數(shù)。
科技發(fā)展的需求和書籍出版的現(xiàn)實,驅(qū)使我們決心編寫一本以理工共通知識為素材、以系統(tǒng)闡述及具體示例為經(jīng)緯、面向?qū)ο蠛兔嫦駽/C++的MATLAB用書。我們希望此書能幫助已經(jīng)學(xué)習和使用MATLAB的高校學(xué)生、科研人員較快地理解和掌握“面向?qū)ο蟆本幊毯汀懊嫦駽/C++”編程。同時,我們也希望,具有C/C++編程基礎(chǔ)的高校學(xué)生及科研開發(fā)人員能借助本書理解和掌握“C/C++與MATLAB”的聯(lián)合編程。
2. 編寫宗旨與特點
本書兩位作者基于自身的長期教學(xué)和程序開發(fā)經(jīng)驗,對本書的內(nèi)容組織和程序設(shè)計遵循如下宗旨:
? 在保持內(nèi)容系統(tǒng)完整的前提下,充分體現(xiàn)MATLAB的特征。
◇ 凡使用MATLAB進行過數(shù)值和科學(xué)計算的讀者,都定會被MATLAB特有的高效便捷靈活的魅力所吸引。MATLAB面向?qū)ο缶幊痰母拍、語法、結(jié)構(gòu)和函數(shù)也同樣展現(xiàn)其一貫的簡潔友善的特性。這是因為MATLAB語言本身是由C/C++、JAVA 等原生型面向?qū)ο缶幊陶Z言構(gòu)建的。本書的內(nèi)容組織將讓讀者充分體會MATLAB的這些優(yōu)點,以較短的時間掌握面向?qū)ο缶幊痰木琛?/p>
◇ 基于MATLAB數(shù)學(xué)計算以數(shù)組形式實施的本質(zhì),本書在面向?qū)ο缶幊痰膬?nèi)容組織中,特別強調(diào)了類屬性取值數(shù)組時類方法編寫的注意事項,以及類對象數(shù)組的創(chuàng)建和應(yīng)用。
◇ 基于MATLAB各類數(shù)據(jù)都采用同一種陣列形式組織的基礎(chǔ)性特征,本書在面向C/C++編程的內(nèi)容組織中,對專司MATLAB和C/C++間數(shù)據(jù)交換的mxArray
和mwArray陣列結(jié)構(gòu)給予特別闡述。
? 在保證示例典范性的前提下,盡量使示例內(nèi)容貼近大部分MATLAB 用戶的專業(yè)知識。
◇ 本書示例都是作者圍繞演示目的精心設(shè)計的。所涉知識都由MATLAB各類專業(yè)用戶通識的復(fù)數(shù)、極坐標、向量、加減法等構(gòu)成。
◇ 讀者學(xué)習和實踐本書示例時,一方面可免受專業(yè)隔閡的心理影響,另一方面可從通識要素的應(yīng)用中得到向其專業(yè)拓展的啟示。
? 在保證內(nèi)容系統(tǒng)性的前提下,盡量保證示例的獨立性。
◇ 全書章節(jié)內(nèi)容按其自身邏輯和認知過程編排,保證內(nèi)容的連貫性、系統(tǒng)性,以利讀者系統(tǒng)閱讀學(xué)習。
◇ 各章節(jié)示例設(shè)計遵循三個原則:一,示例內(nèi)容和代碼圍繞所在章節(jié)內(nèi)容設(shè)計;二,對可能生疏的非本章節(jié)命令或函數(shù),給予簡明注釋;三,保證示例程序代碼的可運行性、可驗證性。在非系統(tǒng)學(xué)習的情況,讀者可根據(jù)需要挑選示例在電腦上進行實際的演練體驗。讀者還可根據(jù)本書示例結(jié)果是否被重現(xiàn),而修整自己可能的失誤,建立起理解和掌握本書內(nèi)容的自信。
? 全書A、B兩篇的章節(jié)內(nèi)容,按各自內(nèi)在關(guān)系由淺入深編排。
◇ 本書每篇最前的一兩個示例,都較簡單而不失綜合性。初學(xué)讀者,通過這些示例就可感受或觸摸到該篇內(nèi)容的輪廓特點。
◇ 幾乎每章的最后,都安排了較為綜合的示例,以向讀者提供進一步的聯(lián)想和啟示。
3. 全書結(jié)構(gòu)梗概
全書由正文、附錄和參考文獻組成。
? A 篇 MATLAB面向?qū)ο缶幊?/p>
“第1章:類的定義和基本操作”的內(nèi)容是全篇的基礎(chǔ)。它包括:類和對象概念;類定義的基本框架;屬性及其秉質(zhì);方法及其秉質(zhì);構(gòu)造函數(shù)編寫準則及典型結(jié)構(gòu)等。通過本章的學(xué)習,讀者就可初步具備以“面向?qū)ο蟆钡乃季S解題編程的能力。
“第2章 對象數(shù)組”的內(nèi)容包括:對象數(shù)組的創(chuàng)建;對象數(shù)組的編址及尋訪;特殊對象數(shù)組生成;對象數(shù)組的常用操作。由于MATLAB自身的各種運算是建立在數(shù)組基礎(chǔ)上的,所以,相較于C/C++等而言,本章內(nèi)容在MATLAB面向?qū)ο缶幊讨芯哂刑厥庖饬x。
“第3章 重載與覆蓋”的主要內(nèi)容有:重載與覆蓋在類設(shè)計中的意義;算符與對應(yīng)的后臺控制函數(shù);改變對象顯示的重載和覆蓋技術(shù)。
“第4章 類的繼承與組合”系統(tǒng)介紹:類繼承定義和子父類關(guān)系;繼承的多態(tài)性;抽象類概念及應(yīng)用;屬性包含型類組合。此外,本章最后,以示例形式展現(xiàn)很常用的“界面類+算法類”程序設(shè)計模式。
“第5章 事件與響應(yīng)”的內(nèi)容有:事件/響應(yīng)機制;響應(yīng)函數(shù)的型式;事件發(fā)布方/響應(yīng)函數(shù)之間的數(shù)據(jù)傳遞與偵聽件。該章最后采用綜合示例形式介紹事件和響應(yīng)在客戶端/服務(wù)器2 MATLAB面向?qū)ο蠛虲/C++編程(C/S)架構(gòu)軟件設(shè)計與開發(fā)中的應(yīng)用。
? B篇 MATLAB面向C/C++編程
“第6章 數(shù)據(jù)接口”集中敘述MATLAB與C/C++等交換信息所依賴的mxArray、mwArray等兩種陣列結(jié)構(gòu)的創(chuàng)建、讀取、賦值和刪除等函數(shù)的具體調(diào)用格式,并著重闡述指針、引用、堆內(nèi)存管理在相關(guān)函數(shù)設(shè)計和具體調(diào)用中的作用。本章內(nèi)容具有較強的查閱功能。
“第7章 MATLAB調(diào)用C/C++程序”圍繞在MATLAB中調(diào)用由C/C++源文件編譯而來的MEX文件展開。具體內(nèi)容有:MEX文件的定義;源文件的構(gòu)成和格式;MEX 文件的生成;MEX文件執(zhí)行流程;MEX函數(shù)庫。該章最后敘述在Visual Studio環(huán)境中編譯、調(diào)試MEX文件。
“第8章 C/C++程序調(diào)用MAT 函數(shù)庫”的內(nèi)容為:MATLAB的MAT 函數(shù)庫,以及在MATLAB環(huán)境和Visual Studio環(huán)境內(nèi)編譯調(diào)用MAT函數(shù)庫的C/C++程序。
“第9章 C/C++程序調(diào)用MATLAB引擎”系統(tǒng)闡述:MATLAB引擎概念和功用;引擎函數(shù)庫;在MATLAB環(huán)境和Visual Studio環(huán)境內(nèi)編譯調(diào)用引擎函數(shù)庫的C/C++程序。
該章最后以綜合示例形式介紹“C/C++程序+MATLAB引擎”聯(lián)合開發(fā)模式的在線調(diào)試方法。
“第10章 MATLAB編譯器”專述:如何將MATLAB函數(shù)編譯生成可獨立運行的程序或動態(tài)鏈接庫;MATLAB編譯器的外部C/C++編譯器配置;生成外用文件的mcc命令和應(yīng)用編譯器。該章最后以綜合示例展示:MFC應(yīng)用程序框架及其綜合應(yīng)用。
? 附錄
附錄A 基礎(chǔ)準備與入門包含兩節(jié)。“A.1:MATLAB 的配置及入門”和“A.2:VisualStudio集成開發(fā)環(huán)境入門”。A.1節(jié)為不熟悉MATLAB的讀者而設(shè),用于簡介:MATLAB的安裝啟動;在Windows中對MATLAB的設(shè)置;MATLAB桌面和編輯器的使用入門。A.2節(jié)為不熟悉C/C++的讀者而設(shè)。簡介Visual Studio 2010的安裝啟動;簡介Visual Studio集成開發(fā)環(huán)境的使用入門。
“附錄B 索引”匯集了本書所涉及的所有MATLAB和C/C++函數(shù)及命令。所有函數(shù)及命令按英文字母的次序排列,并列出與之對應(yīng)的章節(jié)序號。該索引可為讀者提供另一條據(jù)英文關(guān)鍵詞檢索本書內(nèi)容的途徑。
? “參考文獻”
列出了本書成文的文獻基礎(chǔ)。讀者如有疑惑或想尋根問源,這部分資料十分有用。
4. 讀者對象和使用建議
本書的編寫動機和本書的內(nèi)容組織,決定了本書的讀者對象為:理工類高校的本科生、研究生;科研機構(gòu)中從事數(shù)學(xué)仿真或應(yīng)用開發(fā)的科技人員。為幫助讀者閱讀、使用,本書作者提出如下建議。
? A 篇的內(nèi)容組織和閱讀建議:
◇ A 篇適于循章節(jié)次序,由淺入深,循序漸進,但也不必拘泥于連續(xù)通讀、一氣到底。
◇ 實際上,在A 篇第1章仔細閱讀并實踐示例后,讀者就不難理解“面向?qū)ο蟆本幊痰乃季S模式,而順利跨入“面向?qū)ο蟆本幊痰拇箝T。
前 言 3
◇ 其余章節(jié),讀者完全可以根據(jù)自己需要挑選閱讀。本書的內(nèi)容組織及示例命令后的注釋說明,都能有力地幫助讀者克服理解困難。
? B篇的內(nèi)容組織和閱讀建議:
◇ 第6章數(shù)據(jù)接口的內(nèi)容主要用于各種函數(shù)的調(diào)用格式介紹。該章內(nèi)容是為讀者查閱使用方便而編寫的,因此不必系統(tǒng)閱讀。讀者只要瀏覽幾節(jié),能理解mxArray和mwArray陣列結(jié)構(gòu)在MATLAB和C/C++之間交換數(shù)據(jù)中的作用便可。
◇ 其余各章內(nèi)容之間沒有前后關(guān)聯(lián),相互獨立。因此,讀者可以根據(jù)需要,分章學(xué)習。
本書作者建議讀者,認真閱讀各示例的相關(guān)說明和命令后的注解,并靜下心來在機器上對示例進行操作實踐。這樣,定能事半功倍地掌握MATLAB與C/C++的聯(lián)合編程。
5. 致 謝
本書成稿歷經(jīng)3年。在這期間,周圍朋友、同事及相關(guān)部門領(lǐng)導(dǎo)的期盼、鼓勵,幫助作者克服了困惑、猶豫和疲怠。在這不短的成稿期間,作者之所以能有獨立的空間、專心靜思的時間、無擾的環(huán)境從事本書的寫作和試驗,那都因為背后有著家人的理解、支持、幫助、鼓勵和默默的付出。值此本書出版之際,作者向他們一并表示誠摯的感謝。
最后,還要感謝北京航空航天大學(xué)出版社對我們完稿時間一再后延的寬容和理解,并感謝他們?yōu)楸緯霭嫠龅囊磺小?/p>
本書雖歷時3年,幾經(jīng)易稿,示例幾經(jīng)修改和驗證,并最終在MATLAB R2017b和VisualStudio 2010環(huán)境下定稿,但仍難免缺陷,或發(fā)生因版本變更引起的不適性錯誤。對此,我們懇請各相關(guān)方面專家和廣大讀者不吝指正,以便再次印刷時加以修正。聯(lián)系的電子郵箱為:ly00519@126.com;zyzh@njupt.edu.cn。
凌 云 張志涌
2018年1月于南京