详解MATLAB在最优化计算中的应用(第2版)(txt+pdf+epub+mobi电子书下载)


发布时间:2020-05-14 07:15:27

点击下载

作者:李明

出版社:电子工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

详解MATLAB在最优化计算中的应用(第2版)

详解MATLAB在最优化计算中的应用(第2版)试读:

前言

人们在处理生产过程、金融投资、工程应用、机械设计、经营管理等实际问题时,都希望以最优的方式求得人力、物力和财力的合理运用。如何运用数学和工程的方法获取这个最佳处理结果的问题称为最优化问题。而针对最优化问题,如何确定一系列可行方案,然后从可行方案中通过分析、比较和判断使所得结果最佳的方法称为最优化方法。

最优化理论和方法自古就有,最典型的实例就是黄金分割,最优化方法成为科学方法则在17世纪以后。牛顿和莱布尼茨所创建的微积分理论为最优化问题的解决提供了理论基础,而后产生的变分法和简单的库存模型等精确的解析方法可以称为古典最优化方法。

古典最优化方法虽然出现得比较早,但是由于计算手段的限制导致这些方法在解决实际问题时遇到了瓶颈。到了20世纪40年代末期,第二次世界大战前后,由于军事上的需要产生了运筹学,此后,因为计算机的兴起和日益普及,使得原来根本制约优化设计方法的大运算量问题得以解决,为数值优化方法的发展提供了有效的手段,于是最优化技术突飞猛进,得到了广泛的应用并创造了巨大的经济效益和社会价值。这个技术热点也促使了近代最优化理论的建立,它主要以数学规划法为基础,研究各种系统的优化途径及方案,为决策者提供科学决策的依据。

与此同时,随着计算机应用技术的发展,各种可用于最优化方法设计与实现的软件层出不穷,丰富了科研技术人员的开发研究手段,提高了解决实际问题的效率,MATLAB就是其中的一种。MATLAB是美国MathWorks公司出品的商业数学软件,与Mathematica、Maple并称为三大数学软件。MATLAB以其强大的科学计算功能和覆盖面广、专业性强的工具箱发展成为适合多学科、跨平台的大型实用科学计算软件,也为最优化计算问题的解决提供了有力的工具。

在笔者的教学过程中,发现许多非数学专业的学生在学习“数学规划”、“运筹学”等与最优化理论和方法相关的课程时,往往觉得这些数学理论晦涩难懂,且由于拘泥于某些细节,很难形成对最优化理论和方法的全面了解,阻碍了其分析和解决实际问题的能力。因而笔者一直想撰写这么一本书,让读者觉得最优化方法是有趣而且实用的,并且能够运用科学计算的方法,跳出艰深数学理论的囹圄,利用MATLAB这个强大的工具实现并验证自己的想法,加深对最优化理论的理解。故本书以工程应用为基础,将最优化理论和方法与MATLAB相结合,帮助读者从理论和实践两个方面提高解决最优化问题的能力,让即便是数学基础不够深厚的读者也同样能够利用MATLAB解决较难的最优化数学问题,为读者能够快速进入这个领域、设计高效可行的最优化方案奠定扎实的基础。

本书的内容以最优化理论为主线,以最优化方法与实际应用相结合的实例为基础,并结合笔者多年的教学实践经验,介绍各种最优化理论和方法在MATLAB中的实现方法。本书的内容涵盖了最优化理论与方法中的杰出成果,例如线性规划、整数规划、非线性规划、二次规划、多目标规划、图与网络优化等,还兼顾了新近发展的近代智能优化方法,例如遗传算法、模拟退火、禁忌搜索等,使读者有机会结合MATLAB去接触解决较为复杂最优化问题的启发式搜索方法,通过探索提高读者的自我学习能力。

本书由浅入深、循序渐进地让读者从整体上把握最优化计算的实质,进而可以将实际的问题抽象成易于理解的数学模型,同时转换成MATLAB语言进行求解。书中的实例是笔者多年教学中理解和思想的凝练,内容经过精心的考量和裁剪,相信会受到读者的认可。

