-1-前言MATLAB一直是国际科学界应用和影响最广泛的软件工具,有着Mathematica和Maple无法比拟的优势和适用面。它不仅仅是一款数学软件,应用于微积分、概率统计、复变函数、线性变换、解方程、最优化、插值及数据显示等方面,也应用于模糊逻辑、小波分析、神经网络、图像处理、模式识别方面求解。另外数字信息处理、系统仿真、自动化、工程力学、信息与系统、模拟电路等方面都广泛的应用。使用好的数据处理方法和相应的软件工具对实验数据进行处理是大学理工数各专业学生应具备的基本技能,对于相关课程的学习也非常重要。MATLABT优点众多,本书只是重点讨论MATLAB在数据处理方面的应用。具体包括以下方面的内容:1.MATLAB安装及界面使用详解;2.数组与矩阵及其运算;3.MATLAB常用数值计算;4.代数方程与最优化;5.符号计算;6.插值与拟合;7.数据与函数的显示。在阅读过程中,要求上机执行书中的相关程序代码,熟练书的相关知识,要求勤查MATLAB自带的帮助系统,才能起到很好的学习效果。-2-第一章MATLAB的安装和界面使用本章详细讲述MATLABR2007a的安装和界面的使用。1.1.MATLAB安装首先双“setup.exe”之后,出现如图1-1的“WelcometotheMathWorksInstaller”窗口,然后点击“Next”按钮。1-1进入图1-2的“LicenseInformation”窗口,在Name框和Organization输入-3-1-2相应名称(自行命名)。然后安装目录下的“serial.txt”文件,将序列号复制到“PleaseenteryourPersonalLicensePassword(PLP)”框中,然后点击“Next”按钮。待少许时间,防火墙会提示是否允许访问网络的提示框,如瑞星防火墙会出如下图1-3的对话框。-4-1-3选择“总是允许”,并按“确定”。进入“MathWorksAccount”对话框如图1-4。-5-图1-4选择“InstalltheproductversionsfrommyDVDorlocaldiskonly”选项按钮,进入“Licenseagreement”对话框,然后选择“Yes”按钮。图1-5进入“InstallationType”对话框,如图1-6所示,然后选择“Typical”按钮,点击“Next”。-6-图1-6然后进入“”对话框,如图1-7所示。可以更改安装目录,也呆保持默认。如果系统盘的空间不空,则应更改安装目录,以保证机器的正确运行。图1-7在接下来的步骤中,皆选择“Next”按钮,即可。1.2.MATLAB的启动与界面详解在开始菜单中,选择:开始\程序\MATLAB\R2007a\matlabR2007a,如图1-8所示。-7-图1-8然后进入MATLAB应用程序主界面,如图1-9所示。最上方是标题栏,显示版本信息:MATLAB7.4.0(R2007a):再往下的一栏是菜单栏:-8-图1-9接下来是工具栏:其中是指定当前工作路径,如果要向某文件夹中读取或保存相关内容,则通过点击,然后选择该文件夹作为当前工作路径。然后点击左侧的,则会出现CurrentDirectory对话框如图1-10所示,用来显示当前路径中的文件信息。它和Workspace处于同一具标签对话框中。图1-10右侧是CommandWindow窗口,如图1-11所示,是用来输入MATLAB指令的。一打开MATLAB则在CommandWindow中会出现“”,此符号表示MATLAB软件已准备好了,正在待命令的输入。如输入指令:A=[123]然后回车,则出现运算结果:A=123此指令表示输入一个一行三列的矩阵(即行向-9-量),并将此矩阵(向量)保存在变量A中。关于矩阵及向量向量,在第二章中详细解释。图1-11指令执行完毕之后,会发现左下方的CommandHistory窗口中会多出现一行刚刚输入的指令。如图1-12所示,CommandHistory是用来保存输入过的命令,方便以后查找或再次使用。同时Workspace标签属性页也会多出一行。如图1-12所示,CurrentDirectory是用来显示可用的各种变量的。图中说是说明了刚才得到的变量A,它的值、最小、最大元素及类型等信息。图1-12-10-图1-13在上任一处右击,然后在弹出菜单上选择需要查看的相关信息。如图1-14所示。如果需要用到以前的命令,可以在CommandHistory窗口中查到,可按日期查找,可以选择单条历史命令,也可以同时选择多条历史记录。然后右选择复制,将其粘贴到CommandWindow窗口中执行。也可将其作为文本复制到Word文档或txt文档中。如果双击历史记录中的命令,则系统会立即执行被双击的命令一次。如果CommandHistory窗口中一些命令不需要,可以一条或多条记录,然后按“Delete”键,将之删除。图1-14图1-151.3.MATLAB的帮助详解点击主菜单中的Hellp\MATLABHelp或直接按F1,进入MATLAB自带的帮助界面,如图1-16所示。点击各个节点可以查看相关帮助信息。帮助文件里有详-11-细的解释和丰富的实例。图1-16由帮助界面,可以看以MATLAB的强大功能,它可以与主流的软件开发工具进行混合编程开发。与Java和.Net无缝对接。只有勤查帮助或网上查找资料才能起到事半功倍的学习效果。-1-第二章数组与矩阵的概念及其运算在MATLAB中预定了一些符号,用于特定的含义,以下是一些预定义的符号:表2-1符号意义符号意义ans默认变量名pi圆周率eps机器可识别的最小的数flops浮点运算之数inf无穷大NaN非数i或j虚数单位realmax最大的实数realmin最小的实数intmax最大的整数其余的请参看联机帮助系统。2.1.数组与矩阵的概念MATLAB中,数组和矩阵本身是没有区别的,在内存中是一样的。只是针对不同的运算方式,将其为数组运算或矩阵运算。如果运算是按元素对应进行的,则称为数组运算。如果按线性代数学中的方式运算,则称为矩阵运算,如例2-1例2-1数组与矩阵的区别演示。设有矩阵A和B如下:1211,3402AB-2-以数组方式运算方式:1212,/08Inf2ABAB,其中Inf表示无穷大(非数)MATLAB指令:A=[-11;02]%输入的矩阵保存在变量A中A=-1102B=[-11;02]%输入的矩阵保存在变量B中B=-1102A.*B%以数组方式相乘,ans=-1208A./B%以数组方式相除ans=-12Inf2几点说明:1、MATLAB中,矩阵(数组)按元素逐个输入的方法,就是将所有元素放在一对方括号内,行与行之间以分号“;”隔开,每一行中各元素之间以空格或逗号隔开。详细说明参看2.2节内容;2、MATLAB指令输入时,必需在英文状态下输入,否则会出错;3、如果一条指令以分号“;”作为结束符,则运算-3-结果并不显示在CommandWindow窗口中,但保存在Workspace中。如果没有分号,则将结果显示在CommandWindow中;4、百分号“%”表示注释,从%开始到行未为方便人阅读所加的注释,不是指令中的一部分;5、注意数组方式运算有一个小黑点“.”;6、本书中凡MATLAB指令都用加粗字体;7、MATLAB中变量无需要声明就可直接使用,根据赋值符号“=”右则表达式的类型来自动确定左侧的类型。如A=[-11;02],A表示一个2阶矩阵。以矩阵方式运算(即按线性代数中的矩阵运算):12111(1)2011221534023(1)403142311AB112111210.511.5/34023400.533.5AB当然,矩阵的加法和减法两种方式都是一样的,MATLAB指令:A*B%矩阵方式相乘ans=-15-311A/B%矩阵方式相除ans=-1.00001.5000-3.00003.5000-4-注意:如本书中后面内容只提及矩阵,只有当涉及到数组方式的运算时才将矩阵称为数组。2.2.矩阵的创建和操作在MATLAB中,有两种创建矩阵的方法。一是直接按元素逐个输入的方法,如例2-1所示;另一种就是使用MATLAB相关的指令来创建。一、直接输入元素创建直接按元素逐个输入来创建矩阵,就是将所有元素放在一对方括号内,行与行之间以分号“;”隔开,每一行中各元素之间以空格或逗号隔开。只有一行的矩阵称为行向量(也称为一维数组),只有一列的矩阵称为列向量。此方法可创建向量和矩阵。例2-2直接输入创建向量和矩阵演示。vr=[1234]%创建行向量,元素之间以空格隔开vr=1234vc=[1;2;3]%创建列向量,行之间以分号隔开vc=123m23=[123;456]%创建一个2×3行的矩阵m23=123456-5-二、MATLAB指令创建在MATLAB中指令,更多时候也称为函数。可以使用MATLAB内置的函数来创建矩阵(数组)。以下以举例的方式说明。例2-3通过MATLAB指令创建向量和矩阵演示:1、指定起点:步长:终点。如果不指定步长,则将步长默认为1,最后一个元素不一定是终点,这取决于区间长度是否为步长的整数倍。该方法用于创建向量。v=0:0.2:1%以0为起点、1为终点、步长为0.2创建一个数组(行向量)v=00.20000.40000.60000.80001.0000v=0:pi%起点0、终点pi、默认步长1。最后一个元素不是终点。v=01232、linspace(起点,终点,元素个数),等分间隔。该方法用于创建向量。v=linspace(0,pi,3)v=01.57083.1416v=linspace(0,3,5)v=00.75001.50002.25003.00003.特殊矩阵的创建。创建特殊矩阵的常用函数:-6-rand、magic、zeros、ones和eye等,需要深入研究请参看联机帮助。rand('state',0)%把均匀分布伪随机发生器置为0状态v=rand(2,3)%产生一个2×3的随机矩阵v=0.95010.60680.89130.23110.48600.7621m=magic(3)%产生一个3阶魔方矩阵m=816357492zeros(3)%产生一个3阶零矩阵ans=000000000zeros(2,3)%产生一个2×3的零矩阵ans=000000eye(2,3)%产生一个2×3的矩阵,左边2×2是一个单位矩阵ans=100010eye(3)%产生一个3阶单位矩阵ans=100-7-010001ones(2,3)%产生一个元素全为1的2×3阶矩阵ans=111111另外还有其它特殊的矩阵创建函数,如有需要请参看帮助。2.3.矩阵的访问操作以下以举例的方式说明矩阵的访问操作如下:例2-4矩阵访问举例演示:v=[1234567];%生成一个行向量v(3)%查询第三个元素的值ans=3v(3)=23%将第三个元素的值设为23v=12234567v([126])=[111216]%将下标为1、2、6的三元素的值设为11、12、16v=11122345167v(4:end)%查询第4至最后元素之间的所有元素ans=45167v(1:5)%查询第1至5个元素ans=-8-11122345m=[123;456]%产生一个新矩阵mm=123456m(2,3)%查询第2行第3列位置上的元素ans=6m(:,2)%查询第2列元素上所有行的元素ans=25m(2,:)%查询第2行上所有列的元素ans=456m(2,[12])%查询第2行上的第1、2列位置上的元素ans=45m(1,[23])=[8899]%将第1行上的第2、3列上的元素分别设为88和99m=18899456m(2,2)=518%将第2行2列位置上的元素