matlab入门教程.doc

上传人:hw****26 文档编号:3220791 上传时间:2019-05-26 格式:DOC 页数:14 大小:322KB
下载 相关 举报
matlab入门教程.doc_第1页
第1页 / 共14页
matlab入门教程.doc_第2页
第2页 / 共14页
matlab入门教程.doc_第3页
第3页 / 共14页
matlab入门教程.doc_第4页
第4页 / 共14页
matlab入门教程.doc_第5页
第5页 / 共14页
点击查看更多>>
资源描述

1、附录 A MATLAB 工程应用简介一、MATLAB 简介1. MATLAB 的概况MATLAB 是矩阵实验室(Matrix Laboratory)之意。除具备卓越的数值计算能力外,它还提供了专业水平的符号计算,文字处理,可视化建模仿真和实时控制等功能。MATLAB 的基本数据单位是矩阵,它的指令表达式与数学,工程中常用的形式十分相似,故用 MATLAB 来解算问题要比用 C,FORTRAN 等语言完相同的事情简捷得多。MATLAB 包括拥有数百个内部函数的主包和三十几种工具包(Toolbox)。工具包又可以分为功能性工具包和学科工具包。功能工具包用来扩充 MATLAB 的符号计算,可视化建模

2、仿真,文字处理及实时控制等功能.学科工具包是专业性比较强的工具包,控制工具包,信号处理工具包,通信工具包等都属于此类。开放性使 MATLAB 广受用户欢迎。除内部函数外,所有 MATLAB 主包文件和各种工具包都是可读可修改的文件,用户通过对源程序的修改或加入自己编写程序构造新的专用工具包。2. MATLAB 产生的历史背景在 70 年代中期,Cleve Moler 博士和其同事在美国国家科学基金的资助下开发了调用 EISPACK 和LINPACK 的 FORTRAN 子程序库。EISPACK 是特征值求解的 FOETRAN 程序库,LINPACK 是解线性方程的程序库,在当时,这两个程序库代

3、表矩阵运算的最高水平。到 70 年代后期,身为美国 New Mexico 大学计算机系系主任的 Cleve Moler,在给学生讲授线性代数课程时,想教学生使用 EISPACK 和 LINPACK 程序库,但他发现学生用 FORTRAN 编写接口程序很费时间,于是他开始自己动手,利用业余时间为学生编写EISPACK 和 LINPACK 的接口程序。Cleve Moler 给这个接口程序取名为 MATLAB,该名为矩阵(matrix)和实验室(labotatory) 两个英文单词的前三个字母的组合。在以后的数年里,MATLAB 在多所大学里作为教学辅助软件使用,并作为面向大众的免费软件广为流传。

4、1983 年春天,Cleve Moler 到 Standford 大学讲学,MATLAB 深深地吸引了工程师 John Little,他敏锐地觉察到 MATLAB 在工程领域的广阔前景。同年 ,他和 Cleve Moler,Steve Bangert 一起,用 C 语言开发了第二代专业版。这一代的 MATLAB 语言同时具备了数值计算和数据图示化的功能。1984 年,Cleve Moler 和John Little 成立了 Math Works 公司,正式把 MATLAB 推向市场,并继续进行 MATLAB 的研究和开发。在当今 30 多个数学类科技应用软件中,就软件数学处理的原始内核而言,可

5、分为两大类。一类是数值计算型软件,如 MATLAB,Xmath,Gauss 等,这类软件长于数值计算,对处理大批数据效率高; 另一类是数学分析型软件,Mathematica,Maple 等,这类软件以符号计算见长 ,能给出解析解和任意精确解,其缺点是处理大量数据时效率较低。MathWorks 公司顺应多功能需求之潮流 ,在其卓越数值计算和图示能力的基础上,又率先在专业水平上开拓了其符号计算,文字处理,可视化建模和实时控制能力,开发了适合多学科,多部门要求的新一代科技应用软件 MATLAB。经过多年的国际竞争,MATLAB 以经占据了数值软件市场的主导地位。在 MATLAB 进入市场前,国际上的

