Matlab软件应用与开发.ppt

上传人:pu****.1 文档编号:569427021 上传时间:2024-07-29 格式:PPT 页数:125 大小:1.31MB
返回 下载 相关 举报
Matlab软件应用与开发.ppt_第1页
第1页 / 共125页
Matlab软件应用与开发.ppt_第2页
第2页 / 共125页
Matlab软件应用与开发.ppt_第3页
第3页 / 共125页
Matlab软件应用与开发.ppt_第4页
第4页 / 共125页
Matlab软件应用与开发.ppt_第5页
第5页 / 共125页
点击查看更多>>
资源描述

《Matlab软件应用与开发.ppt》由会员分享,可在线阅读,更多相关《Matlab软件应用与开发.ppt(125页珍藏版)》请在金锄头文库上搜索。

1、Matlab软件应用与开发软件应用与开发主讲教师:高媛媛联系电话:13990029507电子邮件:课程安排课程安排Matlab的操作基础Matlab的矩阵及其运算Matlab的程序设计Matlab的符号运算Matlab的科学绘图Matlab的在数值分析、优化中的应用第第1章章 MATLAB的操作基础的操作基础1.1 MATLAB概述概述1.2 MATLAB的安装的安装1.3 MATLAB集成环境集成环境1.4 MATLAB帮助系统帮助系统1.1 MATLAB概述概述1.1.1 MATLAB的简介的简介 Matlab是Matrix(矩阵)和Laboratory(实验室)两个英语单词的前3个字母的

2、组合。它一开始是美国新墨西哥大学计算机系主任Clever Moler博士在20世纪70年代后期为Linpack和Eispack这两个矩阵运算的软件包编写的接口程序,目的是方便所设立的线性代数课程的教学,当时为这个接口程序取了一个名字叫做Matlab。在以后的一段时间,Matlab在很多大学里作为教学辅助软件使用。1983年,工程师John Little和Clever Moler博士,用C语言开发了Matlab的第二代专业版本,这一版本同时具有了数值计算和数据可视化的功能。 Matlab主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。1.1.2 MAT

3、LAB的主要功能的主要功能1)数值计算和符号计算功能数值计算和符号计算功能MATLAB以矩阵作为数据操作的基本单位,还提以矩阵作为数据操作的基本单位,还提供了十分丰富的数值计算函数。供了十分丰富的数值计算函数。MATLAB和著名的符号计算语言和著名的符号计算语言Maple相结合,相结合,使得使得MATLAB具有符号计算功能。具有符号计算功能。2)绘图功能(数据模拟)绘图功能(数据模拟)MATLAB提供了两个层次的绘图操作:一种是对提供了两个层次的绘图操作:一种是对图形句柄进行的低层绘图操作,另一种是建立在图形句柄进行的低层绘图操作,另一种是建立在低层绘图操作之上的高层绘图操作。低层绘图操作之上

4、的高层绘图操作。 1.1.2 MATLAB的主要功能的主要功能3)编程语言编程语言 MATLAB具有程序结构控制、函数调用、数据结具有程序结构控制、函数调用、数据结构、输入输出、面向对象等程序语言特征,而且构、输入输出、面向对象等程序语言特征,而且简单易学、编程效率高。简单易学、编程效率高。 联合编程:与联合编程:与.NET/Excel/C/C+等其他软件环境等其他软件环境联合编程联合编程 1.1.2 MATLAB的主要功能的主要功能4) MATLAB工具箱工具箱MATLAB包含两部分内容:基本部分和各种可选包含两部分内容:基本部分和各种可选的工具箱。的工具箱。MATLAB工具箱分为两大类:功

5、能性工具箱和学工具箱分为两大类:功能性工具箱和学科性工具箱。科性工具箱。 可视化建模与仿真可视化建模与仿真 1.1.2 MATLAB的主要功能的主要功能1.2 MATLAB的安装的安装 安装安装MATLAB 7.0系统,需运行系统自带的安装系统,需运行系统自带的安装程序程序setup.exe,可以按照安装提示依次操作。,可以按照安装提示依次操作。1.3 MATLAB集成环境集成环境1.3.1 命令窗口命令窗口 一般来说,一个命令行输入一条命令,命令行以一般来说,一个命令行输入一条命令,命令行以回车回车结束。但一个命令行也可以输入若干条命令,结束。但一个命令行也可以输入若干条命令,各命令之间以各

6、命令之间以逗号逗号分隔,若前一命令后带有分隔,若前一命令后带有分号分号,则逗号可以省略。例如则逗号可以省略。例如p=15,m=35p=15;m=351.3.1 命令窗口命令窗口 如果一个命令行很长,一个物理行之内写不下,如果一个命令行很长,一个物理行之内写不下,可以在第一个物理行之后加上可以在第一个物理行之后加上3个小黑点并按下回个小黑点并按下回车键,然后接着下一个物理行继续写命令的其他车键,然后接着下一个物理行继续写命令的其他部分。部分。3个小黑点个小黑点()称为续行符称为续行符,即把下面的物,即把下面的物理行看作该行的逻辑继续。理行看作该行的逻辑继续。在在MATLAB里,有很多的控制键和方

7、向键可用于里,有很多的控制键和方向键可用于命令行的编辑。命令行的编辑。home:移动光标到左上角clc:清除命令窗口1.3.1 命令窗口命令窗口1.3.2 工作空间窗口工作空间窗口工作空间是MATLAB用于存储各种变量和结果的内存空间。在该窗口中显示工作空间中所有变量的名称、大小、字节数和变量类型说明,可对变量进行观察、编辑、保存和删除。clear:清除当前工作空间的变量例例1.1 clear %清除当前工作空间的所有变量 clear var1 var2 %清除变量var1、var2 clear a* %清除以a开头的变量who:查看当前工作空间的所有变量(信息简短)whos:作用同who。给

