《Matlab软件应用与开发.ppt》由会员分享,可在线阅读,更多相关《Matlab软件应用与开发.ppt(81页珍藏版)》请在三一办公上搜索。
1、Matlab 软件应用与开发,主讲教师:李云东 联系方式:66642(短号),课程安排,Matlab简介Matlab基础知识数组Matlab语言程序设计Matlab科学绘图Matlab在数值分析、优化中的应用,1.1 初始Matlab,Matlab是MathWorks公司的产品,是一个为科学和工程计算而专门设计的高级交互式软件包。Matlab环境集成了图示与精确的数值计算,是一个可以完成各种计算和数据可视化的强有力的工具。Matlab可以进行矩阵运算、绘制函数和数据、创建用户界面、与Fortran、C语言混合编程等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计
2、与分析等领域。,1.2 Matlab的历史背景,Matlab是Matrix(矩阵)和Laboratory(实验室)两个英语单词的前3个字母的组合。它一开始是美国新墨西哥大学计算机系主任Clever Moler博士在20世纪70年代后期为Linpack和Eispack这两个矩阵运算的软件包编写的接口程序,目的是方便所设立的线性代数课程的教学,当时为这个接口程序取了一个名字叫做Matlab。在以后的一段时间,Matlab在很多大学里作为教学辅助软件使用。1983年,工程师John Little和Clever Moler博士,用C语言开发了Matlab的第二代专业版本,这一版本同时具有了数值计算和数
3、据可视化的功能。,1.3 Matlab的特点,Matlab操作简单,功能强大,应用广泛。它具有编程效率高、用户使用方便、扩充能力强、语句简单、高效方便的矩阵和数组运算、方便的绘图功能、开放的源程序等特点。Matlab具有很多有用的工具箱,如通讯工具箱、控制系统工具箱、财政金融工具箱、图像处理工具箱、神经网络工具箱、优化工具箱、信号处理工具箱、统计工具箱、小波工具箱等。最新的版本是2009年3月6日发布的Matlab 7.8(R2009a)。,1.4 如何学习Matlab,Matlab的网络资源 WWW网站 匿名FTP网站 http:/Matlab中国论坛查看帮助,使用help命令(help+函
4、数名)多上机实验,熟能生巧,2.Matlab的桌面和桌面工具,2.1命令窗口,命令窗口:是用户与Matlab交互的工具,是Matlab执行函数命令的窗口。默认情况下,命令窗口总是打开的。7.0版本中,通过选取【Desktop】【Command Window】;命令窗口控制函数:home:移动光标到左上角clc:清除命令窗口(工作空间的变量清除用命令clear)命令历史窗口:在命令窗口每执行一条命令,都将在历史窗口记录下来。反过来,在命令历史窗口只须双击某条历史命令,该命令就会在命令窗口重新执行一次。,2.2 当前目录浏览器和搜索路径,1)当前目录浏览器 Matlab将许多内部函数放在不同的目录
5、下,在调用函数时,首先查看当前目录,然后查看搜索路径中的目录。任何需要执行的文件都必须放在当前目录或搜索路径中,文件才能顺利运行。可以在命令窗口输入cd命令改变当前目录。一种改变当前目录快速而又高效的方法是使用桌面上的目录工具条。,2)搜索路径,文件在执行时必须位于当前目录或者是搜索路径中。使用path命令可以查看Matlab默认的搜索路径。例2.1 path MATLABPATHD:MATLAB701toolboxmatlabgeneralD:MATLAB701toolboxmatlabops例2.2 将自己的目录添加到搜索路径中、删除已有搜索路径、改变搜索顺序。pathtool,在Set
6、Path对话框中设置。,3)常用命令,clear:清除当前工作空间的变量例2.3 clear%清除当前工作空间的所有变量 clear var1 var2%清除变量var1、var2 clear a*%清除以a开头的变量who:查看当前工作空间的所有变量(信息简短)whos:作用同who。给出变量的大小、数据类型等具体内容。,课后练习,(1)认识Matlab 7.0的各种操作界面。(2)学会使用查看帮助信息,使用help、helpdesk、doc等帮助命令(3)利用目录工具条、cd命令改变当前目录。(4)利用pathtool对话框设置搜索路径。(5)who、whos查看当前工作空间的变量名及详细
7、信息。(6)通过查看帮助,学会使用save命令,保存变量到*.mat文件中,3.数组,数组的创建数组中元素的引用和变形数组运算数组操作字符串和数组矩阵运算矩阵特征参数,3.1数组的创建,3.1.1 构造数组 可以通过键入数组中每个元素的值来建立并输入一个数组,当数组中的元素个数较少时,这种方法非常适用。创建一个数组,只须以左方括号开始,以逗号或空格为间隔输入每行元素值,各行元素间以分号为间隔,最后以右方括号结尾即可。例3.1 a=0,1,2,3,4 5 6 7,8,9 a=0 1 2 3 4 5 6 7 8 9cos(a)ans=Columns 1 through 8 1.0000 0.540
8、3-0.4161-0.9900-0.6536 0.2837 0.9602 0.7539 Columns 9 through 10-0.1455-0.9111,3.1.2 创建数组的常用方法,1)冒号法。其基本格式为:X=初值:增量:终值 返回值X是从初值开始,以增量为步长,直到不超过终值的所有元素所构成的向量。默认步长为1,可以省略不写。例 3.2 a=1:1.5:8a=1.0000 2.5000 4.0000 5.5000 7.0000a=3:-pi:-5a=3.0000-0.1416-3.2832,2)调用函数linspace或logspace,函数linspace(a,b,n)返回以a为
9、起点、b为终点的等间距的共n个元素的数组。函数logspace与linspace类似,它相当于在linspace命令的基础上再对每个元素做10的指数幂运算。例3.3 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.0000,3)其它方法创建数组,对于那些既不是线性等距又不是对数等距的数组,可以借助下标编址和表达式相结合的方法来避免重复输入数据。例3.4 x=1:2:10;y=0:-1:-5;z=x,y z=1 3 5 7
10、 9 0-1-2-3-4-5思考:如果输入z=x;y,输出结果会是怎样?,3.2 数组中元素的引用和变形,引用数组中的元素是利用元素的下标。x(n)表示数组中的第n个元素。利用冒号可以访问多个元素。例3.5 x=1:-2:-20;%定义数组 x(5)%访问x的第5个元素ans=-7 x(1:2:7)%访问x的第1,3,5,7个元素ans=1-3-7-11此处,x(1:2:7)等价于x(1,3,5,7).,列向量的创建,前面提到的都是行向量,列向量的操作和运算和行向量类似。要定义一个列向量,只须在键入的元素直接输入分号或回车换行即可。例3.6 x=3;4;5%由分号分隔x=3 4 5 y=345
11、%由回车换行分隔,列向量和行向量之间可以通过转置符 互相转换。不过需要注意的是,对于复数向量,转置符的作用是复共轭转置。符号.是对于复数向量的转置运算。,3.3 数组运算,Matlab数组运算分为标量与数组运算和数组与数组之间的运算。与矩阵不同的是,这两种运算都是在元素与元素之间进行的。3.3.1 标量与数组之间的运算 标量与数组进行四则运算就是这个标量对数组中的每个元素进行同样的运算。例3.8 a=1:5;b=a+3,c=2*a-5b=4 5 6 7 8c=-3-1 1 3 5,3.3.2 数组与数组之间的运算,当两个数组具有相同维数时,数组与数组之间可以进行加、减、乘、除运算。,3.4 数
12、组操作,3.4.1 Matlab对数据的物理存放形式 Matlab中,数据的物理形式是按列存放。对于一个二维数组,在内存中的单元存放顺序是:第一列元素,第二列元素,最后一列元素。对于多维数组,则是把第二维以后的维数作为数据平面(plane),存放顺序是:第一个plane中的矩阵,第二个plane的矩阵,直到最后一个。,3.4.2 数组维内抽取、扩展、删除,3.4.3 数组的几个常用函数,对数组可以使用size函数来测量其大小,length函数返回维的长度的最大值,ndims函数返回数组的维数。例3.14 var=rand(3,4,5);%生成3*4*5大小的随机数 size(var)ans=3
13、 4 5 length(var)%作用同max(size(var)ans=5 ndims(var)%作用同length(size(var)ans=3,3.5 字符串和数组,在Matlab中的字符串一般是ASCII值的数组数组。它作为字符串表达式进行显示。,3.6 Matlab矩阵运算,3.7 矩阵常用的命令及特征参数计算,diag(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)对角阵,其中第
14、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):求非方阵,或者非满秩的方阵A的伪逆矩阵 rank(A):矩阵A的秩trace(A):矩阵的迹.等于矩阵的对角线元素之和,亦矩阵的特征值之和 E=eig(A):矩阵A的全部特征值,构成向量E V,D=eig(A):矩阵A的特征值构成对角阵D,并求A的特征向量构成V的列 向量 det(A):矩阵A的行列式,课后练习,(1)创建下列数组1
15、0 8 6 4 2 0 0 3 5 7 9(2)使用“X=pascal(4)”命令生成一个4*4的pascal矩阵。对X进行下列操作:查看X的第一列元素;提取X的第一行和第三行元素,存入变量Y;提取X的前两行,后两列元素,存入变量Z;把X扩展成5*4的矩阵,使第5行元素为服从平均分布的随机数;删除数组X的最后一列。(3)创建字符数组“Robert.white”,并存入变量name。查看name在工作空间的存储方式。最后提取字符串“white”,存入变量subname。(4)将工作空间的变量X、name、subname存入data.mat文件。,课后练习续,(5)创建向量u、v和标量s:u=3;
16、1;4 v=2 0-1 s=7计算u*v,v*u和(u+s)*v。(6)根据下面两个矩阵:回答相关问题:A.*B和A*B的结果如何,它们是否相同,为什么?计算A.B,A/B和AB的结果,并分别解释它们的意义。,4.Matlab语言程序设计,4.1 运算符 Matlab的算术运算符可按优先级由低到高分为5级,每一级内优先级相同,运算时从左向右结合。各级所包含的运算符如下:(1)转置符(.)、幂符(.)、复共轭转置()、矩阵幂符()。(2)标量加(+)、标量减(-)。(3)向量乘法(.*)、向量右除(./)、向量左除(.)、矩阵乘法(*)、矩阵右除(/)、矩阵左除()。(4)加法(+)、减法(-)
17、。(5)冒号运算符。,4.2 关系运算符、逻辑运算符,关系运算符 大于=大于或等于=等于=不等于,逻辑运算符&逻辑与A&B and(A,B)|逻辑或A|B or(A,B)逻辑非A not(A)Xor 逻辑异或,4.3 逻辑函数,all 测试是否所有元素都非0any 测试是否存在非零元素exist 检查文件或变量是否存在find 搜索非零元素的索引和值ischar 测试是否为字符串数组,是则返回1isempty 测试是否是空数组,是则返回1isfinite 数组的元素有限时,返回数组的相应位置为1ishold 若“hold”命令处于“on”状态时,则返回1isinf 数组的元素无穷大时,返回数组
18、的相应位置为1isletter 数组的元素为字母时,返回数组的相应位置为1isreal 参数无虚部,返回1isspace 元素为空格字符,返回1isstr 参数为字符串,返回1,4.4 数学函数,4.5 Matlab语言程序设计,Matlab语言为解释性程序设计语言,程序中的语句边解释边执行。Matlab是用C语言编写的,具有C语言自由、灵活、简洁的风格。使用Matlab书写程序,形式非常自由,而且利用丰富的库函数,避免了复杂的子程序编写。4.5.1 M文件 前面提到的都是单一的语句和命令,若要Matlab完成复杂的任务,则必须建立扩展名为.m的程序文件。M文件包含两类:命令文件和函数文件。前
19、者不要求输入参数,也不返回任何参数;而后者可以输入参数,也可以返回参数。命令文件只对工作空间进行操作;而函数文件的变量为局部变量,只有输入、输出的变量被保留在工作空间。,4.5.2 命令文件,若要一次执行大量的Matlab命令,可将这些命令编写在一个扩展名为.m的文件中,并在Matlab命令输入窗口键入此文件名即可。例4.1(1)建立M文件。命令窗口键入edit firstest,建立firstest.m文件。(2)代码编写。进入代码编辑器中,输入下列代码:%第一个测试命令文件,计算一数组的正弦函数x=0;y=2*pi;z=sin(x:pi/4:y),4.5.2 命令文件(续),(3)保存文件
20、,并执行。通过编辑器【Debug】【Run】,或者在命令窗口输入firstest执行,在命令窗口可以看到执行结果。注:firstest.m的第一行以%开头的行是注解,可以使程序易于理解与管理。一般地,第一注解行通常用来简短说明此M文件的功能,使用help firsttest命令可查看该注释;命令窗口输入whos查看工作空间的变量,可以发现执行时所建立的变量全部保留在工作空间中。一行代码过长时使用符号“”续行符连接,4.5.3 函数文件,函数文件的一般格式为:function 输出表=函数名(输入表)注释行函数体例4.2 计算1+2+n的函数:function output=mysum(n)%m
21、ysum函数计算直到n的和output=0;%初始化for i=1:n output=output+i;end,4.5.3 函数文件(续),函数文件的第一行必须以关键字function开始,表明该文件是函数文件。输入表以逗号相分割形参。输出表是函数的返回值。如果返回值只有一个,方括号可以省略;当返回值不止一个时,输出表中的各个变量要以逗号隔开。函数文件的文件名必须与函数名相同。函数体任意位置都可以包含注释语句。在函数体中的空行将被忽略。函数体是实现函数功能的部分。函数体包含函数调用、程序流程控制、输入、输出、赋值、计算等语句。对于定义好了的函数,在命令窗口或其他文件中均可调用。调用函数时,参数
22、可以是常量、有确定值的变量或表达式。,4.5.3 函数文件递归函数,例4.3 function output=fact(n)%fact函数通过递归函数求解n!if n=1%判断语句,递归结束条件 output=1;return;endoutput=n*fact(n-1);在写一个递归函数时,一定要包含结束条件,否则函数将一直调用自身,直到内存被耗尽为止。本例中n=1即为结束条件。,4.6 变量和常量变量,在Matlab中,变量分为局部变量和全局变量。变量名由一个字母开头,后面可以跟字母、数字、下划线等。在Matlab中,变量区分大小写。在M文件中,变量在使用前无需定义维数和每维的大小,但把一个
23、变量赋给另一个变量时,要求赋值号右边的变量有值。在M文件中定义的变量是局部变量,其作用域仅在本函数,仅能被本函数调用。全局变量定义后,能被其他函数调用,在命令窗口也可以调用。因此,可以在命令窗口或任意一个函数中改变全局变量的值。全局变量用global定义。如定义全局变量a,b:global a b。,4.6 变量和常量常量,Matlab为特定的常数预留了一些名称,这些常量也可以重新赋值。常量在工作空间不能直接看到,使用者可直接调用。,4.7 程序流程控制语句,4.7.1 赋值语句结构1)直接赋值语句 基本格式为:变量名=赋值表达式 上述语句把赋值表达式的值赋给变量。如果表达式后没有分号,则在M
24、atlab命令窗口显示运行结果,否则不显示。例4.5 x=1;y=xy=1,4.7.1 2)函数调用赋值,函数调用赋值语句的基本格式为:返回变量列表=函数名(输入变量列表)返回变量列表和输入变量列表一般由多个变量组成,各变量之间用逗号隔开。例4.6 x=rand(3,4);rn,cn=size(x)rn=3cn=4,4.7.2 循环语句结构,Matlab里的循环结构可用forend语句和whileend语句来实现。1)forend语句 for语句使用很灵活,通常用于循环次数确定的情况。其调用格式为:for 变量名=表达式 循环体语句组 end其中,表达式一般是以“s1:s2:s3”的形式给出。
25、s1表示循环变量的初始值,s2表示步长(若步长为1,s2可省略)。对于正的步长,当变量的值大于s3时结束循环;对于负的步长,当变量的值小于s3时结束循环。注意for循环不能用重新赋值循环变量的方法来终止循环。,4.7.2 循环语句结构whileend语句,while语句一般用于事先不能确定循环次数的情况。while语句的基本形式为:while 条件表达式 循环体语句组end例4.8 接受用户键盘输入,直到输入字符串时程序结束。x=input(输入一个字符串:);%接受用户键盘输入while isstr(x)%存入变量x x=input(输入一个字符串:);end,4.7.3 条件语句结构,Ma
26、tlab提供的条件语句有:(1)ifend语句。其基本格式为:if 条件表达式 条件语句组 end例4.9(2)if else end语句。其基本格式为:if 条件表达式 条件块语句组1 else 条件块语句组2 end例4.10,例4.9 if rand0.5 disp(产生的随机数大于0.5);end例4.10 function out=piecefun(x)%定义分段函数 if x1 out=x;else if x=4 out=x.2;else out=2x;end end,4.7.3 开关语句结构,其基本格式为:switch 开关表达式%标量或字符串 case 表达式1 语句组1 ca
27、se 表达式1,表达式2,表达式k 语句组2 otherwise 语句组n end,4.8 Matlab语言编程技巧,(1)测试程序执行时间 建立程序执行时间有两种方法:一种是使用tic和toc命令,tic用于启动秒表,toc用于停止秒表;另一种是使用能够获取CPU时间的cputime命令。例4.12 建立一个1000*1000的魔方矩阵,使用tic和toc命令。tic%开始计时 A=magic(1000);%运行程序 toc%结束计时,并显示所耗时间Elapsed time is 0.812000 seconds.t=cputime;%把cpu时间赋给变量tA=magic(1000);cpu
28、time-t%显示前后时间之差,即执行程序所耗时间ans=0.7031,4.8(2)加快Matlab程序执行的方法,1)避免使用循环 Matlab的不足是当对矩阵的单个元素进行循环操作时运算速度很慢,因此应尽量避免使用循环。编程时,尽量对矩阵或向量编程,把循环向量化,这样不仅能缩短程序长度,而且能提高程序执行效率。在必须使用多重循环的情况下,若两个循环执行的次数不同,则应在循环的内层执行次数多的,外层执行循环次数少的。2)对大型矩阵预先定义维数 在程序执行的过程中,有时要动态改变矩阵的维数,非常浪费时间。为此,应在定义大矩阵时,首先用Matlab的内在函数(如zeros()或ones()对矩阵
29、定义好维数,然后再进行赋值处理,这样会提高程序的运行效率。3)优先使用内在函数。,例4.13 ticsum=0;for i=1:100000 sum=sum+1/i2;endtocElapsed time is 0.454000 seconds.向量化编程:tici=1:100000;s=sum(1/i2);toc,5.Matlab科学绘图,主要内容图形窗口二维平面绘图空间三维绘图特殊三维绘图函数 Matlab在数据可视化方面也有很好的表现,具有强大的图形绘制能力。Matlab可以绘制二维、三维乃至四维图形,而且能对图形进行线型、里面、色彩、渲染、光线、视角等控制。用户只须指定绘图方式,并提供
30、充足的绘图数据,即可得出所需的图形。,5.1 图形窗口,在Matlab中,图像窗口和命令窗口是独立的窗口。当图形窗口处于关闭状态时,图形命令将新建一个窗口;如果已经打开了一个或多个图形窗口,一般默认最后一个打开的窗口作为当前图形命令的输出窗口。例5.1 t=0:pi/50:2*pi;x=sin(t);plot(t,x),5.2 二维平面绘图,plot是基本的二维绘图命令,Matlab的其他二维函数中的绝大多数是以plot为基础构造的。函数plot最直接的调用格式为:plot(x,y)曲线实际上是由一系列的的点构成。首先定义了横坐标x向量,然后定义纵坐标y向量,通过plot函数作出图形。若要画出
31、多条曲线,只须将坐标对依次放入plot函数即可。例5.2 在同一个窗口绘制y=sinx,y=cosx在0,2*pi的图像。x=linspace(0,2*pi,101);plot(x,sin(x),x,cos(x)%坐标对依次放入plot函数中 也可以在Matlab窗口输入下列命令:x=linspace(0,2*pi,101);plot(x,sin(x);cos(x)程序运行结果如图。,plot函数绘图命令的选项,不同种类的选项间可以搭配使用,如选项”ro”表示绘制红色的圆划线。带选项的曲线绘制命令的基本格式为:plot(x1,y1,选项1,x2,y2,选项2,)例如:plot(x1,y1,b*
32、,x2,y2,x3,y3,g+),例5.3 x=0:pi/100:2*pi;plot(x,sin(x),ko,x,cos(x),*),二维图形的标注方法,1)坐标轴的调整 Matlab可以根据所绘制曲线的范围自动选择适当的坐标系,使得曲线能够尽可能清晰地显示出来。所以,一般情况下不需要考虑坐标范围的选择。但有特殊的要求时,可以手动地改变坐标系的范围。手动调整只须借助axis函数,其基本格式为:axis(xmin,xmax,ymin,ymax)例5.4 调整坐标轴显示的范围。x=0:pi/100:2*pi;axis(0,6.3,-1.1,1.1);plot(x,sin(x),ko,x,cos(x
33、),*),2)坐标标注、图形标题和注解,Matlab可以用函数xlabel和ylabel分别为x轴和y轴加上注解和说明,其中ylabel函数会自动旋转90o显示。title和legend函数分别为图形添加标题和注解。grid on和grid off命令分别表示开启和关闭网格线的显示。图形上点的标注和说明用text命令实现。text函数的基本格式为:text(x,y,字符串,属性名,值)其中,(x,y)是标注的位置,字符串是要说明的内容,leftarrow和pi分别表示左箭头和常量。例5.5 x=0:pi/100:2*pi;axis(0,6.3,-1.1,1.1);plot(x,sin(x),k
34、,x,cos(x);xlabel(x);ylabel(y);%x轴、y轴注解 title(一个周期内的正弦、余弦函数图像);%图形标题 legend(y=sin(x),y=cosx);%图形注解,在右上角显示 grid on%显示网格线 text(pi/5,sin(pi/5),(pi/5,sin(pi/5),fontsize,16);text(pi/5,cos(pi/5),(pi/5,cos(pi/5),fontname,楷体);,图形的标注和说明,可通过图形窗口的Insert菜单下的各子菜单(如X label、Y label、Z label、Title等)交互设置。,图形窗口的分割和多个对象
35、的显示,在前面的例子,使用plot命令可以在同一窗口中显示多条曲线。除此之外,还有其他一些方法实现多个图形的显示。(1)使用hold函数hold on%增加图形。后续图形增加到现有图形中hold off%替换图形。默认值。替换现有图形hold%在增加图形和替换图形之间切换(2)分割图形窗口subplot(m,n,p)%把图形划分成m*n个矩阵块,当前选择第K%个矩阵块。子块排序以行优先例5.6,例5.6 在四个子窗口,做出0,2*pi区间的正弦、余弦、余切函数曲线。其中第3、4子窗口作余切函数曲线。x=0:pi/100:2*pi;subplot(2,2,1),plot(x,sin(x),tit
36、le(sinx),subplot(2,2,2),plot(x,cos(x),k),title(cosx),subplot(2,2,3 4),axis(plot(x,tan(x),g),title(tanx),二维绘图函数,例5.7 绘制函数sin(1/x)在x=0附近的变化情况。fplot(sin(1/x),0.02 0.2);例5.8 作心形线。t=0:pi/360:2*pi;polar(t,1+cos(t),r.)或 ezpolar(1+cos(t),0,2*pi);,%fplot函数会对函数剧烈变化处进%行较密集的取样,从而进行较精%确的绘图。,饼图pie(x)%把x中的数据按照所占总量
37、sum(x)的比例画成饼图pie(x,explode)%explode为与x同大小的向量,若分量非0,%则对应切片从饼图的中心分离。例5.9 score=5 15 10 7 2;%某班成绩分布 explode=0 1 1 1 0;%各分数段切片是否分离显示pie(score,explode,90-100,80-89,70-79,60-69,60)%,与x同大小的细胞字符串,依次作为各切片的标签,5.3 绘制三维曲线,plot3命令绘制三维曲线。函数调用格式为:plot3(x,y,z,选项)其中,x,y,z分别表示曲线的3个坐标向量,这里要求它们的维数相同,选项与函数plot一致。例5.10 画
38、出螺旋线。t=-5:5;x=2*cos(3*t);y=2*sin(3*t);z=4*t;plot3(x,y,z),5.4 绘制曲面网线图,用mesh函数生成曲面网线图,函数的调用格式为:mesh(X,Y,Z,C)此函数由3个矩阵X,Y,Z绘制空间网线图,即以矩阵元素为空间坐标在空间描点作图,点与点之间用线段连接。C为颜色矩阵,表示在不同高度下的颜色范围。如果省略C选项,则自动假定C=Z,亦即颜色的设定是正比于高度的,这样得到的三维图形层次比较清楚。在使用mesh函数时,一般都要调用meshgrid函数生成网线节点矩阵,其基本调用格式为:X,Y=meshgrid(x,y)其中,x和y都是向量,X
39、和Y都是矩阵,X的每行都是由向量x构成,Y的每列则由向量y构成。xy平面就按照X和Y矩阵分割成小矩形单元。,例 用meshgrid产生网格。x,y=meshgrid(0:3,0:3)x=0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3y=0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3例5.11 作出椭圆抛物面。x,y=meshgrid(-2:0.1:2,-3:0.1:3);%生成xy平面的网格z=x.2/4+y.2/9;%计算网格坐标的高度mesh(x,y,z)%生成曲面网格图colorbar%高度的彩色条,三维表面图,当要绘制表面图时,可以使用surf函数,其调
40、用格式为:surf(X,Y,Z,C)各变量的含义与么事函数类似。例5.12 绘制马鞍面。x,y=meshgrid(-2:0.1:2,-3:0.1:3);%生成xy平面的网格z=x.2/4-y.2/9;%计算网格坐标的高度surf(x,y,z)%生成曲面网格图shading interp%网格块内采用颜色插值处理,使表面显得更光滑,6 Matlab在数值分析、优化中的应用,在科学研究和工程应用中,往往要进行大量的数学计算。Matlab的数值分析功能十分强大,本节主要讲述Matlab在函数、插值和曲线拟合分析、微积分和线性方程系统方面的应用。6.1 Matlab中的多项式1)定义多项式。p=1 0
41、-12 0 12 7;%系数按降序排列,缺项补0r=roots(p)r=-3.3330 3.2673 1.2985-0.6164+0.3392i-0.6164-0.3392ip=poly(r)%根据多项式的根,构造多项式,2)多项式的加、减、乘、除运算,多项式的加减乘除与向量的加减乘除相似,Matlab没提供专门的运算。对于两个不同阶的多项式相加减,只需用0填补低阶多项式相应的高阶,变成同阶的再做运算。例6.1 多项式 与 的和、差、积、商。p1=1 0 0 0-1;p2=1 0 2 5;%定义两个多项式p2=0 p2;%扩展低次多项式,成为与p同阶多项式s=p1+p2%多项式加法s=1 1
42、0 2 4p2(1)=;%多项式乘法对同阶无要求m=conv(p1,p2)%多项式乘法m=0 1 0 2 5-1 0-2-5q,r=deconv(p1,p2)%多项式p1除以p2,q表示商,r表示余数q=1 0;r=0 0-2-5-1,3)多项式的导数,Matlab提供函数polyder计算多项式及其积、商的导数此函数有如下几种表达形式:k=polyder(p);%多项式p的导数 k=polyder(a,b);%多项式a与b的积的导数 q,d=polyder(a,b);%返回多项式a与b的商的导数,q%表示导数的分子部分,d表示导%数的分母部分4)多项式的求值例6.2 求多项式 在点x=1,3
43、,5处的值。p=1 3 1;%定义多项式polyval(p,1 3 5)ans=5 19 41,6.2 求函数的零点,Matlab提供函数fzero求函数的零点。函数的基本调用格式为:fzero(fun,x)其中,fun是要求零点的函数(一般函数fun需建立M文件),x给出初值。x为标量或二维向量.如果x是二维向量,函数在x(1),x(2)寻找函数值为零的自变量的值,此时要求在x(1)和x(2)处的函数值异号,否则系统报错.例6.3 通过在x=3附近寻找正弦函数的零点来求pi的近似值。x=fzero(sin,3)x=3.1416例6.4 求方程 在区间(0,1)的一个解。建立M文件:funct
44、ion out1=fun1(x)out1=exp(x)-x2+3*x-2;求零点:x=fzero(fun1,0 1)结果:x=0.2575,可用fplot函数观察得到近似的零点值或相应的区间,然后再使用fzero函数计算零点。,6.3 曲线拟合,所谓曲线拟合,就是根据一组数据,确定一个函数关系,即曲线,使得这些点总体上来说与曲线最为接近。在Matlab中,函数polyfit求解最小二乘曲线拟合问题,其调用格式为:p=polyfit(x,y,m)其中,输入参数x、y是要拟合的数据,m为拟合多项式的次数。输出参数为拟合多项式的系数。多项式在x处的值可由polyval(p,x)得到。例6.5 有一滑
45、轮组,要举起重物w需要F力,实验所得的数据如下:,问题分析:(1)plot命令作图,确定拟合多项式的次数m(2)polyfit拟合得拟合多项式的系数(3)在原图上,画出拟合曲线,并分析结果求解: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.3 Matlab求解线性规划问题,线性规划是一种优化方法,Matlab优化工具
46、箱中有现成函数linprog对如下式描述的LP问题求解:min f*x%目标函数 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,exi
47、tflag,output=linprog()x,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处的目标函数值。,任务分配问题:,某车间有甲、乙两台机床,可用于加工三种工件。假定这两台车床的可用台时数分别为800和900,三种工件的数量分别为400、600和500,且已知用这两种车床加工单位数量不同工件所需的台时数和加工费用如下表。问怎样分配车床的加工任务,才能既满足加工工件的要求,又使加工费用最低?,设在甲车床上加工工件1、2、3的数量分别为x1、x2、x3,在乙车床上加工工件1、2、3的数量分别为x4、x5、x6。可建立以下线性规划模型:改写为:,
链接地址:https://www.31ppt.com/p-6512186.html