6、许多软件包都是直接以 FORTRAN、C 语言等编程语言开发的。这种软件的缺点是使用面窄,接口简陋,程序结构不开放以及没有标准的基库,很难适应各学科的最新发展,因而很难推广。MATLAB 的出现,为各国科学家开发学科软件提供了新的基础。在 MATLAB 问世不久的 80 年代中期,原先控制领域里的一些软件包纷纷被淘汰或在 MATLAB 上重建。时至今日,经过 MathWorks 公司的不断完善,MATLAB 已经发展成为适合多学科,多种工作平台的功能强大的大型软件。在国外,MATLAB 已经经受了多年考验。在欧美等高校,MATLAB 已经成为线性代数,自动控制理论,数理统计,数字信号处理,时间

7、序列分析,动态系统仿真等高级课程的基本教学工具;成为攻读学位的大学生,硕士生,博士生必须掌握的基本技能。在设计研究单位和工业部门,2 书名2MATLAB 被广泛用于科学研究和解决各种具体问题。在国内,特别是工程界,MATLAB 一定会盛行起来。可以说,无论你从事工程方面的哪个学科,都能在 MATLAB 里找到合适的功能。目前,MATLAB的最高版本是 2009 年 9 月 13 日发布了 Matlab R2009b,更多详细信息读者可以访问其官方网站:http:/ 的语言特点一种语言之所以能如此迅速地普及,显示出如此旺盛的生命力,是由于它有着不同于其他语言的特点,正如同 FORTRAN 和 C

8、 等高级语言使人们摆脱了需要直接对计算机硬件资源进行操作一样,被称作为第四代计算机语言的 MATLAB,利用其丰富的函数资源,使编程人员从繁琐的程序代码中解放出来。MATLAB 最突出的特点就是简洁。 MATLAB 用更直观的,符合人们思维习惯的代码,代替了 C 和FORTRAN 语言的冗长代码。MATLAB 给用户带来的是最直观,最简洁的程序开发环境。以下简单介绍一下 MATLAB 的主要特点。1)语言简洁紧凑,使用方便灵活,库函数极其丰富。MATLAB 程序书写形式自由,利用丰富的库函数避开繁杂的子程序编程任务,压缩了一切不必要的编程工作。由于库函数都由本领域的专家编写,用户不必担心函数的

9、可靠性。可以说,用 MATLAB 进行科技开发是站在专家的肩膀上。2)运算符丰富。由于 MATLAB 是用 C 语言编写的,MATLAB 提供了和 C 语言几乎一样多的运算符,灵活使用 MATLAB 的运算符将使程序变得极为简短。3)MATLAB 既具有结构化的控制语句(如 for 循环,while 循环,break 语句和 if 语句),又有面向对象编程的特性。4)程序限制不严格,程序设计自由度大。例如,在 MATLAB 里,用户无需对矩阵预定义就可使用。5)程序的可移植性很好,基本上不做修改就可以在各种型号的计算机和操作系统上运行。6)MATLAB 的图形功能强大。在 FORTRAN 和

10、C 语言里,绘图都很不容易,但在 MATLAB 里,数据的可视化非常简单。MATLAB 还具有较强的编辑图形界面的能力。7)MATLAB 的缺点是,它和其他高级程序相比,程序的执行速度较慢。由于 MATLAB 的程序不用编译等预处理,也不生成可执行文件,程序为解释执行,所以速度较慢。8)功能强大的工具箱是 MATLAB 的另一特色。MATLAB 包含两个部分:核心部分和各种可选的工具箱。核心部分中有数百个核心内部函数。其工具箱又分为两类:功能性工具箱和学科性工具箱。功能性工具箱主要用来扩充其符号计算功能,图示建模仿真功能,文字处理功能以及与硬件实时交互功能。功能性工具箱用于多种学科。而学科性工