8、出变量的大小、数据类型等具体内容。1.3.3 当前目录窗口和搜索路径当前目录窗口和搜索路径1)当前目录浏览器 Matlab将许多内部函数放在不同的目录下,在调用函数时,首先查看当前目录,然后查看搜索路径中的目录。任何需要执行的文件都必须放在当前目录或搜索路径中,文件才能顺利运行。在命令窗口输入cd命令改变当前目录。例例1.2 将用户目录c:mydir设置为当前目录,可在命令窗口输入命令: cd c:mydir改变当前目录快速而又高效的方法是使用桌面上的目录工具条。 2)搜索路径 文件在执行时必须位于当前目录或者是搜索路径中。使用path命令可以查看Matlab默认的搜索路径。例例1.3 pat

9、h MATLABPATHD:MATLAB701toolboxmatlabgeneralD:MATLAB701toolboxmatlabops设置搜索路径的方法有:设置搜索路径的方法有: (1) 用用path命令设置搜索路径。命令设置搜索路径。例例1.4 将用户目录将用户目录c:mydir加到搜索路径下,可在命加到搜索路径下,可在命令窗口输入命令:令窗口输入命令:path(path,c:mydir)(2)用对话框设置搜索路径用对话框设置搜索路径 在在MATLAB的的File菜单中选菜单中选Set Path命令或在命令命令或在命令窗口执行窗口执行pathtool命令,将出现搜索路径设置对话命令,将

10、出现搜索路径设置对话框。通过框。通过Add Folder或或Add with Subfolder命令按命令按钮将指定路径添加到搜索路径列表中。钮将指定路径添加到搜索路径列表中。1.3.4命令历史记录窗口命令历史记录窗口在默认设置下,历史记录窗口中会自动保留自安装在默认设置下,历史记录窗口中会自动保留自安装起所有用过的命令的历史记录,并且还标明了使用起所有用过的命令的历史记录,并且还标明了使用时间,从而方便用户查询。而且,时间,从而方便用户查询。而且,通过双击命令可通过双击命令可进行历史命令的再运行进行历史命令的再运行。如果要清除这些历史记录,。如果要清除这些历史记录,可以选择可以选择Edit菜

11、单中的菜单中的Clear Command History命令。命令。1.4 MATLAB帮助系统帮助系统 进入帮助窗口可以通过以下进入帮助窗口可以通过以下3种方法:种方法:(1) 单击单击MATLAB主窗口工具栏中的主窗口工具栏中的Help按钮按钮。(2) 在命令窗口中输入在命令窗口中输入helpwin、helpdesk或或doc。(3) 选择选择Help菜单中的菜单中的“MATLAB Help”选项选项。1.4.1 帮助窗口 MATLAB帮助命令包括help、lookfor以及模糊查以及模糊查询询。1)help命令在MATLAB 7.0命令窗口中直接输入help命令将会显示当前帮助系统中所包

12、含的所有项目,即搜索路径中所有的目录名称。同样,可以通过help加函数名来显示该函数的帮助说明。1.4.2 帮助命令帮助命令 2)lookfor命令命令help命令只搜索出那些关键字完全匹配的结果,命令只搜索出那些关键字完全匹配的结果,lookfor命令对搜索范围内的命令对搜索范围内的M文件进行关键字搜文件进行关键字搜索,条件比较宽松。索,条件比较宽松。lookfor命令只对命令只对M文件的第一行进行关键字搜索。文件的第一行进行关键字搜索。若在若在lookfor命令加上命令加上-all选项,则可对选项,则可对M文件进行文件进行全文搜索。全文搜索。 3)模糊查询模糊查询MATLAB 6.0以上的

13、版本提供了一种类似模糊查以上的版本提供了一种类似模糊查询的命令查询方法,用户只需要输入命令的前几询的命令查询方法,用户只需要输入命令的前几个字母,然后按个字母,然后按Tab键,系统就会列出所有以这几键,系统就会列出所有以这几个字母开头的命令。个字母开头的命令。 在帮助窗口中选择演示系统在帮助窗口中选择演示系统(Demos)选项卡,然后选项卡,然后在其中选择相应的演示模块,或者在命令窗口输在其中选择相应的演示模块,或者在命令窗口输入入Demos,或者选择主窗口,或者选择主窗口Help菜单中的菜单中的Demos子菜单,打开演示系统。子菜单,打开演示系统。1.4.3 演示系统演示系统 WWW网站

14、 Matlab中文论坛 http:/ Matlab中国论坛1.4.4 Matlab的网络资源的网络资源2.1 矩阵的建立矩阵的建立2.2 矩阵的抽取、扩展和删除矩阵的抽取、扩展和删除2.3矩阵的运算矩阵的运算2.4字符串和数组字符串和数组2.5矩阵特征参数矩阵特征参数第第2章章 Matlab的的矩阵及其运算矩阵及其运算2.1 矩阵的建立矩阵的建立2.1.1 直接输入法直接输入法最简单的建立矩阵的方法是从键盘直接输入矩阵的元素。具体方法如下:将矩阵的元素用方括号括起来,按矩阵行的顺序输入各元素,同一行的各元素之间用空格或逗号分隔,不同行的元素之间用分号分隔。 2.1 矩阵的建立2.1.2 冒号法

15、冒号法 其基本格式为: X=初值:增量:终值 返回值X是从初值开始,以增量为步长,直到不超过终值的所有元素所构成的向量。默认步长为1,可以省略不写。例例 2.1 a=1:1.5:8a= 1.0000 2.5000 4.0000 5.5000 7.0000a=3:-pi:-5a = 3.0000 -0.1416 -3.28322.1.3 调用函数调用函数linspace或或logspace函数函数linspace(a,b,n)返回以a为起点、b为终点的等间距的共n个元素的数组。函数logspace与linspace类似,它相当于在linspace命令的基础上再对每个元素做10的指数幂运算。例例2