本书分为11章,第1章主要讲解MATLAB的应用基础,包括MATLAB的基本使用方法、MATLAB 的数据类型和各种运算、MATLAB 的图形功能及工具箱的使用;第 2 章介绍MATLAB的控制流程、M文件等基础编程技术及MATLAB的接口知识,并结合VC++讲解如何将 MATLAB 和其他高级编程语言相结合,高效地解决实际应用开发问题;第 3章针对本书探讨的核心问题——最优化计算,首先介绍最优化问题的概念、最优化理论和方法的产生与发展,然后归纳总结出最优化问题的建模方法;第4章至第10章将MATLAB和最优化理论相结合,分别介绍如何使用MATLAB解决线性规划、整数规划、非线性规划、二次规划、多目标规划、图与网络优化和智能优化等最优化领域的实际问题,分析和总结各种最优化问题的建模方法与求解算法,并给出MATLAB优化工具箱中相应函数的使用方法,通过大量的实例帮助读者理解最优化计算是如何应用于实际问题的。本书对各种最优化方法的讲解均注重专业知识和MATLAB实践应用的结合,都给出了基本的推导和结论,分析了各种最优化问题的理论求解方法和MATLAB求解方法,方便读者比照和理解。值得一提的是,笔者在数学理论的完整性和可读性之间作了大量权衡,使得广大读者可以各取所需,既满足了希望深入了解最优化理论的读者的需求,又兼顾了在复杂数学理论上有所困扰的读者在应用方面的需求。第11章给出各种最优化方法的综合实例及其MATLAB求解方法。

笔者在撰写本书的过程中,得到很多同事、同行和朋友的帮助,他们为本书的编写提供了许多宝贵的意见和建议,使得本书的思路和内容臻于完善,在此表示深深的谢意。本书还从使用者的角度出发,将笔者自身教学和科研中丰富的经验融入书中知识点的讲解,并将MATLAB工具箱与最优化实际问题相结合,使读者在学习理论知识的同时可以尝试设计各种最优化方案以解决各领域的实际问题,提高读者将知识转化为能力的水平。

本书在第1版的基础上,将MATLAB软件平台升级到了MATLAB R2014a版本。本书可供最优化领域的研究人员参考,也可作为高校该类课程高年级本科生和研究生的教材,还可作为其他科技工作者在科学计算等方面的参考书。

本书提供案例的源代码及MATLAB R2014a基础教学视频下载,读者可登录华信教育资源网(www.hxedu.com.cn),注册成会员后查找本书所在页面免费下载。

本书主要由李明编著,同时参加编写工作的还有张玉兰、高克臻、张云霞、许小荣、王东、王龙、张银芳、周新国、蔡娜、胡书敏、李爽、苏静、张秀梅、贾东永。

由于笔者水平所限,加之时间紧迫,书中疏漏、不当甚至谬误之处在所难免,在此恳请广大读者、同行和各界人士批评和指正。

编著者

2017年8月第1章 MATLAB语言基础

本章从最优化计算问题的需要出发,主要帮助读者了解 MATLAB 的相关基础知识,为读者能够进一步使用 MATLAB 进行最优化问题的求解奠定一个良好的基础。为使读者在使用MATLAB之前对该软件有一个整体的认识,本章首先概述MATLAB的产生、发展及其优势,然后着重介绍MATLAB的基本使用方法,包括MATLAB的工作环境、MATLAB的数据类型和各种运算、MATLAB的图形功能及工具箱的使用。1.1 MATLAB简介

MATLAB是美国MathWorks公司出品的商业数学软件,MATLAB是矩阵实验室(MAtrix LABoratory)的简称,与 Mathematica、Maple 并称为三大数学软件。MATLAB 可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通信、图像处理、信号检测、金融建模设计与分析等领域。1.1.1 MATLAB的产生与发展

MATLAB诞生于20世纪70年代,其首创者是时任新墨西哥大学教授的Cleve Moler及其同事。MATLAB是集命令翻译、科学计算于一身的一套交互式软件系统,最初作为免费软件在大学里广泛使用,由于在 MATLAB 中矩阵运算变得异常简单,因而受到广大工程专业大学生的青睐。也正是因为工程领域中非常强调矩阵的运算和分析,才促使 Cleve Moler 对MATLAB 进行继续开发,并于 1984 年与 Jack Little 等一起创办了 MathWorks 公司,把MATLAB 推向市场,之后 MathWorks 不断致力于版本的更新和软件功能的增强。历经多年的发展,到20世纪90年代,MATLAB已成为国际控制界的标准计算软件。1.1.2 MATLAB语言的优势

MATLAB 已经发展成为适合多学科、跨平台的大型实用科学计算软件。在高等院校,MATLAB已经成为线性代数、自动控制理论、数理统计、数字信号处理、动态系统仿真等课程的基本教学工具;在研究单位和工业部门,MATLAB被广泛用于解决各种具体问题。