11、具箱是专业性比较强的,如 control toolbox,signl proceessing toolbox,optimization toolbox 等。这些工具箱都是由该领域内学术水平很高的专家编写的,所以用户无需编写自己学科范围内的基础程序,而直接进行高、精、尖的研究。9)源程序的开放性。开放性也许是 MATLAB 最受人们欢迎的特点。除内部函数以外,所有MATLAB 的核心文件和工具箱文件都是可读可改的源文件,用户可通过对源文件的修改以及加入自己的文件构成新的工具箱。二、用 Matlab 处理矩阵矩阵在 Matlab 中是基本的数据单元,并提供了丰富的矩阵运算处理功能。Matlab 中

12、的矩阵变量名,必须是以字母开头的由字母和数字组成的字符串。1.矩阵的生成1)直接输入创建矩阵。Matlab 中不需要设置矩阵的类型与维数,它们由输入的格式和内容来唯一决定。小矩阵和没有任何规律的矩阵可以通过直接输入元素的方法来创建,矩阵的元素由中括号括起来,同一行元素由逗号或者空格分开,行与行之间由回车或者分号分开,如图 A.1 所示。章名 33图 A.1 矩阵的创建这种方法工作量大且容易出错,因此 Matlab 提供了许多函数和方法可以方便快速地创建矩阵。2)使用冒号创建矩阵。例 A.1 a=-pi:pi;2:8a =-3.1416 -2.1416 -1.1416 -0.1416 0.858

13、4 1.8584 2.85842.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.00002.特殊矩阵线性代数中有若干特殊意义和结构的矩阵,在 Matlab 中可以很容易的通过函数的方式创建它们,见表 A.1。表 A.1 特 殊 矩 阵 的 创 建生成矩阵的函数 说明zeros(i,j) 创建 i 行 j 列的全零矩阵ones(i,j) 创建 i 行 j 列的全 1 矩阵eye(i,j) 创建 i 行 j 列的对角线为 1 的矩阵rand(i,j) 创建 i 行 j 列的(0,1)均布的随机矩阵 创建一个空矩阵3.矩阵的运算这里介绍矩阵的算术运算、分块和转置

14、。假设矩阵 A 和 B 已经进行了预先的定义,则执行命令;得到矩阵 A 和 B 的和矩阵 C;CAB;得到矩阵 A 和 B 的差矩阵 D;D;得到矩阵 A 和 B 的乘积矩阵 F;*E; 当矩阵 A 为实数矩阵时,得到的 F 就是 A 的转置;而当 A 为复数矩阵时,得到的FF 是 A 共轭转置。此外,在矩阵的算术运算中,“除法”是必须特殊考虑和研究的。设 Xb其中 A 为方阵,X 为所要求解的向量,b 为已知的向量。上述问题称为线性方程组,是线性代数讨论的中心问题。使用 Matlab,用一个语句就可以得到该问题的解 ;4 书名4该运算背后的算法请参考相关 Matlab 书籍。 矩阵的分块也很

15、容易用 Matlab 的语言实现,特别是行和列可以被视为特殊的分块矩阵。例如 A(2,:)h和 A(:,3)分别表示 A 的第二行和第三列,而且上述符号可以直接作为向量直接参与计算。假设 H 是一个1010 的矩阵,则 H(:,4:8)表示的是 H 的第四到第八列组成的 105 的矩阵。从下面的例 A.2 读者可以学到另外的创建矩阵的途径:例 A.2 a=1 3 5 7 9;2 4 6 8 10;-2 -3 -4 -5 -6;-4 -5 -6 -7 -8;5 6 7 8 9a =1 3 5 7 92 4 6 8 10-2 -3 -4 -5 -6-4 -5 -6 -7 -85 6 7 8 9继续