16、.2 linspace(0,1,6)ans = 0 0.2000 0.4000 0.6000 0.8000 1.0000logspace(0,1,6)ans = 1.0000 1.5849 2.5119 3.9811 6.3096 10.00002.1 矩阵的建立矩阵的建立 注意:注意:列向量和行向量之间可以通过转置符 互相转换。不过需要注意的是,对于复数向量,转置符的作用是复共轭转置。符号 . 是对于复数向量的转置运算 。例2.3 a=1:1:3; %定义行向量 b=a %转置成列向量b= 1 2 3 c=a+a*i %创建复数数组c= 1.0000+1.0000i 2.0000+2.000

17、0i 3.0000+3.0000i d=c %复共轭转置d = 1.0000 - 1.0000i 2.0000 - 2.0000i 3.0000 - 3.0000i e=c. %转置e = 1.0000 + 1.0000i 2.0000 + 2.0000i 3.0000 + 3.0000i1)通过下标引用矩阵的元素)通过下标引用矩阵的元素 采用矩阵元素的序号(采用矩阵元素的序号(按列排序按列排序)来引用)来引用 例例2.4 A=1,2,3;4,5,6; A(3) A(2,3)注意注意: 序号与下标是一一对应的,以序号与下标是一一对应的,以mn矩阵矩阵A为例,为例,矩阵矩阵 元素元素A(i,j)

18、的序号为的序号为(j-1)*m+i。x(n)表示数组中的第n个元素。2.2矩阵的抽取、扩展和删除矩阵的抽取、扩展和删除2.2.1矩阵的抽取矩阵的抽取2) 利用冒号表达式获得子矩阵利用冒号表达式获得子矩阵 A(:,j)表示取表示取A矩阵的第矩阵的第j列全部元素;列全部元素; A(i,:)表示表示A矩阵第矩阵第i行的全部元素;行的全部元素; A(i,j)表示取表示取A矩阵第矩阵第i行、第行、第j列的元素列的元素 A(i:i+m,:)表示取表示取A矩阵第矩阵第ii+m行的全部元素;行的全部元素; A(:,k:k+m)表示取表示取A矩阵第矩阵第kk+m列的全部元素列的全部元素; A(i:i+m,k:k

19、+m)表示取表示取A矩阵第矩阵第ii+m行内,并在第行内,并在第kk+m列中的所有元素。列中的所有元素。 此外,还可利用一般向量和此外,还可利用一般向量和end运算符来表示矩运算符来表示矩阵下标,从而获得子矩阵。阵下标,从而获得子矩阵。end表示某一维的末尾元表示某一维的末尾元素下标。素下标。例2.5 u=1:3;4:6;7:9 %定义数组u = 1 2 3 4 5 6 7 8 9 v=u(:,1,3) %提取u的第一列、第三列元素v = 1 3 4 6 7 9由方括号中的小矩阵或向量建立起来。由方括号中的小矩阵或向量建立起来。例例2.6 u=1:3;4:6;7:9 %输入输入3*3的二维数组

20、的二维数组u = 1 2 3 4 5 6 7 8 9 u(4,:)=10:12 %扩展数组扩展数组u的行的行u = 1 2 3 4 5 6 7 8 9 10 11 12 u(:,4)=ones(4,1) %扩展数组扩展数组u的列的列u = %ones(m,n)生成生成m行行n列全列全1的数组的数组 1 2 3 1 4 5 6 1 7 8 9 1 10 11 12 1 2.2.2 矩阵的扩展矩阵的扩展 利用空矩阵删除矩阵的元素利用空矩阵删除矩阵的元素在在MATLAB中,定义中,定义为空矩阵。给变量为空矩阵。给变量X赋空赋空矩阵的语句为矩阵的语句为X=。注意,。注意,X=与与clear X不同,不

21、同,clear是将是将X从工作空间中删除,而空矩阵则存在从工作空间中删除,而空矩阵则存在于工作空间中,只是维数为于工作空间中,只是维数为0。例2.7 u = 1 2 3 10 11 12 u(:)= %删除u的所有元素 u = size(u) %返回数组(矩阵)u的大小 ans = 0 02.2.3矩阵的删除矩阵的删除2.3矩阵的运算矩阵的运算两个矩阵的加减运算必须满足下列两个条件之一:两个矩阵的加减运算必须满足下列两个条件之一:(1)维数相同,即行数和列数分别相同。维数相同,即行数和列数分别相同。(2)其中一个为标其中一个为标量。量。2.3.1 矩阵加减运算矩阵加减运算例例2.8 A=pas

22、cal(3) A = 1 1 1 1 2 3 1 3 6 B=ones(3); %生成生成3*3的元素全为的元素全为1的矩阵的矩阵 X=A+BX = 2 2 2 2 3 4 2 4 7 Y=A+1 %结果同结果同X=A+B2.3.2 矩阵乘法矩阵乘法 矩阵乘法运算符为矩阵乘法运算符为*。矩阵。矩阵A*B要有意义,必须要有意义,必须满足下列条件之一:满足下列条件之一:(1)矩阵矩阵A的列数等于矩阵的列数等于矩阵B的行数。的行数。(2)其中一个为标量。其中一个为标量。2.3.3矩阵的除法矩阵的除法在在MATLAB中,有两种矩阵除法运算:中,有两种矩阵除法运算:和和/,分别表示左除和右除,分别表示左

