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