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