23、除和右除AB等效:等效:inv(A)*B,B/A等效:等效:B*inv(A)。注意:左除和右除表示两种不同的除数矩阵和被除注意:左除和右除表示两种不同的除数矩阵和被除数矩阵的关系。数矩阵的关系。 对于矩阵运算:对于矩阵运算:ABB/A。 对于标量运算:对于标量运算:A/a=aA2.3.4矩阵的乘方矩阵的乘方 一个矩阵的乘方运算可以表示成一个矩阵的乘方运算可以表示成Ax,要求,要求A为方为方阵,阵,x为标量。为标量。2.3.5矩阵的点运算矩阵的点运算 在在MATLAB中,有一种特殊的运算,因为其运算中,有一种特殊的运算,因为其运算符是在有关算术运算符前面加点,所以叫点运算。符是在有关算术运算符前

24、面加点,所以叫点运算。 点运算符有点运算符有.*、./、.和和.。 两矩阵进行点运算是指它们的对应元素进行相关两矩阵进行点运算是指它们的对应元素进行相关运算,要求两矩阵的维参数相同。运算,要求两矩阵的维参数相同。2.4 字符串和数组字符串和数组在Matlab中的字符串一般是ASCII值的数组数组。它作为字符串表达式进行显示。例例2.92.9 建立一个字符串向量,然后对该向量做如下建立一个字符串向量,然后对该向量做如下处理:处理:(1) (1) 取第取第1 15 5个字符组成的子字符串。个字符组成的子字符串。(2) (2) 将字符串倒过来重新排列。将字符串倒过来重新排列。(3) (3) 将字符串

