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