出版時間:2010-6 出版社:北京航空航天大學 作者:吳鵬 頁數:259
Tag標簽:無
前言
當今社會,數學作為一切學科基礎地位的特征越來越明顯,其重要性不言而喻。MATLAB從誕生那一天起,就為數學和實際應用之間架起了一座橋梁,如今經過20多年的發(fā)展,這座橋變得越來越雄偉、壯觀。現(xiàn)如今,從國外高校到國內高校,從國外期刊到國內期刊,早已隨處可見MATLAB應用的身影。更重要的是,近幾年來,國內許多高新技術公司也開始普遍應用MATLAB來進行算法前期開發(fā)、驗證。如今,國內MATLAB相關書籍已經有很多,這些書籍極大地推動了MATLAB在國內的普及。但是MATLAB發(fā)展迅速,目前每年推出兩個版本,現(xiàn)有書籍對MATLAB高版本一此特有的編程思想、高效的編程方法、新技術等,鮮有專門詳細的討論。本書力圖以一種全新的模式,從各個角度將MATLAB呈現(xiàn)給讀者。全書共分兩部分:第一部分(第1~5章)是有關MATLAB高效編程的一些方法、原則介紹;第二部分(第6~12章)是案例分析。關于高效編程,本書詳細討論了傳統(tǒng)的向量化編程原則在新舊版本MAT-LAB下的異同,MATLAB如何處理海量數據,匿名函數和嵌套函數靈活、強大、富有彈性的功能。在案例分析部分,介紹了25個案例,這些案例都來自我平時的研究積累以及長期以來幫助網友解決的典型問題。案例涉及復雜的多重積分、積分方程、非線性方程求解、全局優(yōu)化、遺傳算法、Benders分解算法、人臉圖像壓縮與重建、灰色分析、距離判別法與Bayes判別法在分類中的應用、支持向量機、各類型的常微分方程(組)求解、層次分析法以及定時器的應用等。互聯(lián)網的興起催生了很多專門討論MATLAB相關技術的論壇、社區(qū)。這些社區(qū)集中了來自社會各行各業(yè)、高校各學科各專業(yè)的MATLAB使用者、愛好者。這些社區(qū)往往能夠緊跟MATLAB的發(fā)展,并對其最新的技術及時作出反應。我從2005年開始就一直在國內一些成立較早的MATLAB論壇社區(qū),如研學論壇、仿真科技論壇、振動論壇的MATLAB版面參與討論問題,并發(fā)表了一系列技術精華帖。MATLAB中文論壇成立后,我通過該平臺更是經常與各種程度的MATLAB使用者打交道,了解MATLAB使用者最容易遇到的一些問題,以及一些MATLAB軟件最新的技術??梢詫⒈緯闯墒俏覍@些經驗的提取與總結。我在上大學期間一度十分痛恨“數值計算”這門課程,因為為了應付考試而不得不背一些算法流程、公式并手動計算結果,這是非??菰锖蜔┈嵉摹:髞砀?80度轉彎,喜歡上了數值計算,這完全是因為MATLAB——轉機就是大二下學期的數學建模,必須要借助MATLAB完成。當用MATLAB輕而易舉地隨意擬合了一個20多階的多項式來近似一堆數據時,我被震撼了。這種震撼是忍受了長時間無比枯燥的手動計算后而發(fā)自肺腑的。當然現(xiàn)在看來,那時候的擬合毫無技術含量,毫無實際意義。但也正是因為這個開始,促使我不斷去探索MATLAB。一開始沒有計算機,就去看書,在圖書館里看各種有關MATLAB的書。隨著看的書的增多,MATLAB在腦子里也越來越清晰了,對它的喜愛也越來越深。后來2005年在公司實習,查資料時偶然進入論壇這片新天地,驀然發(fā)現(xiàn)居然有那么多相同愛好的人,從此一發(fā)不可收拾,便開始了和一幫志同道合的朋友切磋提高的過程。
內容概要
本書是作者八年MATLAB使用經驗的總結,精心設計的所有案例均來自于國內各大MATLAB技術論壇網友的切身需求,其中不少案例涉及的內容和求解方法在國內現(xiàn)已出版的MATLAB書籍中鮮有介紹。 本書首先針對MATLAB新版本特有的一些編程思想、高效的編程方法、新技術進行了較為詳細的討論,在此基礎上,以大量案例介紹了MATLAB在科學計算中的應用。內容包括:MATLAB快速入門、重新認識矢量(向量)化編程、MATLAB處理海量數據、匿名函數類型介紹、嵌套函數類型介紹、積分以及積分方程求解案例、優(yōu)化及非線性方程(組)求解案例、人臉圖像壓縮與重建案例、有關預測分類的案例、常微分方程(組)求解案例、層次分析法及其MATLAB實現(xiàn)、定時器及其應用。 本書可作為高等院校本科生、研究生MATLAB課程的輔助讀物,也可作為從事科學計算和算法研究的科研人員的參考用書。
書籍目錄
第一部分 高效編程技巧 第1章 MATLAB快速入門 1.1 熟悉MATLAB環(huán)境 1.1.1 MATLAB的啟動 1.1.2 MATLAB desktop 1.1.3 MATLAB 程序編輯器(Editor) 1.2 MATLAB牛刀小試 1.2.1 Hello,MATLAB 1.2.2 萬能計算器用法 1.2.3 一個“囧”的動畫 1.2.4 編寫第一個MATLAB函數 1.2.5 用MATLAB運行Windows系統(tǒng)命令 1.2.6 用MATLAB發(fā)送電子郵件 1.3 M語言介紹 1.3.1 數值和變量 1.3.2 MATLAB程序流程控制 1.4 學習MATLAB的方法 第2章 重新認識矢量(向量)化編程 2.1 矢量化編程流行的一些觀點 2.2 重新認識循環(huán) 2.2.1 高版本MATLAB對循環(huán)結構的優(yōu)化 2.2.2 選擇循環(huán)還是向量化 2.3 提高代碼效率的方法 2.3.1 預分配內存 2.3.2 選用恰當的函數類型 2.3.3 選用恰當的數據類型 2.3.4 減少無謂損耗——給一些函數“瘦身” 2.3.5 變“勤拿少取”為“少拿多取” 2.3.6 循環(huán)注意事項 2.3.7 邏輯索引和邏輯運算的應用 2.4 應用高版本向量化函數提高開發(fā)效率 2.4.1 accumarray函數 2.4.2 arrayfun函數 2.4.3 bsxfun函數 2.4.4 cellfun函數 2.4.5 spfun函數 2.4.6 structfun函數 第3章 MATLAB處理海量數據 3.1 處理海量數據時遇到的問題 3.1.1 什么是海量數據 3.1.2 經常遇到的問題 3.2 有效設置增加可用內存 3.2.1 系統(tǒng)默認下內存分配情況 3.2.2 打開Windows 3GB開關 3.3 減小內存消耗注意事項 3.3.1 讀取數據文件 3.3.2 數據存儲 3.3.3 減小內存其他注意事項 第4章 匿名函數類型 4.1 什么是匿名函數 4.1.1 匿名函數的基本定義 4.1.2 匿名函數的種類 4.2 匿名函數應用實例 4.2.1 匿名函數在求解方程中應用 4.2.2 匿名函數在顯式表示隱函數方面的應用 4.2.3 匿名函數在求積分區(qū)域方面的應用 4.2.4 匿名函數在求數值方面的應用 4.2.5 匿名函數和符號計算的結合 4.2.6 匿名函數在優(yōu)化中的應用 4.2.7 匿名函數在求積分區(qū)域方面的應用 4.2.8 匿名函數和cell數組的結合應用 第5章 嵌套函數類型 5.1 什么是嵌套函數 5.1.1 嵌套函數的基本定義 5.1.2 嵌套函數種類 5.2 嵌套函數的變量作用域 5.3 嵌套函數彼此調用關系 5.3.1 主函數和嵌套函數之間 5.3.2 不同的嵌套函數之間 5.3.3 嵌套函數調用關系總結 5.4 嵌套函數應用實例 5.4.1 嵌套函數在求解積分上限中的應用 5.4.2 嵌套函數在GUI中的應用 5.4.3 嵌套函數在3D作圖中的一個應用 5.4.4 嵌套函數表示待優(yōu)化的目標函數 5.4.5 嵌套函數在表示微分方程方面的應用第二部分 案例介紹 第6章 積分以及積分方程案例 6.1 案例1:一般區(qū)域二重、三重積分MATLAB計算方法 6.1.1 概要 6.1.2 一般區(qū)域二重積分的計算 6.1.3 一般區(qū)域三重積分的計算 6.2 案例2:被積函數含有積分項的一類積分的一些求解方法 6.2.1 網格求解法 6.2.2 插值求解法 6.2.3 RBF神經網絡逼近法 6.2.4 dblquad調用RBF神經網絡法 6.2.5 dblquad+arrayfun方法 6.2.6 quad2d+arrayfun方法 6.3 案例3:一般區(qū)域N重積分 6.4 案例4:蒙特卡洛法計算N重積分 6.4.1 概述 6.4.2 基本的蒙特卡洛積分法 6.4.3 等分布序列的蒙特卡洛法 6.5 案例5:第二類FREDHOLM積分方程數值求解 6.5.1 概述 6.5.2 具體解法 6.5.3 實例 6.6 案例6:第一類FREDHOLM積分方程數值求解 6.6.1 概述 6.6.2 一類可以化為第二類Fredholm積分方程的第一類Fredholm積分方程求解方法 6.6.3 第一類Fredholm積分方程的直接數值積分解法討論 6.7 案例7:第二類VOLTERRA積分方程數值求解 6.7.1 概述 6.7.2 具體解法 6.7.3 實例 6.8 案例8:第一類VOLTERRA積分方程數值求解 6.8.1 概述 6.8.2 轉化為第二類Volterra積分方程 6.8.3 實例 第7章 MATLAB優(yōu)化及非線性方程(組)求解案例 7.1 案例9:全局最優(yōu)化的討論 7.1.1 隨機行走法尋優(yōu)介紹 7.1.2 改進的隨機行走法尋優(yōu) 7.2 案例10:FSOLVE求非線性方程組的應用 7.2.1 概述 7.2.2 四元非線性方程組的求解 7.2.3 九元非線性方程組的求解 7.2.4 非線性積分方程的求解 7.3 案例11:漸變光波導方程求解 7.3.1 求解漸變光波導的模方程 7.3.2 二維漸變光波導方程作圖 7.4 案例12:遺傳算法在復雜系統(tǒng)可靠度和冗余度分配優(yōu)化中的應用 7.4.1 問題提出 7.4.2 數學模型 7.4.3 遺傳算法簡介 7.4.4 實例分析 7.5 案例13:遺傳算法在車間設備布局優(yōu)化中的應用 7.5.1 問題提出 7.5.2 數學模型 7.5.3 算法步驟 7.5.4 求解代碼 7.6 案例14:應用BENDERS分解算法求解混合0-1規(guī)劃 7.6.1 概述 7.6.2 Benders分解算法 7.6.3 實例分析 第8章 案例15:人臉圖像壓縮與重建 8.1 概述 8.2 基本的PCA方法實現(xiàn)人臉圖像壓縮與重建 8.2.1 K-L變換 8.2.2 特征向量的選取 8.3 2DPCA方法實現(xiàn)人臉圖像壓縮與重建 8.3.1 概述 8.3.2 2DPCA算法介紹 8.3.3 圖像壓縮(特征提取) 8.3.3 圖像重建 8.4 MATPCA方法實現(xiàn)人臉圖像壓縮與重建 8.4.1 概述 8.4.2 MatPCA算法 8.5 MODULEPCA方法實現(xiàn)人臉圖像壓縮與重建 8.5.1 概述 8.5.2 ModulePCA算法 8.6 算法在MATLAB平臺上的實現(xiàn) 8.6.1 概述 8.6.2 基本PCA與2DPCA和MatPCA方法GUI 8.6.2 Module PCA方法GUI 第9章 有關預測分類的案例 9.1 案例16:北京市國民生產總值的灰色分析 9.1.1 概述 9.1.2 引言 9.1.3 灰色數據融合預測算法與灰色關聯(lián)度 9.1.4 實例分析 9.2 案例17: 距離判別法與BAYES判別法在分類中的應用 9.2.1 概述 9.2.2 判別方法GUI 9.2.3 判別方法GUI應用舉例 9.3 案例18: 支持向量機的應用 9.3.1 概述 9.3.2 支持向量機介紹 9.3.3 MATLAB所依據的支持向量機模型 9.3.4 支持向量機實現(xiàn)圖像分割 9.3.5 支持向量機實現(xiàn)手寫體數字識別 第10章 常微分方程(組)求解案例 10.1 案例19:常微分方程(組)解析求解案例 10.1.1 概述 10.1.2 dsolve函數 10.1.3 dsolve函數求解實例 10.2 數值求解常微分方程函數 10.2.1 概述 10.2.2 初值問題求解函數 10.2.3 延遲問題以及邊值問題求解函數 10.2.4 求解前準備工作 10.3 案例20:非剛性/剛性常微分方程初值問題求解 10.3.1 概述 10.3.2 非剛性問題舉例 10.3.3 剛性問題舉例 10.4 案例21:隱式微分方程(組)求解 10.4.1 概述 10.4.2 利用solve函數 10.4.3 利用fzero/fsolve函數 10.5 案例22:微分代數方程(DAE)與延遲微分方程(DDE)求解 10.5.1 概述 10.5.2 微分代數方程(DAE)舉例 10.5.3 延遲微分方程(DDE)舉例 10.6 案例23:邊值問題求解 10.6.1 概述 10.6.2 求解案例 10.6.3 對bvp4c和bvp5c的改進 第11章 案例24:層次分析法及其MATLAB實現(xiàn) 11.1 層次分析法概述 11.2 層次分析法實現(xiàn)步驟 11.2.1 層次分析法的主要步驟 11.2.2 建立層次分析的結構模型 11.2.3 構造成對比較矩陣 11.2.4 單一準則下元素相對排序權重計算及比較矩陣一致性檢驗 11.2.5 各元素對目標層的合成權重的計算過程 11.3 應用實例 第12章 案例25:定時器及其應用 12.1 定時器介紹 12.1.1 概述 12.1.2 定時器屬性介紹 12.2 定時器應用舉例參考文獻
章節(jié)摘錄
插圖:3)程序設計方面考慮的不周,導致內存溢出。這方面的原因一般表現(xiàn)得比較隱蔽。我們在設計一些變量較多的復雜程序時,可能沒有及時釋放掉一些不再會用到的變量所占用的內存。這樣隨著程序的運行,變量越來越多,內存中碎片也越來越多,再要產生新的較大的矩陣,就可能發(fā)生內存溢出的問題。4)問題求解方法考慮欠周,導致內存溢出。同樣的問題,可能由多種求解方法。不同方法的效率以及所占用的資源相差很大。問題規(guī)模小的時候,不用考慮這方面的問題,可是問題規(guī)模較大的時候就必須考慮具體的求解方法了,否則就可能會由于內存溢出而無法求解問題。譬如符號計算。符號計算由于其語法簡單,并且和傳統(tǒng)教科書解決問題思路一致等特點,使得許多初學者很愛使用符號計算。但是符號計算由于精確性,使得其在計算過程中要保留大量的中間結果,這樣導致復雜的計算問題用符號計算很容易內存溢出,即使不溢出,對于很多復雜的計算問題,符號計算也無法給出解析解。還有當求解涉及較大規(guī)模的稀疏型矩陣的問題時,沒有采用稀疏矩陣數據結構也容易導致內存溢出。(2)運行極其緩慢的原因這是因為大數據量的處理總是伴隨著大量的計算還有頻繁的對內存各地址進行訪問,這些開銷往往比較占用資源。如果物理內存不夠,系統(tǒng)開始調用頁面文件來供程序使用,會使得程序運行速度有很大程度的下降。本章后半部分將介紹不增加物理內存的情況下,可供MATLAB高效利用內存的方法。3.2有效設置增加可用內存,隨著計算機硬件的發(fā)展,如今的內存價格較之以前低廉了很多,主流PC包括筆記本式計算機的內存配置基本都不低于4GB了,這已經達到32位操作系統(tǒng)的尋址極限了。雖然64位操作系統(tǒng)可以支持更大的內存,但由于諸多因素導致64位操作系統(tǒng)完全取代32位操作系統(tǒng)還需要一段時間,在可預見的一段時間內,使用32位操作系統(tǒng)的讀者還會很多,因此在32位操作系統(tǒng)下如何有效利用內存是這節(jié)主要討論的內容。本小節(jié)以windows XP 32位操作系統(tǒng)為例來說明如何設置boot.ini,使得MATLAB程序可以利用更多的內存。3.2.1系統(tǒng)默認下內存分配情況首先需要澄清一個概念——虛擬內存(virtual memory)。有很多朋友習慣把硬盤上預留出來用做內存交換和擴展內存尋址空間的“交換文件”當做“虛擬內存”。因為它不是內存芯片,卻在必要的時候和物理內存進行內存頁交換,所以認為是“虛擬”的內存。當然這樣講有一定道理,也可以認為是人們通常說的“虛擬內存”代表的意思。但是有的時候,“虛擬內存”還代表另一種含義。簡單說來,這種含義就是特定操作系統(tǒng)下多路程序進程共享的計算機物理內存以及頁面文件。
編輯推薦
《MATLAB高效編程技巧與應用:25個案例分析》是目前國內最大的MATLAB&Simulink技術交流平臺,MATLAB中文論壇聯(lián)合《MATLAB高效編程技巧與應用:25個案例分析》作者、編輯將為您提供所需要的問題答案和大量技術支持,讓《MATLAB高效編程技巧與應用:25個案例分析》成為一個聯(lián)系同行,鏈接相關知識點的活動載體。在線交流,有問必答。
圖書封面
圖書標簽Tags
無
評論、評分、閱讀與下載