25、中的小写字母变成相应的大写字母,将字符串中的小写字母变成相应的大写字母,其余字符不变。其余字符不变。(4) (4) 统计字符串中小写字母的个数。统计字符串中小写字母的个数。命令如下:命令如下:ch=ABc123d4e56Fg9;subch=ch(1:5) %取子字符串取子字符串revch=ch(end:-1:1) %将字符串倒排将字符串倒排k=find(ch=a&ch var=rand(3,4,5); %生成3*4*5大小的随机数 size(var)ans = 3 4 5 length(var) %作用同max(size(var)ans = 5 ndims(var) %作用同length(si

26、ze(var)ans = 3diag(A):设A为m*n矩阵,产生一具有min(m,n)个元素的列向量diag(A,k):提取矩阵第k条对角线的元素 diag(V) :设V为具有m个元素的向量,产生一m*m对角矩阵, 主对角线元素即为向量V的元素diag(V,k):产生一个n*n(n=m+k)对角阵,其中第m条对角线的元素即为向量V的元素triu(A)、tril(A):求矩阵A的上三角阵、下三角阵rot90(A,k) :矩阵A旋转90o的k倍,当k为1时可省略 fliplr(A)、flipud(A):矩阵A左右翻转、上下翻转 inv(A):方阵A的逆矩阵pinv(A):求非方阵,或者非满秩的方

27、阵A的伪逆矩阵 rank(A):矩阵A的秩trace(A):矩阵的迹.等于矩阵的对角线元素之和,亦矩阵的特征值之和 E=eig(A):矩阵A的全部特征值,构成向量E V,D=eig(A):矩阵A的特征值构成对角阵D,并求A的特征向量构成V的列向量 det(A):矩阵A的行列式第三章第三章 Matlab的程序设计的程序设计3.1常量和变量常量和变量3.2运算符运算符3.3系统函数系统函数3.4M文件文件3.5程序的控制结构程序的控制结构3.6程序的编写技巧程序的编写技巧3.1变量和常量变量和常量 Matlab为特定的常数预留了一些名称,这些常量也可以重新赋值。常量在工作空间不能直接看到,使用者可

28、直接调用。 常量名 描述常量名描述i或j基本虚数单位eps系统的浮点精度realmax系统能表示的最大数值realmin系统能表示的最小数值inf无限大pi圆周率nargin函数的输入参数个数nargout函数的输出参数个数nan或NaN非数值3.1.1 常量常量 在Matlab中,变量分为局部变量和全局变量。变量名由一个字母开头,后面可以跟字母、数字、下划线等。在Matlab中,变量区分大小写。在M文件中,变量在使用前无需定义维数和每维的大小,但把一个变量赋给另一个变量时,要求赋值号右边的变量有值。 在M文件中定义的变量是局部变量,其作用域仅在本函数,仅能被本函数调用。全局变量定义后,能被其

29、他函数调用,在命令窗口也可以调用。因此,可以在命令窗口或任意一个函数中改变全局变量的值。全局变量用global定义。如定义全局变量a,b:global a b。3.1.2 变量变量3.2运算符运算符Matlab的算术运算符可按优先级由低到高分为5级,每一级内优先级相同,运算时从左向右结合。各级所包含的运算符如下:(1)转置符(.)、幂符(.)、复共轭转置()、矩阵幂符()。(2)标量加(+)、标量减(-)。(3)向量乘法(.*)、向量右除(./)、向量左除(.)、矩阵乘法(*)、矩阵右除(/)、矩阵左除()。(4)加法(+)、减法(-)。(5)冒号运算符。3.2.1算术运算符算术运算符3.2.

30、2 关系运算符关系运算符关系运算符 小于 大于= 大于或等于= 等于= 不等于逻辑运算符& 逻辑与A&B and(A,B)| 逻辑或A|B or(A,B) 逻辑非A not(A)Xor 逻辑异或3.2.3逻辑运算符逻辑运算符3.3 .1逻辑函数逻辑函数all 测试是否所有元素都非0any 测试是否存在非零元素exist 检查文件或变量是否存在find 搜索非零元素的索引和值ischar 测试是否为字符串数组,是则返回1isempty 测试是否是空数组,是则返回1isfinite 数组的元素有限时,返回数组的相应位置为1ishold 若“hold”命令处于“on”状态时,则返回1isinf 数组

31、的元素无穷大时,返回数组的相应位置为1isletter 数组的元素为字母时,返回数组的相应位置为1isreal 参数无虚部,返回1isspace 元素为空格字符,返回1isstr 参数为字符串,返回13.3 系统函数系统函数3.3.2 数学函数数学函数3.4 M文件文件Matlab语言为解释性程序设计语言,程序中的语句边解释边执行。Matlab是用C语言编写的,具有C语言自由、灵活、简洁的风格。使用Matlab书写程序,形式非常自由,而且利用丰富的库函数,避免了复杂的子程序编写。 M文件包含两类:命令文件和函数文件。前者不要求输入参数,也不返回任何参数;而后者可以输入参数,也可以返回参数。命令

32、文件只对工作空间进行操作;而函数文件的变量为局部变量,只有输入、输出的变量被保留在工作空间。3.4.1命令文件命令文件若要一次执行大量的Matlab命令,可将这些命令编写在一个扩展名为.m的文件中,并在Matlab命令输入窗口键入此文件名即可。例例3.1:分分别别建建立立命命令令文文件件,将将华华氏氏温温度度f转转换换为为摄摄氏氏温温度度c。首先建立命令文件并以文件名首先建立命令文件并以文件名f2c.m存盘。存盘。clear; %清除工作空间中的变量清除工作空间中的变量f=input(Input Fahrenheit temperature:);c=5*(f-32)/9然后在然后在MATLAB

33、的命令窗口中输入的命令窗口中输入f2c,将会执行该,将会执行该命令文件,执行情况为:命令文件,执行情况为:Input Fahrenheit temperature:73c = 22.77783.4.1命令文件命令文件注:f2c.m的第一行以%开头的行是注解,可以使程序易于理解与管理。一般地,第一注解行通常用来简短说明此M文件的功能,使用help f2c命令可查看该注释; 命令窗口输入whos查看工作空间的变量,可以发现执行时所建立的变量全部保留在工作空间中。 一行代码过长时使用符号“”续行符连接3.4.2函数文件函数文件函数文件 的5个组成部分函数题头:指函数的定义行,是函数语句的第一行,在该

34、行中将定义函数名、输入变量列表及输出变量列表等。 HI行:指函数帮助文本的第一行,为该函数文件的帮助主题,当使用lookfor命令时,可以查看到该行信息。 帮助信息:这部分提供了函数的完整的帮助信息,包括HI之后至第一个可执行行或空行为止的所有注释语句,通过MATLAB语言的帮助系统查看函数的帮助信息时,将显示该部分。 函数体;指函数代码段,也是函数的主体部分。 注释部分:指对函数体中各语句的解释和说明文本,注释语句是以%引导的。 3.4.2函数文件函数文件例例3.2:编写函数文件求半径为编写函数文件求半径为r的圆的面积和周长。的圆的面积和周长。 函数文件如下:函数文件如下: function

35、 s,p=fcircle(r)%CIRCLE calculate the area and perimeter of a circle of radii r%r 圆半径圆半径%s 圆面积圆面积%p 圆周长圆周长%2008年年3月月15日编日编s=pi*r*r;p=2*pi*r;函数调用的一般格式是:函数调用的一般格式是:输出实参表输出实参表=函数名函数名(输入实参表输入实参表)在命令窗口输入在命令窗口输入:s,p=fcircle(5) 回车运行将得到回车运行将得到: s = 78.5398 p = 31.41593.5程序的控制结构程序的控制结构1)数据的输出数据的输出 MATLAB提供的命令

36、窗口输出函数主要有提供的命令窗口输出函数主要有disp函数,其函数,其调用格式为调用格式为 disp(输出项输出项) 其中输出项既可以为字符串,也可以为矩阵。其中输出项既可以为字符串,也可以为矩阵。2)程序的暂停程序的暂停 暂停程序的执行可以使用暂停程序的执行可以使用pausepause函数,其调用格式为:函数,其调用格式为: pause(npause(n) %) %延迟延迟n n秒秒 pause %pause %省略延迟时间,直接使用,则将暂停程序,省略延迟时间,直接使用,则将暂停程序,直到用户按直到用户按 任一键后程序继续执行。任一键后程序继续执行。 若要强行中止程序的运行可使用如下命令:

37、若要强行中止程序的运行可使用如下命令: Ctrl+CCtrl+C3.5.1顺序顺序结构结构1) if-else-endif-else-end语句的一般形式为:语句的一般形式为:ifif逻辑判断语句逻辑判断语句逻辑值为逻辑值为“真真”时执行的语句时执行的语句elseelse逻辑值为逻辑值为“假假”时执行的语句时执行的语句endend2) 采用采用if-else-end语句的嵌套形式语句的嵌套形式为为: ifif逻辑判断语句逻辑判断语句1 1逻辑值逻辑值1 1为为“真真”时的执行语句时的执行语句elseifelseif逻辑判断语句逻辑判断语句2 2逻辑值逻辑值2 2“真真”时的执行语句时的执行语句

38、elseifelseif逻辑判断语句逻辑判断语句3 3elseelse当以上所有的逻辑值均为假时的执行语句当以上所有的逻辑值均为假时的执行语句endend 3.5.2选择选择结构结构3) switch-caseswitch-case语句的一般表达形式为:语句的一般表达形式为:switchswitch选择判断量选择判断量Case Case 选择判断值选择判断值1 1选择判断语句选择判断语句1 1case case 选择判断值选择判断值2 2选择判断语句选择判断语句2 2otherwiseotherwise判断执行语句判断执行语句endend3.5.2选择选择结构结构例3.3 if rand0.5

