出版时间:2010-6 出版社:北京航空航天大学 作者:吴鹏 页数:259
Tag标签:无
前言
当今社会,数学作为一切学科基础地位的特征越来越明显,其重要性不言而喻。MATLAB从诞生那一天起,就为数学和实际应用之间架起了一座桥梁,如今经过20多年的发展,这座桥变得越来越雄伟、壮观。现如今,从国外高校到国内高校,从国外期刊到国内期刊,早已随处可见MATLAB应用的身影。更重要的是,近几年来,国内许多高新技术公司也开始普遍应用MATLAB来进行算法前期开发、验证。如今,国内MATLAB相关书籍已经有很多,这些书籍极大地推动了MATLAB在国内的普及。但是MATLAB发展迅速,目前每年推出两个版本,现有书籍对MATLAB高版本一此特有的编程思想、高效的编程方法、新技术等,鲜有专门详细的讨论。本书力图以一种全新的模式,从各个角度将MATLAB呈现给读者。全书共分两部分:第一部分(第1~5章)是有关MATLAB高效编程的一些方法、原则介绍;第二部分(第6~12章)是案例分析。关于高效编程,本书详细讨论了传统的向量化编程原则在新旧版本MAT-LAB下的异同,MATLAB如何处理海量数据,匿名函数和嵌套函数灵活、强大、富有弹性的功能。在案例分析部分,介绍了25个案例,这些案例都来自我平时的研究积累以及长期以来帮助网友解决的典型问题。案例涉及复杂的多重积分、积分方程、非线性方程求解、全局优化、遗传算法、Benders分解算法、人脸图像压缩与重建、灰色分析、距离判别法与Bayes判别法在分类中的应用、支持向量机、各类型的常微分方程(组)求解、层次分析法以及定时器的应用等。互联网的兴起催生了很多专门讨论MATLAB相关技术的论坛、社区。这些社区集中了来自社会各行各业、高校各学科各专业的MATLAB使用者、爱好者。这些社区往往能够紧跟MATLAB的发展,并对其最新的技术及时作出反应。我从2005年开始就一直在国内一些成立较早的MATLAB论坛社区,如研学论坛、仿真科技论坛、振动论坛的MATLAB版面参与讨论问题,并发表了一系列技术精华帖。MATLAB中文论坛成立后,我通过该平台更是经常与各种程度的MATLAB使用者打交道,了解MATLAB使用者最容易遇到的一些问题,以及一些MATLAB软件最新的技术。可以将本书看成是我对这些经验的提取与总结。我在上大学期间一度十分痛恨“数值计算”这门课程,因为为了应付考试而不得不背一些算法流程、公式并手动计算结果,这是非常枯燥和烦琐的。后来竞180度转弯,喜欢上了数值计算,这完全是因为MATLAB——转机就是大二下学期的数学建模,必须要借助MATLAB完成。当用MATLAB轻而易举地随意拟合了一个20多阶的多项式来近似一堆数据时,我被震撼了。这种震撼是忍受了长时间无比枯燥的手动计算后而发自肺腑的。当然现在看来,那时候的拟合毫无技术含量,毫无实际意义。但也正是因为这个开始,促使我不断去探索MATLAB。一开始没有计算机,就去看书,在图书馆里看各种有关MATLAB的书。随着看的书的增多,MATLAB在脑子里也越来越清晰了,对它的喜爱也越来越深。后来2005年在公司实习,查资料时偶然进入论坛这片新天地,蓦然发现居然有那么多相同爱好的人,从此一发不可收拾,便开始了和一帮志同道合的朋友切磋提高的过程。
内容概要
本书是作者八年MATLAB使用经验的总结,精心设计的所有案例均来自于国内各大MATLAB技术论坛网友的切身需求,其中不少案例涉及的内容和求解方法在国内现已出版的MATLAB书籍中鲜有介绍。 本书首先针对MATLAB新版本特有的一些编程思想、高效的编程方法、新技术进行了较为详细的讨论,在此基础上,以大量案例介绍了MATLAB在科学计算中的应用。内容包括:MATLAB快速入门、重新认识矢量(向量)化编程、MATLAB处理海量数据、匿名函数类型介绍、嵌套函数类型介绍、积分以及积分方程求解案例、优化及非线性方程(组)求解案例、人脸图像压缩与重建案例、有关预测分类的案例、常微分方程(组)求解案例、层次分析法及其MATLAB实现、定时器及其应用。 本书可作为高等院校本科生、研究生MATLAB课程的辅助读物,也可作为从事科学计算和算法研究的科研人员的参考用书。
书籍目录
第一部分 高效编程技巧 第1章 MATLAB快速入门 1.1 熟悉MATLAB环境 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系统命令 1.2.6 用MATLAB发送电子邮件 1.3 M语言介绍 1.3.1 数值和变量 1.3.2 MATLAB程序流程控制 1.4 学习MATLAB的方法 第2章 重新认识矢量(向量)化编程 2.1 矢量化编程流行的一些观点 2.2 重新认识循环 2.2.1 高版本MATLAB对循环结构的优化 2.2.2 选择循环还是向量化 2.3 提高代码效率的方法 2.3.1 预分配内存 2.3.2 选用恰当的函数类型 2.3.3 选用恰当的数据类型 2.3.4 减少无谓损耗——给一些函数“瘦身” 2.3.5 变“勤拿少取”为“少拿多取” 2.3.6 循环注意事项 2.3.7 逻辑索引和逻辑运算的应用 2.4 应用高版本向量化函数提高开发效率 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 系统默认下内存分配情况 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 匿名函数在求积分区域方面的应用 4.2.4 匿名函数在求数值方面的应用 4.2.5 匿名函数和符号计算的结合 4.2.6 匿名函数在优化中的应用 4.2.7 匿名函数在求积分区域方面的应用 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 嵌套函数表示待优化的目标函数 5.4.5 嵌套函数在表示微分方程方面的应用第二部分 案例介绍 第6章 积分以及积分方程案例 6.1 案例1:一般区域二重、三重积分MATLAB计算方法 6.1.1 概要 6.1.2 一般区域二重积分的计算 6.1.3 一般区域三重积分的计算 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:一般区域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优化及非线性方程(组)求解案例 7.1 案例9:全局最优化的讨论 7.1.1 随机行走法寻优介绍 7.1.2 改进的随机行走法寻优 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:遗传算法在复杂系统可靠度和冗余度分配优化中的应用 7.4.1 问题提出 7.4.2 数学模型 7.4.3 遗传算法简介 7.4.4 实例分析 7.5 案例13:遗传算法在车间设备布局优化中的应用 7.5.1 问题提出 7.5.2 数学模型 7.5.3 算法步骤 7.5.4 求解代码 7.6 案例14:应用BENDERS分解算法求解混合0-1规划 7.6.1 概述 7.6.2 Benders分解算法 7.6.3 实例分析 第8章 案例15:人脸图像压缩与重建 8.1 概述 8.2 基本的PCA方法实现人脸图像压缩与重建 8.2.1 K-L变换 8.2.2 特征向量的选取 8.3 2DPCA方法实现人脸图像压缩与重建 8.3.1 概述 8.3.2 2DPCA算法介绍 8.3.3 图像压缩(特征提取) 8.3.3 图像重建 8.4 MATPCA方法实现人脸图像压缩与重建 8.4.1 概述 8.4.2 MatPCA算法 8.5 MODULEPCA方法实现人脸图像压缩与重建 8.5.1 概述 8.5.2 ModulePCA算法 8.6 算法在MATLAB平台上的实现 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 灰色数据融合预测算法与灰色关联度 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 支持向量机实现图像分割 9.3.5 支持向量机实现手写体数字识别 第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实现 11.1 层次分析法概述 11.2 层次分析法实现步骤 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 定时器应用举例参考文献
章节摘录
插图:3)程序设计方面考虑的不周,导致内存溢出。这方面的原因一般表现得比较隐蔽。我们在设计一些变量较多的复杂程序时,可能没有及时释放掉一些不再会用到的变量所占用的内存。这样随着程序的运行,变量越来越多,内存中碎片也越来越多,再要产生新的较大的矩阵,就可能发生内存溢出的问题。4)问题求解方法考虑欠周,导致内存溢出。同样的问题,可能由多种求解方法。不同方法的效率以及所占用的资源相差很大。问题规模小的时候,不用考虑这方面的问题,可是问题规模较大的时候就必须考虑具体的求解方法了,否则就可能会由于内存溢出而无法求解问题。譬如符号计算。符号计算由于其语法简单,并且和传统教科书解决问题思路一致等特点,使得许多初学者很爱使用符号计算。但是符号计算由于精确性,使得其在计算过程中要保留大量的中间结果,这样导致复杂的计算问题用符号计算很容易内存溢出,即使不溢出,对于很多复杂的计算问题,符号计算也无法给出解析解。还有当求解涉及较大规模的稀疏型矩阵的问题时,没有采用稀疏矩阵数据结构也容易导致内存溢出。(2)运行极其缓慢的原因这是因为大数据量的处理总是伴随着大量的计算还有频繁的对内存各地址进行访问,这些开销往往比较占用资源。如果物理内存不够,系统开始调用页面文件来供程序使用,会使得程序运行速度有很大程度的下降。本章后半部分将介绍不增加物理内存的情况下,可供MATLAB高效利用内存的方法。3.2有效设置增加可用内存,随着计算机硬件的发展,如今的内存价格较之以前低廉了很多,主流PC包括笔记本式计算机的内存配置基本都不低于4GB了,这已经达到32位操作系统的寻址极限了。虽然64位操作系统可以支持更大的内存,但由于诸多因素导致64位操作系统完全取代32位操作系统还需要一段时间,在可预见的一段时间内,使用32位操作系统的读者还会很多,因此在32位操作系统下如何有效利用内存是这节主要讨论的内容。本小节以windows XP 32位操作系统为例来说明如何设置boot.ini,使得MATLAB程序可以利用更多的内存。3.2.1系统默认下内存分配情况首先需要澄清一个概念——虚拟内存(virtual memory)。有很多朋友习惯把硬盘上预留出来用做内存交换和扩展内存寻址空间的“交换文件”当做“虚拟内存”。因为它不是内存芯片,却在必要的时候和物理内存进行内存页交换,所以认为是“虚拟”的内存。当然这样讲有一定道理,也可以认为是人们通常说的“虚拟内存”代表的意思。但是有的时候,“虚拟内存”还代表另一种含义。简单说来,这种含义就是特定操作系统下多路程序进程共享的计算机物理内存以及页面文件。
编辑推荐
《MATLAB高效编程技巧与应用:25个案例分析》是目前国内最大的MATLAB&Simulink技术交流平台,MATLAB中文论坛联合《MATLAB高效编程技巧与应用:25个案例分析》作者、编辑将为您提供所需要的问题答案和大量技术支持,让《MATLAB高效编程技巧与应用:25个案例分析》成为一个联系同行,链接相关知识点的活动载体。在线交流,有问必答。
图书封面
图书标签Tags
无
评论、评分、阅读与下载