16、执行命令 b=a(1 3 5,4)得到的结果是矩阵 a 的第四列的第一、三、五个元素组成的向量,即 b=a(1 3 5,4) b =7-58而如果执行命令 b=a(1 3 5,:)得到的结果是由矩阵 a 的第 1、3、5 行的所有元素组成的矩阵,即 b=a(1 3 5,:)b =1 3 5 7 9-2 -3 -4 -5 -65 6 7 8 9在 Matlab 的语言中“:”是十分常用的。例如X=-10:2:10; X 为 11 维的向量,元素分别为 ;10,86,10Y=0:0.1:2;生成的 Y 为 21 维的向量,元素间的增量为 0.1;同理 z=1:3 2:2:8 6:3:15z =1

17、2 3 2 4 6 8 6 9 12 15三、用 Matlab 绘图计算的可视化是科学与工程计算的主导方向之一,其中绘制图形是表达计算结果的重要手段之一。Matlab 提供了许多可以选用的图形工具,这里简单介绍较常用的几个。1.二维图形函数Plot 命令是最常用的二维绘图命令。如 plot(x,y,-)将向量 x 和 y 对应的元素定义的点依次用实线连接起来,这里要求 x 和 y 的向量维数必须相同。若 x 和 y 为矩阵,则将按列依次处理。例 A.3 x=1:pi/20:2*pi; y=sin(x); plot(x,y,*)运行后其结果如图 A.2 所示章名 55相关绘图辅助函数图 A.2

18、二维绘图函数举例Matlab 还提供了一些绘图辅助函数,用来对绘出的图形进行进一步的控制:(1) title() 在图形的上方显示用户指定的图形标题;(2) xlabel(),ylabel() 分别在 x 和 y 轴显示用户指定的文字信息;(3) grid on 将在图形中显示虚线网格;(4) text(x,y,) 在用户指定的坐标位置显示文字信息; 例 A.3 x=0:pi/20:2*pi; y=sin(x); plot(x,y,-);title(正弦函数曲线 ); xlabel(角度变量(rad); ylabel(对应的正弦值); text(3.16,0,正弦值为零);则运行后的结果如图

19、A.3 所示,更多的格式控制请参考 Matlab 教材。图 A.3 辅助函数的应用2.三维图形函数三维立体图形在 Matlab 中的显示也不难,例如对于 sinc 函数6 书名62sin()Xyz可以通过如下几行命令绘制其图形:例 A.4 X,Y = meshgrid(-8:.5:8); R = sqrt(X.2 + Y.2) + eps;Z = sin(R)./R;mesh(X,Y,Z,EdgeColor,black);上述命令在区域 上绘制该函数的图形,其中 eps 是用来防止出现除零的错误。,8,xy运行后其图形如图 A.4 所示。图 A.4 三维绘图函数举例四、应用 Matlab 编程

20、Matlab 语言称为第四代编程语言,程序简洁、可读性很强而且调试十分容易,是 matlab 重要组成部分。含 matlab 语言代码的文件称为 m 文件,其扩展名为 m。用户如想灵活应用 matlab 去解决实际问题,充分调用 matlab 的科学技术资源,就需要编辑 m 文件包编辑。m 文件通过各种文本编辑器进行编辑。1.m 文件的类型m 文件的语法类似于 c 语言,但又有其自身特点。它只是一个简单的 ASCII 码文本文件,执行程序时逐行解释运行程序,matlab 是解释性的编程语言。m 文件有两种类型 :独立的 m 文件又称命令文件;可调用 m 文件 又称函数文件。其中函数文件又分为

21、Matlab 系统的内部函数文件和用户编写的函数文件。1.1 命令文件最简单的 m 文件命令文件实际上是一串指令的集合,与在命令窗口逐行执行文件中的所有指令,其结果是一样的。没有输入输出参数。例如,在 Matlab 命令窗口输入:edit simple.m; 回车,将弹出图 A.5 所示的 m 文件编辑窗口,不论是命令文件还是函数文件都在此窗口内进行编辑和调试。保存后,在命令窗口执行命令:simple 将绘制出与图 A.4 完全一样的图形。1.2 Matlab 内置的函数文件Matlab 自定义的函数文件称内置函数文件。调用内置函数的方法:使用函数名并给出相应的入口、出口参数即可。如,例 A.

22、3 中的命令中就包含对内置的 sin.m 文件的调用。又如 sqrt(x) 求 x 的平方根; abs(x)求 x 的绝对值; det(a)求矩阵行列式的值等等。 Matlab 拥有大量的内置数学函数,供我们在数值运章名 77算和符号运算中调用。图 A.5 命令 m 文件的创建1.3 用户自定义的函数文件matlab 用户可以根据需要编辑自己的 m 文件,它们可以像库函数一样方便的调用,从而极大地扩展了 matlab 的能力。对于某一类特殊问题,如果创建了许多 m 函数文件,则可形成新的工具箱。这种用matlab 语言创建定义新的 matlab 函数的功能,正体现了 matlab 语言强大的扩

23、展功能。2. 函数 m 文件的格式函数 m 文件的格式:function 返回变量= 函数名(输入变量)注释说明语句段程序语句段特定规则:函数 m 文件第一行必须以单词 function 作为引导词,必须遵循如下形式:1) function =()2)m 文件的文件名必须是 .m。程序中的变量均为局部变量,不保存在工作空间中。其变量只在函数运行期间有效。例 A.5 edit sinplot.m在程序编辑窗口中,键入如图 A.6 所示的程序代码后保存图 A.6 函数文件的创立于调用8 书名8在命令窗口中键入: a=0; b=2*pi; c=sinplot(a,b);则程序运行后将绘制与图 A.3