39、 disp(产生的随机数大于0.5); end例3.4 function out=piecefun(x) %定义分段函数 if x1 out=x; else if x x=zeros(1,10); %初始化;for i=1:1:10 x(i)=1/i;end显示x: xx = Columns 1 through 8 1.0000 0.5000 0.3333 0.2500 0.2000 0.1667 0.1429 0.1250 Columns 9 through 10 0.1111 0.1000以分数形式显示此数列: format rat %控制输出格式 disp(x) %显示Columns 1

40、 through 5 1 1/2 1/3 1/4 1/5 Columns 6 through 10 1/6 1/7 1/8 1/9 1/10 2)whileend语句 while语句一般用于事先不能确定循环次数的情况。whileend语句的基本形式为:while 条件表达式 循环体语句组end例3.6 接受用户键盘输入,直到输入字符串时程序结束。x=input(输入一个字符串:); %接受用户键盘输入while isstr(x) %存入变量x x=input(输入一个字符串:);end3.6程序的编写技巧程序的编写技巧(1)测试程序执行时间建立程序执行时间有两种方法:一种是使用tic和toc命

41、令,tic用于启动秒表,toc用于停止秒表;另一种是使用能够获取CPU时间的cputime命令。例3.7建立一个1000*1000的魔方矩阵,使用tic和toc命令。 tic %开始计时 A=magic(1000); %运行程序 toc %结束计时,并显示所耗时间Elapsed time is 0.812000 seconds. t=cputime; %把cpu时间赋给变量tA=magic(1000); cputime-t %显示前后时间之差,即执行程序所耗时间ans= 0.7031 3.6程序的编写技巧程序的编写技巧2)避免使用循环能用对向量或矩阵元素的操作来完成的操作,尽量避免使用循环语句

42、。例例3.8 已知已知 ,当,当n=100时,求时,求y 的值。的值。 程序如下:程序如下:y=0;n=100;for i=1:n y=y+1/(2*i-1);endy 在在 实际实际MATLAB编编程中,采用循环语句程中,采用循环语句会降低其执行速度,会降低其执行速度,所以前面的程序通常所以前面的程序通常由下面的程序来代替:由下面的程序来代替: n=100; i=1:2:2*n-1; y=sum(1./i); y3.6程序的编写技巧程序的编写技巧3) try语句结构语句结构try语句语句语句格式为:语句格式为:try 语句组语句组1catch 语句组语句组2end try语句先试探性执行语句

43、先试探性执行语句组语句组1,如果语,如果语句组句组1在执行过程在执行过程中出现错误,则将中出现错误,则将错误信息赋给保留错误信息赋给保留的的lasterr变量,并变量,并转去执行语句组转去执行语句组2。3.6程序的编写技巧程序的编写技巧例例3.93.9:矩阵乘法运算要求两矩阵的维数相容,否则:矩阵乘法运算要求两矩阵的维数相容,否则会出错。先求两矩阵的乘积,若出错,则自动转去会出错。先求两矩阵的乘积,若出错,则自动转去求两矩阵的点乘。求两矩阵的点乘。程序如下:程序如下:A=1,2,3;4,5,6; B=7,8,9;10,11,12;A=1,2,3;4,5,6; B=7,8,9;10,11,12;

44、trytry C=A*B; C=A*B;catchcatch C=A.*B; C=A.*B;endendC Clasterrlasterr % %显示出错原因显示出错原因第四章第四章 MATLAB的符号运算4.1符号表达式4.2符号矩阵的创建4.3因式分解、展开和简化4.4符号函数的极限4.5 符号函数的微分4.5 符号函数的积分4.6符号代数方程求解4.7符号微分方程求解与Wolfram公司(数学软件Mathematica的开发公司)相比,MathWorks公司一直以矩阵计算和强大的数据处理能力见长,而符号计算并不是其强项。直到1993年,MathWorks公司从加拿大的Waterloo M

45、aple公司购买了Maple软件的内核技术,开发了用以进行符号计算的基本符号运算工具箱和扩展符号运算工具箱,从而解决了Matlab在符号计算方面的缺陷。基本符号运算工具箱含有100多个Matlab函数,通过这些函数可以采用Matlab的语法来调用Maple内核.Matlab 7.0的符号运算工具箱,包括符号函数、符号方程的定义、运算、复合、化简,符号矩阵的计算,符号微分、积分,符号代数方程和符号微分方程的求解,符号积分变换和符号特殊函数.4.1符号表达式符号表达式与数值运算的区别 数值运算中必须先对变量赋值,然后才能参与运算。 符号运算无须事先对独立变量赋值,运算结果以标准的符号形式表达。4.

46、1.1什么是符号运算什么是符号运算4.1.2 符号变量与符号表达式符号变量与符号表达式f = sin(x)+5xf 符号变量名sin(x)+5x 符号表达式 符号标识符号表达式一定要用 单引 号括起来matlab才能识别。 的内容可以是符号表达式,也可以是符号方程。例: f1=ax2+bx+c 二次三项式 f2= ax2+bx+c=0 方程 f3=Dy+y2=1 微分方程符号表达式或符号方程可以赋给符号变量,以后调用方便;也可以不赋给符号变量直接参与运算4.1.2 符号变量与符号表达式符号变量与符号表达式4.1.3 符号表达式的定义符号表达式的定义1)使用syms命令操作为:例例4.1syms

47、 x y z s t %定义单个符号变量也可x=sym(x)2) 用单引号定义符号表达式。例例4.2 fun=atan(x) %定义符号函数fun=atan(x)数值矩阵A=1,2;3,4 A=a,b;c,d 不识别用matlab函数sym创建矩阵(symbolic 的缩写)命令格式:A=sym( ) 符号矩阵内容同数值矩阵 需用sym指令定义 需用 标识4.2符号矩阵的创建符号矩阵的创建例4.3:A = sym(a , 2*b ; 3*a , 0) A = a, 2*b 3*a, 0这就完成了一个符号矩阵的创建。注意:符号矩阵的每一行的两端都有方括号,这是与 matlab数值矩阵的一个重要区