1.强大易用的科学计算语言

MATLAB 之所以能迅速发展的一个重要原因就是MATLAB 的使用简捷直观。MATLAB的很多运算都是直接针对矩阵的,如果想在C语言中实现两个矩阵Matrix_1和Matrix_2的乘积,计算过程的核心代码要用到复杂的三重循环,而在 MATLAB 中,只要直接表示为Result_Matrix=Matrix_1*Matrix_2即可;同样的,矩阵求逆、转置等各种矩阵操作如果要用C语言来实现,颇费周章,而在MATLAB中只需要一个简单的命令就可以完成。

功能强大是MATLAB的一大显著特点,其库函数十分丰富。同时,MATLAB针对许多专门的领域,将目前工程和科学界重要的问题通过软件制作成工具箱,它们都是由特定领域的专家开发的,深入到科学研究和工程应用的诸多方面,涵盖了工程与科学的大多数领域。

2.全面的图形功能

MATLAB具有强大的图形处理功能,它自产生之日起就具有数据可视化功能,可以将向量和矩阵用图形表现出来。之后,MATLAB对整个图形处理功能作了很大的改进,使它不仅具有一般数据可视化软件的功能,而且还添加了一些其他软件所没有的功能,如图形的光照处理、色度处理及四维数据的表现等。

3.独立开放的平台

MATLAB支持多种计算机操作系统,提供了大量的平台独立措施。在一个平台上编写的程序,可以不做任何修改在其他平台上正常运行;在一个平台上编写的数据文件,在其他平台上一样可以编译。因此,用户可以自由地根据需要把MATLAB编写的程序在不同的平台之间移植。

4.实用的程序接口

MATLAB与Fortran、C和Basic之间都可以方便地实现连接,以期最大限度地利用各种编程语言的优势。1.2 MATLAB入门

本节首先向读者介绍如何使用MATLAB中的各种组件,包括MATLAB窗口、MATLAB帮助系统和MATLAB的路径搜索等,之后主要讲解MATLAB的基本语法知识,如MATLAB中的数据类型、矩阵表示、符号和关系逻辑运算等。1.2.1 MATLAB工作环境

为了方便使用MATLAB的函数和文件,MATLAB为用户提供了一套完整的开发工具,其中许多工具采用的是图形用户界面,它们包括MATLAB桌面、命令窗口、历史命令窗口、编辑调试窗口,以及用于浏览MATLAB各种信息的浏览器。

1.MATLAB窗口

启动MATLAB R2014a应用程序,屏幕上显示的是MATLAB的默认界面,如图1-1所示。可以看到,屏幕被划分成多个子窗口,它们是当前目录窗口(Current Directory)、命令窗口(Command Window)、工作空间管理窗口(Workspace)、历史命令窗口(Command History)。下面对重要的窗口进行一个简要的介绍。图1-1 MATLAB的默认界面

1)命令窗口(Command Window)

命令窗口(Command Window)位于MATLAB桌面的中间,MATLAB的命令提示符为“>>”,表示MATLAB处于准备状态,此时可以在 >> 之后输入一些基本命令,如数值运算命令,然后按下Enter键,则MATLAB会在命令窗口立即显示结果,并将结果自动赋予变量名ans。例如,求取半径为3的圆的面积,可输入如下命令:

采用上述方法简单易行,当遇到较为复杂的问题时,可以通过赋值运算符“=”给变量赋值,并存储该变量。例如,可以用变量r来表示圆的半径,用变量S来表示圆的面积,百分号“%”是MATLAB中的注释符,则上例也可以通过下面的方法获得结果:

可以看到在命令窗口输入r=3并按下Enter键后,MATLAB会在命令窗口直接显示这条命令的计算结果。若要禁止显示计算的中间结果,则可以通过分号“;”来实现:

MATLAB允许一行输入多个命令,此时可以用逗号“,”和分号“;”来实现,区别在于使用逗号时将会显示运行结果,使用分号时将隐藏运行结果。

2)工作空间管理窗口(Workspace)

MATLAB的工作空间是用于存储运算中的各种变量和结果的内存空间,而工作空间窗口(Workspace)则用于显示变量的名称、大小、字节数及数据类型等,可以通过工作空间窗口对变量进行观察、编辑、保存和删除等操作。需要注意的是,MATLAB函数在运行过程中会调用一些临时变量,这些变量在函数运行结束后将被释放,因此,这些临时变量不会占用工作空间。