24、 类似的图形,仅 x 轴的范围由输入参数 a 和 b 指定。matlab 语言的程序结构与其它高级语言是一致的,分为顺序结构、循环结构和分支结构,限于篇幅所限,本文不予详细介绍。五、Matlab 优化工具箱利用 Matlab 的优化工具箱,可以求解线性规划、非线性规划和多目标规划问题。具体而言,包括线性、非线性最小化,最大最小化,二次规划,半无限问题,线性、非线性方程(组)的求解,线性、非线性的最小二乘问题。另外,该工具箱还提供了线性、非线性最小化,方程求解,曲线拟合,二次规划等问题中大型课题的求解方法,为优化方法在工程中的实际应用提供了更方便快捷的途径。本文在此仅做简单的介绍。1.Matla

25、b 求解优化问题所用到的主要函数优化工具箱中的函数包括下面几类最小化函数表 A.1 最 小 化 函 数 表优化函数 用于求解的优化问题描述fgoalattain 多目标达到问题fminbnd 有边界的标量非线性最小化fmincon 有约束的非线性最小化fminimax 最大最小化fminsearch, fminunc 无约束非线性最小化fseminf 半无限问题linprog 线性课题quadprog 二次课题方程求解函数表 A.2 方 程 求 解 函 数 表函数名称 用于求解的方程类型描述 线性方程组求解fsolve 非线性方程组求解fzero 标量非线性方程求解实用设置函数表 A.3 用

26、于 对 优 化 函 数 进 行 设 置 的 函 数 表函数名称 用于求解的方程类型描述optimset 设置所调用的优化函数里面的相关参数optimget 获得被调用优化函数的参数调用信息章名 992. 应用 Fsolve 函数求解非线性方程组优化工具箱中提供了 fsolve 函数用于求解非线性方程组,其调用语法格式如下:x = fsolve(fun,x0)x = fsolve(fun,x0,options)x = fsolve(fun,x0,options,P1,P2, . )x,fval = fsolve(.)x,fval,exitflag = fsolve(.)x,fval,exitfl