48、别。用字符串直接创建矩阵v 模仿matlab数值矩阵的创建方法v 需保证同一列中各元素字符串有相 同的长度。例4.4:A = a,2*b; 3*a, 0 A = a, 2*b 3*a, 0v将数值矩阵转化为符号矩阵 函数调用格式:sym(A)例4.5: A=1/3,2.5;1/0.7,2/5A = 0.3333 2.5000 1.4286 0.4000sym(A)ans = 1/3, 5/210/7, 2/5 符号矩阵与数值矩阵的转换v将符号矩阵转化为数值矩阵函数调用格式: numeric(A)例4.6 A = 1/3, 5/210/7, 2/5numeric(A)ans = 0.3333 2

49、.5000 1.4286 0.40004.3因式分解、展开和简化因式分解、展开和简化符号表达式的基本运算有合并同类项、表达式展开、因式分解、提取符号表达式的分子和分母、符号表达式的化简、确定符号矩阵的维数。有关函数的调用格式和功能见下表。collect(s):按默认变量x的次数对符号多项式s合并同类项collect(s,v):按指定变量v的次数对符号多项式s合并同类项expand(s):将符号多项式s展开factor(x):将符号表达式x因式分解N,D=numden(A):求符号表达式A的分子N和分母Dsimplify(s):求表达式s的化简形式m,n=size(A):求符号矩阵A的行数m、列

50、数n4.4 符号函数的极限符号函数的极限limit(F,x,a) :计算当xa时符号函数表达式F的极限值例例4.7:syms x limit(tan(x)-x)/x3) %求自变量x趋近于0时的极限值ans=1/3 limit(x2-1)/(x-1),x,1) %求自变量x趋近于1时的极限值ans=24.5 符号函数的微分符号函数的微分diff(s) %计算符号表达式s对系统默认自变量的一阶导数diff(s,n) %计算符号表达式s对系统默认自变量的n阶导数diff(s,v,n)%计算符号表达式s对指定变量v的n阶导数例例4.8:syms xy=log(log(x); diff(y) %求函数

51、y对自变量x的一阶导数ans =1/x/log(x) pretty(ans) %求符号表达式的常规形式 1 - x log(x)4.6 符号函数的积分符号函数的积分int(s):对符号表达式s中的默认自变量求s的不定积分int(s,v):对符号表达式s中的指定变量v求s的不定积分int(s,v,a,b):对符号表达式s中的指定变量v在区间a,b上求s的定积分例4.9:syms xint(1/x4/sqrt(1+x2) %对默认自变量x求不定积分ans=-1/3/x3*(1+x2)(1/2)+2/3/x*(1+x2)(1/2)int(1/(1+4*x2),-inf,inf) %在区间-,+ 上求

52、定积分ans=1/2*pi4.7符号代数方程求解符号代数方程求解 Matlab 7.0中求代数方程的符号解是通过调用solve函数实现的。调用格式一般为: solve(代数方程,未知变量)或x=solve(代数方程,未知变量)例4.10:求方程组 的解。 syms x y x,y=solve(x-2*y-4,x2-2*x*y+y)x=4/9y=-16/94.8符号微分方程求解符号微分方程求解在Matlab中,用dsolve函数求解微分方程或微分方程组,dsolve函数的输入共有三部分,微分方程、初始条件和自变量。调用格式为: dsolve(微分方程,初始条件,自变量)微分或导数的输入用Dy,D

53、2y,D3y,来表示一阶导数,二阶导数,三阶导数。如果自变量是系统默认的,则自变量输入部分可省略。dsolve函数的输出部分是该方程(组)的解列表,如果dsolve函数找不到解析解,则系统显示错误信息。一阶微分方程例4.11dsolve(Dx=y,Dy=x,x(0)=0,y(0)=1)ans =x(t) = sin(t), y(t) = cos(t)二阶微分方程例4.12dsolve(D2y=-a2*y,y(0)=1,Dy(pi/a)=0)ans =cos(a*x)例4.13y=dsolve(D2y+2*Dy+2*y=0,y(0)=1,Dy(0)=0)ans =exp(-x)*cos(x)+e

54、xp(-x)*sin(x)ezplot(y) 方程解y(t)的时间曲线图求该方程的解第五章第五章 MATLAB绘图绘图5.1 二维绘图函数二维绘图函数5.2 二维绘图函数的修饰二维绘图函数的修饰5.3 三维绘图函数三维绘图函数5.1 二维绘图函数二维绘图函数5.1.1基本绘图函数plot 2-D曲线绘图fplot 函数y=f(x)绘图ezplot 隐函数绘图5.1.2特殊绘图函数bar 绘制直方图polar 绘制极坐标图hist 绘制统计直方图stairs 绘制阶梯图stem 绘制火柴杆图fill 绘制填充图 5.1.1基本绘图函数基本绘图函数1)plot 2-D曲线绘图plot的调用格式 p

55、lot(x) 缺省自变量绘图格式,x为向量, 以x元素值为纵坐标,以相应元素下标为横坐标绘图 plot(x,y) 基本格式,以y(x)的函数关系作出直角坐标图,如果y为nm的矩阵,则以x 为自变量,作出m条曲线plot(x1,y1,x2,y2) 多条曲线绘图格式plot(x,y,s) 开关格式,开关量字符串s设定曲线颜色和绘图方式例5.1:x=0, 0.48,0.84,1,0.91,0.6,0.14 x1, x2, x3, x4, x5, x6, x7, plot (x)例5.2:t=0:pi/100:2*pi; y=sin(t);y1=sin(t+0.25);y2=sin(t+0.5); p

56、lot(t,y,t,y1,t,y2)yy1y2例5.3:y=sin(t);y1=sin(t+0.25);y2=sin(t+0.5); y3=cos(t);y4=cos(t+0.25);y5=cos(t+0.5); plot(t,y,y1,y2,y3,y4,y5)例5.4:y3=cos(t);y4=cos(t+0.25);y5=cos(t+0.5); plot(t,y3);hold on; plot(t,y4); plot(t,y5);可任意设置颜色与线型例5.5:t=0:pi/100:2*pi; y=sin(t);y1=sin(t+0.25);y2=sin(t+0.5); plot(t,y,r

57、-,t,y1,g:,t,y2,b*)S的标准设定值如下:字母 颜色 标点 线型 y 黄色 点线 m 粉红 圈线 c 亮蓝 线 r 大红 字线 g 绿色 实线 b 蓝色 星形线 w 白色 : 虚线 k 黑色 (-) 点划线fplot的调用格式:fplot(fun,lims):绘制函数fun在x区间lims=xmin xmax的函数图。fplot(fun,lims,corline):以指定线形绘图。x,y=fplot(fun,lims):只返回绘图点的值,而不绘图。用plot(x,y)来绘图。2)fplot 函数函数y=f(x)绘图绘图例5.6:fplot(sin(x),tan(x),cos(x)

58、,2*pi*-1 1 -1 1)fplot(humps,0 1,rp)3)ezplot 隐函数绘图隐函数绘图MATLAB提供了一个提供了一个ezplot函数绘制隐函数图形,下面函数绘制隐函数图形,下面介绍其用法。介绍其用法。(1) 对于函数对于函数f = f(x),ezplot函数的调用格式为:函数的调用格式为:ezplot(f):在默认区间:在默认区间-2x2绘制绘制f = f(x)的图形。的图形。ezplot(f, a,b):在区间:在区间axb绘制绘制f = f(x)的图形。的图形。(2) 对于隐函数对于隐函数f = f(x,y),ezplot函数的调用格式为:函数的调用格式为:ezpl