为了对某变量进行相关的操作,除了以命令行的方式,还可以使用 MATLAB 提供的变量编辑器(Variable Editor)。通过变量编辑器可以直接观察变量中的各个元素,也可以修改变量中的各个元素。变量编辑器的界面如图1-2所示。图1-2 变量编辑器

可以看到,在变量编辑器中数值保存在与数据维数相符的方格中,可以通过快捷键如Ctrl+C实现数据的复制、以Ctrl+V实现数据的粘贴等;同时,可以双击方格中的数据对数据进行编辑,如修改数据的数值等。还有一种方式是通过工具栏上的图标对相应的数据进行编辑,主要功能如下所示:(保存)——保存对数据所作的修改;(剪切)——对所选取的数据进行剪切操作,此后被剪切的相应数据格置零,且可以将所剪切的数据粘贴到变量编辑器中的任一方格中;(复制)——实现所选取数据的复制,且可以将此数据粘贴到变量编辑器中的任一方格中;

(粘贴)——实现数据的粘贴操作;(绘图)——绘制所选取数据的图形。

可以通过三种方式打开上述变量编辑器,以编辑MATLAB中的变量:

在工作空间管理窗口双击该变量名;

用鼠标单击变量名后单击工作空间管理窗口工具栏上的打开图标;

用鼠标选中变量名,单击鼠标右键弹出如图1-3所示快捷菜单,然后选择菜单中的相关命令。主要功能为:命令“打开所选内容 Ctrl+D”用于打开命令编辑器编辑相应的选择变量;命令“另存为…”用于将所选择的变量进行重命名并保存;命令“复制 Ctrl+C”用于复制所选择的数据;命令“生成副本”用于创建所选择变量的副本,假如所选择的变量名为 var,则 MATLAB创建一个完全相同的副本varCopy;命令“删除”用于删除所选择的变量,此后该变量从工作空间消失。图1-3 变量编辑快捷菜单

如果用户想以命令行的方式查看工作空间的情况,可以在命令窗口输入相应的命令,管理工作空间的常用命令如表1-1所示。表1-1 管理工作空间的常用命令

3)历史命令窗口(Command History)

历史命令窗口(Command History)用于记录用户在命令窗口执行过的命令行,包括已运行过的命令、函数、表达式、使用时间等信息。在历史命令窗口可进行命令历史的查找、检查等工作。用鼠标选中历史命令窗口中的命令行,单击右键弹出如图1-4所示操作菜单,可以选择相应菜单项对这些历史命令进行复制(Copy)、执行(Evaluate Selection)、删除(Delete Selection)等操作;双击这些命令可使它再次执行。

4)当前目录窗口(Current Directory)

MATLAB 的当前目录窗口(Current Directory)用于显示及设置当前工作目录,同时显示当前工作目录下的文件名、文件类型及目录的修改时间等信息。用鼠标选中文件,单击右键可以对文件进行相关操作,如图1-5所示。图1-4 历史命令窗口中对历史命令的操作菜单图1-5 当前目录窗口中对当前工作目录里文件的操作

设置当前目录,可以在当前目录窗口上方的输入栏中直接输入,或单击浏览器下拉按钮进行选择。还可以在命令窗口用cd命令设置当前目录,如在命令窗口输入如下命令:

则可将D盘上的Work目录设为当前工作目录。

2.路径搜索

MATLAB有一个专门用于查找“.m”文件的路径搜索器,MATLAB定义了一系列文件路径的组合,默认状态下包括当前路径和已安装的全部工具箱的路径。如果调用的函数或文件在搜索路径之外,MATLAB会认为此函数或文件不存在而返回错误信息。

一般而言,当在命令窗口输入一个字符串时,MATLAB按下列顺序开始搜索:(1)在工作空间中搜索是否有以该字符串为变量名的变量,有则返回该变量的值。(2)搜索是否有同名的MATLAB内部函数,如果有,执行该内部函数。(3)在当前目录中查找与该字符串同名的M文件,如果有,执行该文件。(4)在搜索目录中查找与该字符串同名的M文件,如果有,执行该文件。(5)如果在搜索目录中存在多个同名函数,则只执行搜索路径中的第一个函数,其他函数不再执行。

可以通过选择工具栏中的按钮,设置MATLAB的搜索目录,或者在命令窗口输入pathtool后回车,均会弹出搜索路径设置对话框,如图1-6所示。图1-6 搜索路径设置对话框