27、ag,output = fsolve(.)x,fval,exitflag,output,jacobian = fsolve(.)上述调用格式的意义如下:x = fsolve(fun,x0) 从初始点 x0 出发,求有参数 fun 描述的非线性方程组;x = fsolve(fun,x0,options) 根据 options 中的相关参数的设定从初始点 x0 出发,求有参数 fun 描述的非线性方程组;x = fsolve(fun,x0,options,P1,P2,.) 在这种调用格式中,允许 fun 所描述的非线性方程组中含有其它与问题相关的参数输入。x,fval = fsolve(fun,x

28、0) 计算结束后,将解向量 x 带入方程组中,将值返回给 fval。x,fval,exitflag = fsolve(.) 给出计算结果的有效性的信息,其意义同 finunc 中的介绍。x,fval,exitflag,output = fsolve(.)给出计算过程的相关信息,其意义同 finunc 中的介绍。2.1 应用举例设需要求如下非线性方程组: 1212xe若要用 fsolve 函数来求解此非线性方程组,需要如下步骤。1)编制其描述函数的 m 文件将上面的非线性方程变换成如下形式 12120xe并编制 myfun.m 文件,并保存,代码如下。function F = myfun(x)F

29、 (1)=2*x(1) - x(2) - exp(-x(1);F(2)= -x(1) + 2*x(2) - exp(-x(2);2)调用 fsolve 函数进行求解对应的代码如下:x0 = -5; -5; % 给定一个初始猜测点options=optimset(Display,iter); % 要求运算后输出迭代计算过程x,fval = fsolve(myfun,x0,options) % 调用函数进行求解3)结果的输出程序运行后,输出结果如下:After 33 function evaluations, a zero is found. Iteration Func-count f(x) s

30、tep optimality Norm of First-order Trust-region radius0 3 23535.6 2.29e+004 11 6 6001.72 1 5.75e+003 12 9 1573.51 1 1.47e+003 110 书名103 12 427.226 1 388 14 15 119.763 1 107 15 18 33.5206 1 30.8 16 21 8.35208 1 9.05 17 24 1.21394 1 2.26 18 27 0.016329 0.759511 0.206 2.59 30 3.51575e-006 0.111927 0.00

31、294 2.510 33 1.64763e-013 0.00169132 6.36e-007 2.5Optimization terminated successfully:First-order optimality is less than options.TolFunx =0.56710.5671fval =1.0e-006 *-0.4059-0.40593.无约束优化问题求解优化工具箱中提供了函数 fminunc 用于进行无约束优化问题求解,其语法格式如下:x = fminunc(fun,x0)x = fminunc(fun,x0,options)x = fminunc(fun,x0,

32、options,P1,P2,.)x,fval = fminunc(.)x,fval,exitflag = fminunc(.)x,fval,exitflag,output = fminunc(.)x,fval,exitflag,output,grad = fminunc(.)x,fval,exitflag,output,grad,hessian = fminunc(.)上述格式调用的意义如下:x = fminunc(fun,x0)给定初值 x0,求 fun 函数的局部极小点 x。x0 根据具体问题可以是标量或向量。x = fminunc(fun,x0,options)用 options 参数中

33、指定的参数的设置值调用 fminunc 求函数的局部极小点x。x = fminunc(fun,x0,options,P1,P2,)将问题参数 p1、p2 等直接输给目标函数 fun,若将 options 参数设置为空矩阵,作为 options 参数的缺省值。此调用格式适合于目标函数需要除设计变量以外的其它与问题实际相关的参数输入的场合,p1、p2 可以是向量或标量。x,fval = fminunc()将最优解 x 处目标函数的值返回到 fval 参数中。x,fval,exitflag = fminunc()返回 exitflag 值,描述函数求得的最优解的有效性。x,fval,exitflag

34、,output = fminunc()求解的同时,增加对包含优化信息的结构输出。x,fval,exitflag,output,grad = fminunc()将解 x 处 fun 即目标函数的梯度值返回到 grad 参数中。x,fval,exitflag,output,grad,hessian = fminunc()将解 x 处目标函数的 Hessian 矩阵信息返回到 hessian参数中。函数调用中,部分重要的输入输出参数的主要意义及用法如下:1)fun为目标函数的句柄。即需要被进行最优化计算的目标函数。fun 函数需要输入标量参数 x,返回 x处的目标函数标量值 f。可以将简单 fun 函数指定为内联函数,如

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育教学资料库 > 精品笔记

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。