59、ot(f):在默认区间:在默认区间-2x2和和-2y2绘制绘制f(x,y) = 0的图形。的图形。ezplot(f, xmin,xmax,ymin,ymax):在区间:在区间xminxxmax和和yminyymax绘制绘制f(x,y) = 0的图形。的图形。3)ezplot 隐函数绘图隐函数绘图ezplot(f, a,b):在区间:在区间axb和和ay b绘制绘制f(x,y) = 0的图形。的图形。(3) 对于参数方程对于参数方程x = x(t)和和y = y(t),ezplot函数的调函数的调用格式为:用格式为:ezplot(x,y):在默认区间:在默认区间0t2绘制绘制x=x(t)和和y=

60、y(t)的图形。的图形。ezplot(x,y, tmin,tmax):在区间:在区间tmin t w=20:20:100; f=4.35 7.55 10.4 13.8 16.8; plot(w,f,r+); p=polyfit(w,f,1); %得拟合一次多项式 hold on %在原图上叠加 plot(w,polyval(p,w); %作出试验数据在拟合多项式处取值 legend(试验数据,拟合曲线); %注解 hold off 6.2 Matlab求解线性规划问题线性规划是一种优化方法,Matlab优化工具箱中有现成函数linprog对如下式描述的LP问题求解: min f*x % 目标函

61、数 s.t A*x=b % 约束条件 Aeq*x=beq %等式约束条件 lb=x=ub %自变量约束条件 linprog函数的调用格式如下:x=linprog(f,A,b) x=linprog(f,A,b,Aeq,beq) x=linprog(f,A,b,Aeq,beq,lb,ub) x=linprog(f,A,b,Aeq,beq,lb,ub,x0) x=linprog(f,A,b,Aeq,beq,lb,ub,x0,options) x,fval=linprog() x,val,exitflag=linprog() x, fval, exitflag, output=linprog() x,

62、 fval, exitflag, output, lambda=linprog() 其中,x=linprog(f,A,b)返回值x为最优解向量。 x=linprog(f,A,b,Aeq,beq) 作有等式约束的问题。若没有不等式约束,则令A= 、b= 。x=linprog(f,A,b,Aeq,beq,lb,ub,x0,options) 中lb ,ub为变量x的下界和上界,x0为初值点,options为指定优化参数进行最小化。x,fval=linprog() 左端 fval 返回解x处的目标函数值。 任务分配问题:任务分配问题: 某车间有甲、乙两台机床,可用于加工三种工件。假定这两台车床的可用台

63、时数分别为800和900,三种工件的数量分别为400、600和500,且已知用这两种车床加工单位数量不同工件所需的台时数和加工费用如下表。问怎样分配车床的加工任务,才能既满足加工工件的要求,又使加工费用最低?设在甲车床上加工工件1、2、3的数量分别为x1、x2、x3,在乙车床上加工工件1、2、3的数量分别为x4、x5、x6。可建立以下线性规划模型:改写为:源程序f = 13 9 10 11 12 8;A = 0.4 1.1 1 0 0 0; 0 0 0 0.5 1.2 1.3;b = 800; 900;Aeq=1 0 0 1 0 0; 0 1 0 0 1 0; 0 0 1 0 0 1;beq=400 600 500;vlb = zeros(6,1);vub=;x,fval = linprog(f,A,b,Aeq,beq,vlb,vub)x = 0.0000 600.0000 0.0000 400.0000 0.0000 500.0000fval = 1.3800e+004即在甲机床上加工600个工件2,在乙机床上加工400个工件1、500个工件3,可在满足条件的情况下使总加工费最小为13800 谢谢!谢谢!

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号