MATLAB高效编程技巧与应用内容简介本书是作者八年 MATLAB使用经验的总结,精心设计的所有案例均来自于国内各大MATLAB技术论坛网友的切身需求,其中不少案例涉及的内容和求解方法在国内现已出版的MATLAE书籍中鲜有介绍。本书首先针对 MATLAB新版本特有的一些编程思想、高效的编程方法、新技术进行了较为详细的讨论,在此基础上,以大量案例介绍了 MATLAB在科学计算中的应用。内容包括: MATLAB快速入门、重新认识矢量(向量)化编程、 MATLAB处理海量数据、匿名函数类型介绍、嵌套函数类型介绍、积分以及积分方程求解案例、优化及非线性方程(组)求解案例、人脸图像压缩与重建案例、有关预测分类的案例、常微分方程(组)求解案例、层次分析法及其 MATLAB实现、定时器及其应用。本书可作为高等院校本科生、研究生 MATLAB课程的辅助读物,也可作为从事科学计算和算法研究的科研人员的参考用书。图书在版编目(CIP)数据MATLAB高效编程技巧与应用:25个案例分析/吴鹏编著.一北京:北京航空航天大学出版社,2010.6ISBN978-7-5124-0083-2I.①M…Ⅱ.①吴…Ⅲ.①计算机辅助计算一软件包, MATLABⅣ.①TP391.75中国版本图书馆CIP数据核字(2010)第079425号版权所有,侵权必究。MATLAB高效编程技巧与应用:25个案例分析吴鹏( rocwoods)编著责任编辑陈守平北京航空航天大学出版社出版发行北京市海淀区学院路37号(邮编100191)htpe://www.buaapress.com,cn发行部电话:(010)82317024传真:(010)82328026读者信箱;bhpress@263.net邮购电话:(010)82316936北京市嫒明印刷厂印装各地书店经销开本:787mm×1092mm1/16印张:17字数:435千字2010年6月第1版2010年6月第1次印刷印数:4000册ISBN978-7-5124-0083-2定价:39.00元世答前言当今社会,数学作为一切学科基础地位的特征越来越明显,其重要性不言而喻。 MATLAB从诞生那一天起,就为数学和实际应用之间架起了一座桥梁,如今经过20多年的发展,这座桥变得越来越雄伟、壮观。现如今,从国外高校到国内高校,从国外期刊到国内期刊,早已随处可见 MATLAE应用的身影。更重要的是,近几年来,国内许多高新技术公司也开始普遍应用MATLAB来进行算法前期开发验证。如今,国内 MATLAB相关书籍已经有很多,这些书籍极大地推动了 MATLAB在国内的普及。但是 MATLAB发展迅速,目前每年推出两个版本,现有书籍对 MATLAR高版本一些特有的编程思想、高效的编程方法、新技术等,鲜有专门详细的讨论。本书力图以一种全新的模式,从各个角度将 MATLAB呈现给读者。全书共分两部分:第一部分(第1~5章)是有关 MATLAB高效编程的一些方法、原则介绍;第二部分(第6~12章)是案例分析。关于高效编程,本书详细讨论了传统的向量化编程原则在新旧版本MATLAB下的异同, MATLAB如何处理海量数据,匿名函数和嵌套函数灵活、强大、富有弹性的功能。在案例分析部分,介绍了25个案例,这些案例都来自我平时的研究积累以及长期以来帮助网友解决的典型问题。案例涉及复杂的多重积分、积分方程、非线性方程求解、全局优化、遗传算法、 Benders分解算法、人脸图像压缩与重建、灰色分析、距离判别法与 Bayes判别法在分类中的应用、支持向量机、各类型的常微分方程(组)求解、层次分析法以及定时器的应用等。互联网的兴起催生了很多专门讨论 MATLAB相关技术的论坛、社区。这些社区集中了来自社会各行各业、高校各学科各专业的 MATLAB使用者、爱好者。这些社区往往能够紧跟MATLAB的发展,并对其最新的技术及时作出反应。我从2005年开始就一直在国内一些成立较早的 MATLAB论坛社区,如研学论坛、仿真科技论坛、振动论坛的 MATLAB版面参与讨论问题,并发表了一系列技术精华帖。 MATLAB中文论坛成立后,我通过该平台更是经常与各种程度的 MATLAB使用者打交道,了解 MATLAB使用者最容易遇到的一些问题,以及些 MATLAB软件最新的技术。可以将本书看成是我对这些经验的提取与总结。我在上大学期间一度十分痛恨“数值计算”这门课程,因为为了应付考试而不得不背一些算法流程、公式并手动计算结果,这是非常枯燥和烦琐的。后来竟180度转弯,喜欢上了数值计算,这完全是因为 MATLAB转机就是大二下学期的数学建模,必须要借助 MATLAB完成。当用 MATLAB轻而易举地随意拟合了一个20多阶的多项式来近似一堆数据时,我被震撼了。这种震撼是忍受了长时间无比枯燥的手动计算后而发自肺腑的。当然现在看来,那时候的拟合毫无技术含量,毫无实际意义。但也正是因为这个开始,促使我不断去探索MATLAB。一开始没有计算机,就去看书,在图书馆里看各种有关 MATLAB的书。随着看的书的增多, MATLAB在脑子里也越来越清晰了,对它的喜爱也越来越深。后来2005年在公司实习,査资料时偶然进入论坛这片新天地,蓦然发现居然有那么多相同爱好的人,从此一发不可收拾,便开始了和一帮志同道合的朋友切磋提高的过程针对本书,北京航空航天大学出版社和MATLAB中文论坛(http://www.ilovematlab.XTLAB MATLAB R效程技巧与点用:25个案例分折www.iloveMatlab.encn/)特别提供了读者与作者在线交流的平台http://www.ilovematlab.cn/forum-182-1.ht-ml),我希望借助这个平台实现与广大读者面对面交流,解决大家在阅读此书过程中遇到的问题,分享彼此的学习经验,从而达到共同进步。本书所有源程序以及测试数据将放到MATLAB中文论坛的读者与笔者在线交流平台及北京航空航天大学出版社的网站上,供读者自由下载。特别感谢北京航空航天大学出版社陈守平编辑,在她一再支持与鼓励下,我决定接受挑战,完成本书创作。在本书的写作过程中,我得到了天津科技大学谢中华老师、 MATLAB中文论坛创始人math(张延亮)和仿真科技论坛前总版主 bainhome(马良)的支持与鼓励,在此,向他们表示最真诚的谢意最后,还要感谢我的家人和朋友,在他们无微不至的关心与支持下,我顺利完成本书的写若作,在此,向他们表示最衷心的感谢。由于作者水平有限,书中难免出现错误,恳请广大读者和同行批评指正。本书勘误网址http://www.ilovematlab.cn/thread-81886-1-1.html您对此书内容有任何疑问,可以凭在线交流卡登录中文论坛与作者交流:2吴鹏2010年3月于北京市昌平区目录第一部分高效编程披巧第1章 MATLAB快速入门……“·+++"t:a·…………·;1.1熟悉 MATLAB环境1.1.1 MATLAB的启动31.1.2 MATLAB desktop1.1.3 MATLAB程序编辑器( Editor)……41.2 MATLAB牛刀小试……41.2. 1 Hello, MATLAB41.2.2万能计算器用法………………………………51.2.3设计一个“囧”的动画61.2.4用 MATLAB编写的第一个函数…普量量画1.2.5用 MATLAB运行 Windows系统命令1.2.6用 MATLAB发送电子邮件81.3M语言介绍……"……………………………………91.3.1数值和变量…………………………91.3.2 MATLAB程序流程控制………………………………………………101.4学习 MATLAB的方法……………2第2章重新认识向量化编程152.1向量化编程流行的一些观点丰···,,·,··,普“,,152.2重新认识循环………………………152.2.1高版本 MATLAB对循环结构的优化………2.2.2选择循环还是向量化…………202.3提高代码效率的方法……………………………212.3.1预分配内存…果(,,,着,…………………………………….212.3.2选用恰当的函数类型242.3.3选用恰当的数据类型…………………………………………………272.3.4减少无谓损耗—给一些函数“瘦身”…………………………………2923.5变“勤拿少取”为“少拿多取”……302.3,6循环注意事项…“·““““““非非。,322.3.7逻辑索引和逻辑运算的应用…M……342.4应用高版本向量化函数提高开发效率…342.4.1 accumarray函数…34NIKTLBBMATLAB高效编程技巧与应用:25个案例分析b.cn2.4.2 arrayfun函数…………………372.4.3 bsxfun函数382.4.4 cellfun函数…………………………………………………………………………………392.4.5 spun函数……402,4,6 structfun函数……41第3章 MATLAB处理海量数据………423.1处理海量数据时遇到的问题…………………………………………………………………423.1.1什么是海量数据…………………………………………………………………423.1.2经常遇到的问题曹意世世虚世世虚tt虚虚t着国曹律看重重着423.2有效设置增加可用内存433.2.1系统默认下内存分配情况…43若3.2.2打开 Windows3GB开关………45您对3.3减小内存消耗注意事项……………………………………………46此书内3.3.1读取数据文件………………………………………………………………46容3.3.2数据存储……………………………………………………………………47有3.3.3减小内存其他注意事项………………49任何第4章匿名函数类型50疑问4.1匿名函数曹鲁主曹504.1.1匿名函数的基本定义…50可以凭在线交流卡登录4.1.2匿名函数的种类………………………………………………………………514.2匿名函数应用实例…………………………………………………………………………524.2,1匿名函数在求解方程中的应用……524.2.2匿名函数在显式表示隐函数方面的应用544.2.3匿名函数在求积分区域方面的应用………………………………………………564.2.4匿名函数在求数值积分方面的应用………………………………564.2.5匿名函数和符号计算的结合……………………………………………………564.2.6匿名函数在优化中的应用…………自自57文4.2.7匿名函数在求积分区域方面的应用……………·,,·,中,,..,,和,,,,和57论坛与作者交流4.2.8匿名函数和cel数组的结合应用…………………………………58第5章嵌套函数类型…595.1嵌套函数着世tttt世595.1.1嵌套函数的基本定义……,………………595.1.2嵌套函数种类…………………………………60215.2嵌套函数的变量作用域……………………………………………………605.3嵌套函数彼此调用关系………………………………635.3.1主函数和嵌套函数之间…………635.3.2不同的嵌套函数之间…………………………………………655.3.3嵌套函数调用关系总结……鲁世世世世虚世想想675.4嵌套函数应用实例………68日/Auwww, iLoveMatlab, en5.4.1嵌套函数在求解积分上限中的应用……………………………………eBn685.4.2嵌套函数在GUI中的应用……………………………685.4.3嵌套函数在3D作图中的一个应用………………………………:705.4.4嵌套函数表示待优化的目标函数……………………………715.4.5嵌套函数在表示微分方程方面的应用…第二部分案倒介绍第6章积分以及积分方程案例……………76.1案例1:一般区域二重、三重积分 MATLAR计算方法……756.1.1概要…,…“““‘“4#4“…““+…:,756.1.2一般区域二重积分的计算………756.1.3一般区域三重积分的计算………786.2案例2:被积函数含有积分项的一类积分的一些求解方法……………………………806.2.1网格求解法……………………816.2.2插值求解法…………………………………………………826.2.3RBF神经网络逼近法…………83若您对此内有任6.2.4 biquad调用RBF神经网络法………2866.2.5 biquad+ arrayfun方法………87疑问6.2.6quad2d+ arrayfun方法……………………………………………886.3案例3:一般区域n重积分…可…………………………90以6.4案例4:蒙特卡洛法计算n重积分凭94在6.4.1概述………………………………………,………,…946.4.2基本的蒙特卡洛积分法……,出新““,,,946.4.3等分布序列的蒙特卡洛法……………966.5案例5:第二类 Fredholm积分方程数值求解…………………986.5.1概述986.5.2具体解法"……………………………98线交流卡登录中文论6.5.3实例…………………………………………………………102文6.6案例6:第一类 Fredholm积分方程数值求解6.6.1概述………………………………………………………104与6.6.2一类可以化为第二类 Fredholm积分方程的第一类Fredholm者积分方程求解方法交……"………"………………”105流6.6.3第一类 Fredholm积分方程的直接数值积分解法讨论……………………………1086.7案例7:第二类 Volterra积分方程数值求解………………………………10936.7.1概述…………1096.7.2具体解法……;;;#*;++++++,++,,………………………1096.7.3实例…………………………………………………1136.8案例8:第一类 Volterra积分方程数值求解…………1166.8.1概述…………………-116KTLAB MATLAB高效端程技巧与应用:25个案例分析www.ilevematlab,tn6.8.2转化为第二类 Volterra积分方程…………………………1166.8.3实例……………………………………………………117第7章 MATLAB优化及非线性方程(组)求解案例………………………1207.1案例9:全局最优化的讨论1207.1.1随机行走法寻优介绍1207.1.2改进的随机行走法寻优…1237.2案例10: fsolve求非线性方程组的应用……(·,,面,、,…1277.2.1概述…………1277.2.2四元非线性方程组的求解………………………………………………1277.2.3九元非线性方程组的求解…………1287.2.4非线性积分方程的求解1307.3案例11:渐变光波导方程求解132若您对此书内容有7.3.1求解渐变光波导的模方程…327.3.2二维渐变光波导方程作图……………………………………………1337.4案例12:遗传算法在复杂系统可靠度和冗余度分配优化中的应用………347.4.1问题提出134容有任何疑问,可以凭在线7.4.2数学模型1357.4.3遗传算法简介……1367.4.4实例分析……1387.5案例13:遗传算法在车间设备布局优化中的应用…………………………1437.5.1问题提出…………………………11437.5.2数学模型………,审,,排,,用;着交…143流7.5.3算法步骤145卡登7.5.4求解代码146录7.6案例14:应用 Benders分解算法求解混合0-1规划1517.6.1概述……………………………………………………1517.6.2 Benders分解算法·:················:··:···:·:::···“:·:::·::…151品中文论坛与作者交流7.6.3实例分析h nirit at量量ttt量量册串自重南着,和··.·,,,·155第8章案例15:人脸图像压缩与重建…………11608.1概述……………1608.2基本的PCA方法实现人脸图像压缩与重建…608.2.1K-L变换…………1608.2.2特征向量的选取…………16248.32DPCA方法实现人脸图像压缩与重建………………………1628.3.1概述…………1628.3.22DPCA算法介绍…………………………………1638.3.3图像压缩(特征提取)…1648.3.4图像重建……………………………………………………………“…………1648.4 MatPCA方法实现人脸图像压缩与重建……………………………………165目录NAtLawww,LL。 mATlab,en8.4.1概述………………11658.4.2 MatPCA算法1658.5 ModulepCa方法实现人脸图像压缩与重建…·,量出由1668.5,1概述…未“a··…········::.a“·………1668.5.2 ModulePCa算法…………1668.6算法在 MATLAB平台上的实现………………………1678.6.1概述…………………………………………………………………………1678.62基本PCA与2DPCA和 MatPCa方法GUI……1678.6.3 Module pCa方法GUI………………176第9章有关预测分类的案例…………1839.1案例16:北京市国民生产总值的灰色分析…………………………………………1839.1.1概述…1839.1.2引言…………………1839.1.3灰色数据融合预测算法与灰色关联度…………甲·,,,,,意.1849.1.4实例分析……1879.2案例17:距离判别法与 Bayes判别法在分类中的应用……………199.2.1概述………………1909.2.2判别方法GUI……………………………1909.2.3判别方法GUI应用举例……………"……………………………1949.3案例18:支持向量机的应用…195内容有任何疑问,可以凭在9.3.1概述1959.3.2支持向量机介绍…………………1959.3.3 MATLAB所依据的支持向量机模型………………………1969.3.4支持向量机实现图像分割……………………1979.3.5支持向量机实现手写体数字识别…………19凭在线交流卡登录第10章常微分方程(组)求解案例………………20310.1案例19:常微分方程(组)解析求解案例…20310.1.1概述….,,生虚想世世前1..(…203文10.1.2 dsolve函数………论……203坛10.1.3 dsolve函数求解实例……………………………204与作10.2数值求解常微分方程函数…………………………………………207者10.2.1概述……………交20710.2,2初值问题求解函数……20810.2.3延迟问题以及边值问题求解函数209510.2.4求解前的准备工作……20910.3案例20:非刚性/刚性常微分方程初值问题求解……………………21010.3.1概述…………21010.3.2非刚性问题举例………………………………"……………21010.3.3刚性问题举例212