用 Add Folder 按钮可以将某一目录加入搜索路径而忽略其子目录,选择 Add with Subfolder 按钮可将选中目录的子目录也包括在搜索路径中。一般情况下选择后者,此时系统会弹出“浏览文件夹”对话框,选择好目录之后单击“确定”按钮,则新目录会出现在搜索路径中。

在命令窗口中可以使用如下设置搜索路径时常用的命令:

3.MATLAB帮助系统

1)帮助窗口

有多种方法可以得到MATLAB的帮助,其中最全面的是帮助窗口(Help),该窗口是一个独立的交互式帮助浏览器,如图1-7所示。用户可以在命令窗口中输入doc或helpwin来启动帮助窗口。通过帮助窗口中的帮助主题(Contents)、帮助索引(Index)和联机演示(Demos),可以浏览用户可能需要的内容,在查询结果(Search Results)中可以查看按用户要求得到的帮助信息列表。

假如用户知道某函数命令的名称,则用doc命令可以调出帮助窗口,以超文本显示该函数的帮助信息。例如,想在帮助窗口查看mesh()函数的帮助信息,可以在命令窗口输入如下命令:图1-7 帮助窗口

2)help命令

第二种获得MATLAB帮助的方法是在命令窗口使用help命令。当用户知道函数名称想了解其具体用法时,可以在命令窗口使用help命令,调用方法是“help函数名”。例如,想了解矩阵求逆函数inv()的用法,可以在命令窗口输入help命令如下:

3)lookfor命令

第三种获得MATLAB 帮助的方法是在命令窗口使用lookfor命令。lookfor 命令与help命令不同,help命令要求函数名的精确匹配,而lookfor命令只要求与每个函数中的总结信息有匹配。所以当用户不知道函数的确切名称时可以使用lookfor命令,此时只需知道函数的部分关键字,调用格式为“lookfor关键字”。例如,若用户不知道MATLAB中矩阵求逆的函数,而求逆函数的关键字为inverse,则可以在命令窗口输入如下命令:

根据列出命令的总结信息,可以找到矩阵求逆的函数为inv-Matrix inverse。1.2.2 MATLAB中的数据类型

强大的数值运算功能是MATLAB最显著的特色。MATLAB的数据类型主要包括数值型数据、符号型数据、字符串型数据、多维数组、元胞数组、结构型数组等。

1.数值型数据

大部分情况下,MATLAB的数据都是以双精度数值来表示,不区分整数、实数、复数等,占8个字节(64位),MATLAB表示为double(),其值域约为-1.7e308~1.7e308。在MATLAB中复数可以像实数一样直接输入和计算,虚数单位可以用i或者j表示。i=sqrt(-1),其值在工作空间显示为0+1.0000i。

MATLAB 中复数可以用下面两种方式表达:z=a+b*i或z=r*exp(i*θ),其中r为复数的模,θ为复数辐角的弧度数。下面是在MATLAB中使用复数的一些例子:

2.符号型数据

符号型数据是在 MATLAB 中定义的特殊变量,它以字符串的形式表示,但又不同于普通字符串,其变量、表达式均为符号对象。符号对象使用sym或者syms生成,语法格式为:

通常,可以将函数包含在成对的单引号内,组成符号表达式,也可以在定义了符号变量以后,用符号变量建立符号表达式。为了方便且易于理解,一般推荐第二种方式。

下面是一些简单的例子:

3.字符串型数据

一个字符串是存储在一个行向量中的文本,由单引号括起来。字符串里的每个字符是数组里的一个元素,字符串中的空格也是字符。由于字符串是以向量的形式来存储的,因而可以通过它的下标对字符串中的任何一个元素进行访问。

4.多维数组

数组也可以嵌套,一个数组的元素可以是另外一个数组,这样就构成了多维数组。例如,三维数组就是一般矩阵的拓展,图1-8所示即为一个三维数组的示意图,数组的第一维称为“行”,第二维称为“列”,第三维称为“页”,运算则与低维的类似。图1-8 三维数组

可以通过按页输入的方法构造一个三维数组并进行运算。例如:

5.元胞数组

元胞数组是 MATLAB 中的一种特殊数据类型,可以看做多维数组的直接扩展。其存储形式类似于矩阵,若论区别主要有两点:第一是元胞数组自身可以嵌套,即元胞数组的元素还可以是元胞数组;第

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载