matlab入门教程(快速入门).ppt

上传人:枫** 文档编号:568706039 上传时间:2024-07-26 格式:PPT 页数:182 大小:1.30MB
返回 下载 相关 举报
matlab入门教程(快速入门).ppt_第1页
第1页 / 共182页
matlab入门教程(快速入门).ppt_第2页
第2页 / 共182页
matlab入门教程(快速入门).ppt_第3页
第3页 / 共182页
matlab入门教程(快速入门).ppt_第4页
第4页 / 共182页
matlab入门教程(快速入门).ppt_第5页
第5页 / 共182页
点击查看更多>>
资源描述

《matlab入门教程(快速入门).ppt》由会员分享,可在线阅读,更多相关《matlab入门教程(快速入门).ppt(182页珍藏版)》请在金锄头文库上搜索。

1、MATLAB 数学建模基础教程数学建模基础教程主讲者:高陈燕主讲者:高陈燕MATLAB数学建模基础教程数学建模基础教程MATLAB的概的概述述MATLAB程序设计基础程序设计基础MATLAB在数值计算中的应用在数值计算中的应用MATLAB的符号计算的符号计算MATLAB的图形处理的图形处理MATLAB程序设计基础程序设计基础uMATLAB语言的基本要素uMATLAB语言的核心矩阵u单元型数据和结构型数据uM文件u流程控制语句MATLAB语言的基本要素语言的基本要素v变量变量 变量不需要事先声明,也不需要指定变量类型,它会自动根据所赋予变量的值或对变量的操作来确定变量的类型;赋值过程中,如果变量

2、已存在,则用新值代替旧值,以新的类型代替旧的类型。 变量的命名规则:l变量名区分大小写;l变量名长度不超过31位,第31位之后的字符被忽略;l变量名以字母开头,变量名中可以包含字母、数字、下划线,但不能使用标点。 变量一般为局部变量,即仅在其调用的M文件内部有效;若要定义全局变量,须在变量前加关键字global。 Matlab语言主要是由几个基本要素构建而成的,其中包括变量、常量、数值、字符串、运算符及标点等。回到主目录回到主目录7/26/20244v常量常量 matlab中预定义的一些特殊的量。 i,j 虚数单位 Realmin 最小的正浮点数, pi 圆周率 Realmax 最大的浮点数,

3、 eps 浮点运算的相对精度 Inf 无穷大 NaN Not-a-Number ,表示不定值 例如:pians = %ans是默认的结果变量 3.14167/26/202451/0Warning: Divide by zero.ans = Inf0/0Warning: Divide by zero.ans = NaN7/26/20246 定义变量时应避免与常量名相同,如果改变了某个常量的值,可以用“clear+常量名”命令来恢复该常量的初始设定值。pi=1pi = 1clear pipians = 3.14167/26/20247v数值数值 数值缺省为实数保留小数点后4位浮点数表示。其输入格式

4、与C语言一致:如:9 -73 0.1999 1.475e6 输出格式由format命令控制,只是影响屏幕显示效果,不影响内部存储和计算。下面以pi为例。format long;pians = 3.14159265358979format long e;pians = 3.141592653589793e+000format long g;pians = 3.141592653589797/26/20248 z=2*exp(pi/3i)z = 1.0000 + 1.7321iMatlab语言还提供了复数的表达和运算功能。复数的基本单位表示为i或j。例如: 如果是表达式,必须在虚部的数值与i、j之

5、间使用乘号。 sin(pi/3)+cos(pi/3)j? sin(pi/3)+cos(pi/3)j Error: Unexpected MATLAB expression. sin(pi/3)+cos(pi/3)*jans = 0.8660 + 0.5000i7/26/20249v字符串字符串字符串用单引号输入或赋值;字符串的每个字符都是都是字符数组的一个元素;字符串和字符数组基本上等价。 s=i love yous =i love you size(s)ans = 1 10 s(2)ans = s(10)ans =u字符串的每个字符(包括空格)都是字符数组的一个元素。在matlab中,字符串

6、与字符数组或矩阵基本上是等价的。7/26/202410 如果在字符串内使用单引号时,可以用连续两个单引号表示。例如: 字符串之间的转换函数: double 字符串转换为数值代码 num2str 数字转换为字符串 int2str 整数转换为字符串 mat2str 矩阵转换为字符串 str2num 转换字符串为数字 double(s) %s=i love youans = 105 32 108 111 118 101 32 121 111 117 s=its goods = its good7/26/202411 a=1:5a = 1 2 3 4 5 b=num2str(a)b =12 3 4 5

7、 a*2ans = 2 4 6 8 10 b*2ans = 98 64 64 100 64 64 102 64 64 104 64 64 1067/26/202412 matlab对字符串的操作与C语言中的几乎完全相同: strcat 链结串 strcmp 比较串 strvcat 垂直链结串 strncmp 比较串的前n个字符 findstr 在其他串中找此串 upper 转换串为大写 lower 转换串为小写 blanks 生成空串 deblank 移去串中空格 例如:把前面的字符串s转化成大写。s=“it good” upper(s)ans =ITS GOOD执行字符串的功能用eval来实

8、现。t=1/(a*b-1);a=2;b=3;c=eval(t) % 可以在一行中表示。c = 0.20007/26/202413v运算符运算符 在matlab语言中运算符包括算术运算符、关系运算符和逻辑运算符。其中算术运算符见右表: 其中点运算是指操作元素点对点的运算,也就是说矩阵内元素对元素之间的运算,点运算要求参与运算的变量在结构上必须是相似的。例如:操作符定义+算术加-算术减*算术乘.*点乘算术乘方.点乘方算术左除.点左除/算术右除./点右除7/26/202414 a=1,2,3;4,5,6;7,8,9a = 1 2 3 4 5 6 7 8 9 b=1 2 34 5 67 8 9b =

9、1 2 3 4 5 6 7 8 9 c=a*bc = 30 36 42 66 81 96 102 126 150 d=a.*bd = 1 4 9 16 25 36 49 64 81思考:题目:通过描点法得到sin(x)xcos(x)函数在0-pi区间上的曲线。提示:通过点运算获得。(附件diancheng。txt)7/26/202415 Matlab语言的关系运算符如右表: 当判断一个矩阵是否为空矩阵时,一般不用“=”,而应当使用函数isempty。操作符定义=等于=不等于大于=大于等于小于a=1:3;4:6;7:9;x=5;y=ones(3)*5;xa=xb=0 1 0;1 0 1;0 0

10、1;ab=a&bab = 0 1 0 1 0 1 0 0 1nb=bnb = 1 0 1 0 1 0 1 1 07/26/202418a=magic(5);a(:,3)=zeros(5,1)a = 17 24 0 8 15 23 5 0 14 16 4 6 0 20 22 10 12 0 21 3 11 18 0 2 9a1=all(a(:,1)a2=all(a3)a2 = 1 1 0 0 0a11=any(a(:,1)10)a11 = 1a22=any(a10)a22 = 1 1 0 1 17/26/202419v标点标点 在matlab中一些标点符号也被赋以特殊的意义,或表示要进行一定的运

11、算等,如下表:标点定义标点定义:冒号,具有多种应用功能续行符;区分行,及取消结果显示%注释标记,区分列,及函数参数分隔符等!调用操作系统运算( )指定运算过程中的先后次序等 矩阵定义的标志等 用于构成单元数组等字符串的标示符7/26/202420 下面对上表中各标点作进一步的介绍。 首先,用冒号来定义行向量。基本格式:xx1:step:x2(初始值:步长:尾元素数值限) xx1:x2 (默认步长为1)注意注意:这里强调x2为尾元素数值限,而不是尾元素值。当x2-x1恰为步长的整数倍时,x2才能成为尾值。例如:7/26/202421 a=1:2:12a = 1 3 5 7 9 11 a=12:-

12、2:1a = 12 10 8 6 4 2 a=1:6a = 1 2 3 4 5 6 a=2:2:12a = 2 4 6 8 10 127/26/202422其次,通过使用冒号,可以截取指定矩阵中的部分。例如: a=1:18;a=reshape(a,3,6) %重组矩阵a = 1 4 7 10 13 16 2 5 8 11 14 17 3 6 9 12 15 18 a1=a(:,1:3) %提取矩阵a的第1到3列元素组成的子矩阵。 a1 = 1 4 7 2 5 8 3 6 9 a2=a(1:2,3:end)a2 = 7 10 13 16 8 11 14 17思考:B1=a(1:3,:)?7/26

13、/202423 分号在matlab语言中所起的作用是作为分隔行的标志,这里包括在矩阵定义中对行的区分以及在程序代码中对行的划分。在矩阵定义中,分号之间的数据被认为是矩阵的同一行。对于以分号结尾的行语句,matlab语言不会把其运算结果显示在命令窗口中。 逗号主要起两个作用。其一是逗号是函数参数的分隔符,也是矩阵下标的分隔符。其二是逗号也是区分矩阵列的标志,在同一行中,逗号分隔开的是各个列。 括号是调整运算先后次序的标点,可以通过引用括号来调整运算次序。 矩阵的定义需要使用中括号。此外,中括号可以表示空矩阵,并通过该空矩阵实现对矩阵的部分删除。以下举例:7/26/202424 a=1,2,3,4

14、;5,6,7,8;4,3,2,1;8,7,6,5a = 1 2 3 4 5 6 7 8 4 3 2 1 8 7 6 5 a(:,1:2)=a = 3 4 7 8 2 1 6 5 b=a(1 3,:)b = 3 4 2 17/26/202425 大括号是单元型数据所特有的标点。后面介绍。 小数点“.”,它起到了数学符号的作用;而作为点运算的标志符,它又构成了各种各样的点运算;最重要的是它可作为结构型数组应用时的专有符号。 “”为matlab语言中的续行符,但是该续行符只能出现在各个语义群之间,也就是说不能出现在变量名之间,否则出错。例如: a=sin(pi/4)+cos(pi/4)-tan(pi

15、/4).+cot(pi/4)a = 1.4142 a=sin(pi/4)+cos(pi/4)-t.an(pi/4)? an(pi/4) |Error: Unexpected MATLAB expression.7/26/202426 在matlab语言中,一行内在“%”之后的文字均被认为是对M文件或程序代码的解释部分。 “!”可以在命令窗口直接调用操作系统命令,例如DOS命令,并将结果展示在命令窗口中,比如在命令窗口中调用“!dir c”,以显示C盘的文件列表。 单引号作为字符串的标示符而存在,同时,它在矩阵运算中也表示矩阵的转置运算及复数的共轭值。7/26/202427 a=1,2,3,4;

16、5,6,7,8a = 1 2 3 4 5 6 7 8 aans = 1 5 2 6 3 7 4 8 s=3-4i;sans = 3.0000 + 4.0000i回到主目录回到主目录7/26/202428MATLAB语言的核心语言的核心矩阵矩阵v矩阵的生成矩阵的生成l直接输入小矩阵(最简便的方法)直接输入小矩阵(最简便的方法) 注意点:输入矩阵时要以“ ”为其标识,即矩阵的元素应在“”内部。矩阵的同行元素之间可由空格或“ ,”分隔,行与行之间用“;”或回车符分隔。矩阵元素可为运算表达式。无任何元素的空矩阵也合法。回到主目录回到主目录7/26/202429A = 1,2,3; 4,5,6; 7,8

17、,9A = 1 2 3 4 5 6 7 8 9a=1 2 34 5 67 8 9a = 1 2 3 4 5 6 7 8 9创建带有运算表达式的矩阵:b=sin(pi/3),cos(pi/4);log(9),tan(pi/4);% 什么样的结果?7/26/202430l利用中括号将小矩阵合成一个大矩阵利用中括号将小矩阵合成一个大矩阵 b=1,2;3,4; a=b,b;b2,b*3a = 1 2 1 3 3 4 2 4 7 10 3 6 15 22 9 12l从外部文件引用矩阵(从外部文件引用矩阵(excel,txt) (shuju1,shuju2)7/26/202431l特殊矩阵的生成特殊矩阵的

18、生成常用的特殊矩阵常用的特殊矩阵 空 阵: 单 位 阵:eye(m,n); eye(m) 零 矩 阵:zeros(m,n); zeros(m) 全 1 阵:ones(m,n); ones(m) 对 角 阵:对角元素向量 V=a1,a2,an A=diag(V) 随 机 阵:rand(m,n) 产生一个mn的均匀分布的随机矩阵7/26/202432 eye(2,3)ans = 1 0 0 0 1 0 zeros(2,3)ans = 0 0 0 0 0 0 ones(2,3)ans = 1 1 1 1 1 1v=5 6 7;a=diag(v)a = 5 0 0 0 6 0 0 0 7 eye(2)

19、ans = 1 0 0 1 zeros(2)ans = 0 0 0 0 ones(2)ans = 1 1 1 1 如果已知a为方阵,则v=diag(a)可以提取a的对角元素构成向量v。7/26/202433其他特殊矩阵其他特殊矩阵 compan 友矩阵函数 magic 魔方矩阵 hankel Hankel矩阵 rosser 对称特征值测试矩阵 hilb Hilbert矩阵 pascal Pascal矩阵 invhilb 反Hilbert矩阵 vander 范德蒙矩阵 其中,compan(c),结果是生成一以向量c为系数的多项式的特征矩阵。hilb所生成的hilbert矩阵的特点是矩阵中的元素值

20、为1/(i+j-1)。7/26/202434单元型数据和结构型数据单元型数据和结构型数据l单元型变量单元型变量 单元型变量是matlab语言中较为特殊的一种数据类型。本质上讲,单元型变量为任意类型的多维数组。 单元型变量可有两种方式:一种是用赋值语句直接定义,另一种是由cell函数预先分配存储空间,然后对单元元素逐个赋值。 在直接赋值过程中,与在矩阵的定义中使用中括号不同,单元型变量的定义需用大括号,而元素间用逗号隔开。回到主目录回到主目录7/26/202435a=1,2;3,4a = 1 2 3 4b=1:4,a,abcdb = 1x4 double 2x2 double abcdcellp

21、lot(b) %图形显示单元型变量的内容 celldisp(b) %显示单元型变量的内容b1 = 1 2 3 4b2 = 1 2 3 4 b3 = abcd7/26/202436 单元型变量元素的引用采用大括号为下标标识,用小括号只显示该元素的压缩形式。例如:b2ans = 1 2 3 4b(2)ans = 2x2 double注意:单元型变量的元素不是以指针方式保存的。思考:如果改变了上例中的a矩阵,那么单元型变量b中的第二个元素改变不?7/26/202437 单元型变量与矩阵的另一个区别是单元型变量自身可以嵌套。例如: c=cell(1,3) %另一种定义法 c1,1=1:4; c1,2=

22、a; c1,3=b;% b=1:4,a,abcd cc = 1x4 double 2x2 double 1x3 cell c33ans =abcd7/26/202438l结构型变量结构型变量 在matlab语言中结构型变量的定义也有两种方法,其一是直接赋值定义,其二是由函数struct定义。以指针操作符“.”连接结构型变量名与属性名。 直接赋值时,应当指出结构中的属性名。例如: A.a1=abcd; %字符串类型 A.a2=1; %数值类型 A.a3=1,2,3,4; %数组类型 AA = a1: abcd a2: 1 a3: 1 2 3 4 思考思考:如何引用结构型变量名A中a1属性的c元素

23、。 7/26/202439 由函数struct定义结构型变量,其调用格式如下: 结构型变量名=struct(元素名1,元素值1,元素2,元素值2,) B=1,2;3,4; C=struct(c1,1,c2,B,c3,abcd)C = c1: 1 c2: 2x2 double c3: abcd C.c2ans = 1 2 3 47/26/202440 结构型变量可以嵌套定义。例如: C.c1=A %前面结构型变量AC = c1: 1x1 struct c2: 2x2 double c3: abcd C.c1.a1 %嵌套结构型变量的引用ans = abcd7/26/202441M文件文件 所谓M

24、文件就是由matlab语言编写的可在matlab语言环境下运行的程序源代码文件。Matlab语言中的M文件可分为命令式(script)和函数式(function)两种形式。M文件可在matlab的程序编辑器中编写,也可在其他的文本编辑器中编写,并以“.m”为扩展名加以保存。v命令式文件命令式文件 命令式文件就是命令行的简单叠加,matlab会自动按顺序执行文件中的命令。值得注意的是,命令式文件在运行过程中可以调用matlab工作域内所有的数据,而且所产生的所有变量均为全局变量。回到主目录回到主目录7/26/202442v函数式文件函数式文件 函数式文件主要用于解决计算中的参数传递和函数调用的问

25、题。函数式的标志是它的第一行为function语句。函数式文件可以有返回值,也可以没有。函数式文件执行之后,只保留最后结果,不保留任何中间过程,所定义的变量也仅在函数内部起作用,并随着调用的结束而被清除。即除无特殊声明外,其变量均为局部变量。 注意: 存储函数式M文件时文件名要与主函数名相一致。7/26/202443函数式文件:function abcd(a,b)c=a+bd=b-a保存为abcd.m在工作窗口中调用:a=2;b=3,4,5,6;abcd(a,b)c = 5 6 7 8d = 1 2 3 4c %结果是什么?命令式文件:a=2;b=3 4 5 6;c=a+b;d=b-a;保存为

26、:abcd.m在工作窗口中调用:abcd %文件名即可 cc = 5 6 7 8 dd = 1 2 3 47/26/202444v函数变量及变量作用域函数变量及变量作用域 变量主要有输入变量、输出变量及函数内部变量。 输入变量相当于函数的入口数据,是一个函数操作的主要对象。函数的作用就是对输入变量进行加工以实现一定的功能。函数的输入变量为形式参数,即只是传递变量的值而不是变量的地址,函数对输入变量的一切的操作和修改如果不依靠输出变量传出的话,将不会影响工作空间 中该变量的值。 matlab语言提供了函数nargin来控制输入变量的个数,即可以实现不定参数输入的操作。例如:在函数test1中,如

27、果调用过程时只提供一个输入变量,则求该输入变量的模;如果是两个输入变量,则求两个输入变量的和7/26/202445%如果调用过程时只提供一个输入变量,则求该输入变量%的模; 如果是两个输入变量,则求两个输入变量的和function c=test1(a,b)if nargin=1 c=norm(a);elseif nargin=2 c=a+b;end在工作窗口调用: a=2 3 4a = 2 3 4 test1(a)ans = 5.3852 b=3; test1(a,b)ans = 5 6 77/26/202446 同时,matlab语言还提供了另一个针对输入变量的函数varargin。该函数可

28、以实现不定数目输入变量的函数的程序设计。此时,对函数的一切输入变量均将存储在以varargin命名的单元型数组中。例:在函数test2中,实现如下功能: 通过使用函数varargin,用户可以输入任意多个学生的 数学、英语及语文的成绩,然后求各科目的平均值。 程序如下:7/26/202447function mathavg,englishavg,chineseavg=test2(varargin)s=length(varargin); %求数组的长度mathsum=0;englishsum=0;chinesesum=0;for j=1:s mathsum=mathsum+vararginj(1

29、); englishsum=+vararginj(2); chinesesum=+vararginj(3);endmathavg=mathsum/s;englishavg=englishsum/s;chineseavg=chinesesum/s;思考:此函数如何调用。7/26/202448 与输入变量相对应,matlab语言对输出变量也提供了相应的函数,如nargout、varargout等。具体的使用与函数nargin和varargin相似。 下面给出一个综合应用示例。 示例函数test3中,综合使用了函数nargin、nargout、narargin、narargout等,函数目的是求各学

30、生(总数不确定)的个人平均成绩,以及指定科目的平均成绩等。函数test2的调用:90,89,60分别表示数学、英语、语文的成绩 a,b,c=test2(90,89,60,79,89,66,99,98,100)a = 89.3333b = 32.6667c = 33.3333思考:如果多个学生的成绩是同一科目的成绩放在一个数组中,如何修改test2函数。7/26/202449 function vararout=test3(lessons,varargin)inputnum=nargin; lessonnum=length(lessons);outputnum=nargout;for i=1:l

31、essonnum switch lessons(i) case math vararout1=sum(varargin1:inputnum(1); case english vararout2=sum(varargin1:inputnum(2); case chinese vararout3=sum(varargin1:inputnum(3); endendfor i=1:inputnum varargouti+3=sum(varargini(:);end7/26/202450 在matlab中,函数内部定义的变量除特殊声明外均为局部变量。如果需要使用全局变量,则应当使用命令global定义,

32、而且在任何使用该全局变量的函数中都应加以定义,在命令窗口中也不例外。 注意:变量之间必须以空格分隔,而不能用逗号分隔。示例:function avgs=test4(A)global s ss %定义全局变量m,n=size(A);for i=1:m s(i)=sum(A(i,:);endss=sum(s);avgs=ss/(m*n);调用test4: a=4 3 5;6 7 8;3 5 7;1 3 4; test4(a)ans = 4.6667 global s ss ssss = 56 ss = 12 21 15 87/26/202451v子函数与局部函数子函数与局部函数 Matlab中也可

33、以定义子函数,用来扩充函数的功能。在函数文件中题头定义的函数为主函数,而在函数体内定义的其他函数均被视为子函数。子函数只能为主函数或同一主函数下的其他的子函数所调用。示例:function c=test(a,b) %主函数c=test1(a,b)*test2(a,b);function c=test1(a,b) %子函数1c=a+b;function c=test2(a,b) %子函数2c=a-b;7/26/202452 局部函数与子函数的区别是:局部函数可以被其父目录下的所有函数所调用,而子函数则只能被其所在M文件的主函数所调用;在函数编辑的结构上,局部函数与一般的函数文件的编辑相同,而子函

34、数则只能在主函数文件中编辑。7/26/202453v程序设计的辅助函数程序设计的辅助函数l 用户交互函数用户交互函数 键盘输入函数包括函数input及keyboard。 函数input用于提示用户输入指定参数的值,调用格式: var=input(提示性语句) 其中,“提示性语句”将给出相应的提示信息以告知用户输入的对象,在这种调用过程中,用户可以有键盘输入任何的可计算的表达式或已赋值的当前工作空间中的变量名,而且返回至变量var中的值也是数值型,所有的输入以回车键加以确认。 7/26/202454第一种调用格式: a=input(input examplen)input example1+4a

35、 = 5 ischar(a)ans = 0第二种调用格式: b=input(input examplen,s)input example1+4b =1+4 ischar(b)ans = 1函数input的另一种调用格式: var=input(提示性语句,s)以该格式调用时,input函数将视用户键盘输入的一切字符为字符型赋予变量var,而不对其进行任何计算。在提示型语句中可以用“n”来控制显示时的换行。例如:7/26/202455 另一种输入函数为keybroad,该函数出现在M文件中时,将终止程序的运行,此时用户可以查看运算过程中各变量的值必要时也可进行适当的干涉及编辑。同时该函数在matl

36、ab语言中均可应用,直到键入return并回车,这时程序返回中断处,继续执行其余代码。 matlab也提供了一种中断函数pause,其调用格式: pause(n) 该命令的作用是中断程序运行并等待n秒。如果不带参数,则程序无限期中断,直到用户在键盘上键入任意键。7/26/202456流程控制语句流程控制语句 Matlab语言的流程控制语句主要有for、while、if-else-end和switch-case这四种语句。vfor语句语句 for循环语句是流程控制语句中的基础,使用该循环语句可以以指定的次数重复执行循环体内的语句。 for循环语句的调用形式: for 循环控制变量=(可以是已定义

37、的向 量,也可在for循环语句中定义) 循环体 end回到主目录回到主目录7/26/202457for i = 1:4 % 初始值:步长:终值(步长默认为1)for j = 4:-1:1H(i, j) = 1/(i+j-1);endend结果: HH = 1.0000 0.5000 0.3333 0.2500 0.5000 0.3333 0.2500 0.2000 0.3333 0.2500 0.2000 0.1667 0.2500 0.2000 0.1667 0.14297/26/202458 循环次数的设定还可以由mxn矩阵来实现,此时,整个循环将执行n次,并且每次循环变量为一列向量。例如

38、:a=1 2 3 4;5 6 7 8;s=0;for i=a i s=s+1;endi = 1 5i = 2 6i = 3 7i = 4 8s= ?7/26/202459vwhile语句语句 while循环语句与for循环语句不同的是,前者是以条件的满足与否来判断循环是否结束的,而后者则是以执行次数是否达到指定值来判断的。 while循环语句的一般形式: while 循环体 end 循环判断语句为某种形式的逻辑判断表达式。当表达式的值为真时就执行循环体内的语句;否则退出。当循环判断语句为矩阵时,当且仅当所有的矩阵元素非零时,逻辑表达式的值为真。例如:7/26/202460n = 0;while

39、 2n 100 n = n + 1;end 从例子中可以看出while循环语句与for循环语句是有异曲同工之处的。但是两者还是有区别的,for循环语句一般适用于已知到循环次数,而不知道循环运算目标的问题;while循环语句则一般适用于已知循环运算目标,而循环次数未知的问题。break语句:当程序流程运行至该命令时,则不论循环控制变量是否满足循环判断语句,均将退出当前循环,执行循环后的其他语句。continue命令:当程序流程运行至该命令时,会忽视其后的循环体操作转而执行下一层的循环。7/26/202461例例1.计算级数计算级数:S=1+2+22+23+263=法一:s=0;i=0;while

40、 i n=0:1:63;S=sum(2.n)7/26/202462vif-else-end语句语句 if-else-end语句的一般形式: if 逻辑值为“真”时执行语句 else 逻辑值为“假”时执行语句 end例如: if a=1 a=a+1; else a=a+2; end7/26/202463 在程序设计中,也常碰到需要进行多重逻辑选择的问题,这时可以采用if-else-end语句的嵌套形式: if 逻辑值1为“真”时执行语句 elseif 逻辑值2为“真”时执行语句 elseif else 当以上所有的逻辑值均为“假”时执行语句 end7/26/202464If AB greater

41、elseif AB lesselseif A=B equalelse error(Aand B are different data) end解读这段程序:a=10000; n=0; z=1;while z an = n + 1;if mod(n,2)=1 continueendz=2n-1; if isprime(z)%是否质数 break endend7/26/202465vswitch-case语句 switch-case语句是用于解决多分支判断选择的问题。 switch-case语句的一般表达形式: switch case 选择判断值1 选择判断语句1case 选择判断值2 选择判断语

42、句2otherwise 判断执行语句end7/26/202466例如:code=1switch code case -1 disp(error); case 0 disp(write in English); case 1 disp(write in Chinese); otherwise disp(write in French);end结果: write in Chinese 注意:在matlab语言中,即使有多条case判断语句为真,也只执行所遇到的第一条为真的语句。不必像C语句那样,在每条case语句后加上break语句防止继续执行后面为真的case条件语句。7/26/202467例:

43、求鸡兔同笼问题:鸡兔同笼,头共36,脚共100.求鸡、兔各几只? 程序如下:i=1;while 1 if mod(100-2*i,4)=0& i+(100-2*i)/4=36 %函数mod表示取余 break; endenda1=i;a2=36-i;上述程序中有两个错误,请指出!7/26/202468MATLAB在数值计算中的应用在数值计算中的应用u数值计算的基本要素及相关函数数值计算的基本要素及相关函数u数据的统计分析数据的统计分析u曲线拟合及插值曲线拟合及插值u数值分析数值分析7/26/202469数值计算的基本要素及相关函数数值计算的基本要素及相关函数MATLAB语言在数值计算中的基本要

44、素主要有数组、多项式和矩阵。v数组及相关函数数组及相关函数l数组的创建数组的创建 数组的定义相当简捷,主要有三种格式: xx1:step:x2 (初始值:步长:尾元素数值限)y=linspace(x1,x2,n) (初始值:终止值:数组元素个数)n默认为100y=logspace(x1,x2,n) (初始值:终止值:数组元素个数)n默认为50回到主目录回到主目录7/26/202470例如: a=1:2:12a = 1 3 5 7 9 11 b=linspace(1,10,10)b = 1 2 3 4 5 6 7 8 9 10 c=logspace(0,2,10)c = 1.0000 1.668

45、1 2.7826 4.6416 7.7426 12.9155 21.5443 35.9381 59.9484 100.00007/26/202471l数组的操作数组的操作 例如:a = 1 3 5 7 9 11 a(3) %取a数组中的第3个元素ans = 5 a(2:5) %取数组a中第2个元素到第5个元素ans = 3 5 7 9 a.2 %数组的平方ans = 1 9 25 49 81 121 length(a) %检测数组的长度,返回数组的元素个数ans = 67/26/202472l多维数组多维数组 多维数组从某种角度来看,它是矩阵在维数上的扩张,实际上也是矩阵中的一个特例。它可以是

46、数值型、字符型、单元型或结构型等。 多维数组在创建及处理上与一维数组或普通矩阵有很大的不同。其创建方法有很多,可以仿照一维数组的定义,也可以通过matlab的有关函数来创建。 直接赋值:例如: A(:,:,1)=1 2 3;4 5 6;6 7 8; A(:,:,2)=7 8 9;5 6 7;3 2 1; A(:,:,3)=9 8 7;6 5 4;2 3 4;7/26/202473注意多维数组的显示方法: AA(:,:,1) = 1 2 3 4 5 6 6 7 8A(:,:,2) = 7 8 9 5 6 7 3 2 1A(:,:,3) = 9 8 7 6 5 4 2 3 4A(2,3,2)=?A

47、(:,:,1)A(:,:,2)A(:,:,3)1 2 34 5 66 7 8 7 8 95 6 73 2 19 8 76 5 42 3 4数组A就像一个分块矩阵,每块都是3x3的矩阵。7/26/202474 还可以简单的只对其中某一维的元素进行赋值。系统会根据赋值的情况来确定该变量的具体维数结构并将其他未赋值的元素自动赋为零。例如: B(:,:,3)=1,2;3,4; BB(:,:,1) = 0 0 0 0B(:,:,2) = 0 0 0 0B(:,:,3) = 1 2 3 4 C(:,2,:)=1 2 ; 3 4; CC(:,:,1) = 0 1 0 3C(:,:,2) = 0 2 0 4问

48、:e(:,2,:)=1 2 3; 4 5 6将是什么样的数组?S(2,:,:)=1 2 3;4 5 6? 1 2 3 47/26/202475 matlab语言中也提供了相应的函数来创建多维数组,如rand、ones、zeros等。其使用方法与创建一维数组相同。例如: D=rand(2,3,2,2) %该例中显示了四维数组。% 类似于2x2的分块矩阵,每块都是2x3的矩阵。D(:,:,1,1) = 0.9501 0.6068 0.8913 0.2311 0.4860 0.7621D(:,:,2,1) = 0.4565 0.8214 0.6154 0.0185 0.4447 0.7919D(:,

49、:,1,2) = 0.9218 0.1763 0.9355 0.7382 0.4057 0.9169D(:,:,2,2) = 0.4103 0.0579 0.8132 0.8936 0.3529 0.0099111221227/26/202476 函数cat也是创建多维数组的一个实用的工具。 其调用方法:cat(dim,A1,A2,) 输入参数中的dim为定义的维数,A1、A2等为构建数组的元素。例如: E=cat(4,1 2;3 4,5 6;7 8)E(:,:,1,1) = 1 2 3 4E(:,:,1,2) = 5 6 7 87/26/202477v多项式及相关函数多项式及相关函数l 多项

50、式的定义多项式的定义 多项式的定义如下:对于多项式 ,用以下行向量表示:这样就把多项式的问题转化为行向量的问题了。7/26/202478 最简单的多项式输入即为直接的向量输入,matlab自动将向量元素按降幂顺序分配给各系数值。 例如:输入多项式x3-5x2+6x-33. p=1 -5 6 -33; poly2sym(p) %此函数可将多项式向量表示成符号多项式形式 ans = x3-5*x2+6*x-337/26/202479l多项式的操作多项式的操作下表是matlab中较常用的多项式函数。函数名说明函数名说明roots多项式求根polyfit多项式拟合poly由根创建多项式polyder求

51、多项式导数polyval多项式求值conv多项式乘法polyvalm矩阵多项式求值deconv多项式除法7/26/202480 多项式求根函数roots的调用格式: roots(P) 通过该函数可以求得方程p=0在复数范围内的解。例如: 函数poly与roots相对应,其作用是由多项式对应的方程的根来创建多项式。例如: p=1 0 3 2 1 1; r=roots(p)r = 0.3202 + 1.7042i 0.3202 - 1.7042i -0.7209 0.0402 + 0.6780i 0.0402 - 0.6780i poly(r)ans = 1.0000 0.0000 3.0000

52、2.0000 1.0000 1.0000可见roots与poly是互逆运算。注意:由poly创建的多项式最高次系数为1.7/26/202481 Matlab中通过函数polyval和函数polyvalm可求得多项式在给定点的值:函数polyval:在输入变量值代人多项式计算时是以数组为单位的,polyval(p,v)。函数polyvalm:以矩阵为计算单位,进行矩阵式运算,以求多项式的值,polyvalm(p,v)。这两种计算在数值上有很大差别。例如:对同一多项式及变量值分别计算矩阵计算值和数组计算值。7/26/202482 p=1 11 55 125;b=1 1;1 1; polyval(p

53、,b)ans = 192 192 192 192 polyvalm(p,b)ans = 206 81 81 2067/26/202483 多项式的乘法由函数conv来实现,此函数同于向量的卷积; 多项式的除法由函数deconv来实现,此函数同于向量的解卷。 例:计算两个多项式的乘除法。 p=2 -5 6 -1 9; poly2sym(p)ans =2*x4-5*x3+6*x2-x+9 d=3 -90 -18; poly2sym(d)ans =3*x2-90*x-18 pd=conv(p,d)pd = 6 -195 432 -453 9 -792 -162 poly2sym(pd)ans =6*

54、x6-195*x5+432*x4-453*x3+9*x2-792*x-162 p1=deconv(pd,d) %与p相同p1 = 2 -5 6 -1 97/26/202484多项式的微分由函数polyder来实现。例:对上例中多项式p进行微分计算。 p=2 -5 6 -1 9; poly2sym(p)ans = 2*x4-5*x3+6*x2-x+9 dp=polyder(p)dp = 8 -15 12 -1 poly2sym(dp)ans =8*x3-15*x2+12*x-17/26/202485v矩阵及相关函数矩阵及相关函数l矩阵的基本运算矩阵的基本运算 矩阵的加减运算与传统的矩阵运算相同,

55、但在乘法运算中,就有关于算术乘(矩阵乘方)与点乘(点乘方)的区别,下面用示例说明两者的具体差别。 a=1 2;3 4; b=5 6;7 8; c=a*bc = 19 22 43 50 d=a.*bd = 5 12 21 32 a2ans = 7 10 15 22 a.2ans = 1 4 9 167/26/202486 在介绍矩阵除法前,先介绍矩阵与线性方程组之间的关系。对于线性方程组Axb,其中A为(nm)阶矩阵:n=m且非奇异时,方程为恰定方程;nm 方程为超定方程;(方程个数大于未知数的个数)nm,矩阵除法仍然可以得到方程的解,但不是精确解,而是近似解,该解确保误差向量Ax-b的二范数最

56、小。如果nm A=1,4,6;3,5,6;7,8,3;4,6,7; b=34,54,57,87; x=Abx = 25.2078 -20.5201 14.8480 res=A*x-b; norm(res,2)ans = 9.8821例如:n A=2 4 4 5;3 4 5 1;7 8 3 6; b=23 45 57; x=Abx = 0 10.2187 1.8333 -5.0417 norm(A*x-b,2)ans = 2.5619e-0147/26/202488线性方程组的另一种解法:就是利用伪逆函数pinv:x=pinv*b。 例如: A=2 4 4 5;3 4 5 1;7 8 3 6;

57、b=23 45 57; y=pinv(A)*b y = 4.9710 4.0050 3.4903 -3.3847 norm(A*x-b,2) ans = 2.5619e-0147/26/202489l矩阵函数矩阵函数 这里介绍部分常用的函数。以示例的形式说明。 A=1 2 3;4 5 6;7 8 9; diag(A) %抽取矩阵的对角线ans = 1 5 9 diag(diag(A) %由矩阵的对角线生成对角阵ans = 1 0 0 0 5 0 0 0 97/26/202490A = 1 2 3 4 5 6 7 8 9 tril(A) %抽取矩阵的下三角ans = 1 0 0 4 5 0 7

58、8 9 flipdim(A,2) %以第2列为轴线翻转矩阵ans = 3 2 1 6 5 4 9 8 77/26/202491A = 1 2 3 4 5 6 7 8 9 find(A) %返回矩阵A的非零元素的存储下标,是列向量,故转置显示ans = 1 2 3 4 5 6 7 8 9 rot90(A) %矩阵A逆时针旋转90度ans = 3 6 9 2 5 8 1 4 7 rank(A) %求矩阵A的秩ans = 27/26/202492A = 1 2 3 4 5 6 7 8 9 det(A) %求矩阵A的行列式ans = 0 cond(A) %求矩阵的条件数ans = 5.0524e+01

59、6 在matlab中,判断矩阵的奇异性一般用函数cond,求矩阵的条件数,即矩阵最大奇异值与最小奇异值的比值。当矩阵的条件数很大时,说明矩阵趋近于奇异。7/26/202493函数 x,y=eig(A) 可以求出矩阵A的特征值和特征向量的值 x为特征向量矩阵,y为特征值矩阵。A=7 3 -2;3 4 -1;-2 -1 3;x,y=eig(A)x = 0.5774 0.0988 -0.8105 -0.5774 -0.6525 -0.4908 0.5774 -0.7513 0.3197y = 2.0000 0 0 0 2.3944 0 0 0 9.60567/26/202494 Svd函数给出了矩阵

60、的奇异值以及奇异值分解矩阵。 U,S,V=svd(X) 其中XUSVa=1;1;U,S,V=svd(a)U = 0.7071 -0.7071 0.7071 0.7071S = 1.4142 0V = 17/26/202495 LU分解:L,U=lu(A) 又称三角分解,目的是分解成一个下三角阵L和一个上三角阵U的乘积,即ALUa=1 2 3;2 4 1;4 6 7;l,u=lu(a)l = 0.2500 0.5000 1.0000 0.5000 1.0000 0 1.0000 0 0u = 4.0000 6.0000 7.0000 0 1.0000 -2.5000 0 0 2.5000注意:L

61、实际上是一个“心理上”的下三角矩阵,它事实上是一个置换矩阵P的逆矩阵与一个真正下三角矩阵L1(其对角线元素为1)的乘积。7/26/202496Chol分解:如果A为n阶对称正定矩阵,则存在一个非奇异下三角实矩阵L,使得ALLT,当限定L的对角元素为正时,这种分解是唯一的。a=4 -1 1;-1 4.25 2.75;1 2.75 3.5;chol(a)ans = 2.0000 -0.5000 0.5000 0 2.0000 1.5000 0 0 1.00007/26/202497 正交分解:AQR 将矩阵A做正交化分解,使得Q*R=A,其中Q为正交矩阵(其范数为1,指令norm(Q)=1),R为

62、对角化的上三角矩阵。a=1 1 1;2 -1 -1;2 -4 5;q,r=qr(a)q = -0.3333 -0.6667 -0.6667 -0.6667 -0.3333 0.6667 -0.6667 0.6667 -0.3333r = -3 3 -3 0 -3 3 0 0 -37/26/202498数据的统计分析数据的统计分析 一般来讲,矩阵的每一列代表统计过程不同的数据结果,而每一行则相应代表不同的样品。v统计函数介绍统计函数介绍 统计函数中的大部分函数都是针对列进行操作的。下表中列出部分常用的统计函数。回到主目录回到主目录7/26/202499函数函数说明说明函数函数说明说明max最大分

63、量 cumsum列累计和min最小分量cumprod列累计积mean平均值或列的平均值sort按升序排列std列的标准差sortrows按升序对行排列var列的方差trapz梯形数值积分corrcoef相关系数cov协方差矩阵sum列求和conv卷积prod列求积hist直方图7/26/2024100v应用实例应用实例 数据如下给出了12个学生的英语、数学、物理、化学和哲学的成绩。score = 90 99 98 97 77 90 67 87 56 67 89 99 76 67 77 78 88 98 76 89 56 66 75 45 86 67 78 78 89 90 88 78 89 7

64、5 85 65 75 76 63 74 73 63 84 76 90 76 86 94 83 53 90 97 97 96 90 71 83 53 55 787/26/2024101例如: score_sum=sum(score) %求各科成绩总分score_sum = 933 979 1005 878 956 score_avg=score_sum./12 %求各科平均成绩score_avg = 77.7500 81.5833 83.7500 73.1667 79.6667 score_max=max(score) %求各科的最高分score_max = 90 99 98 97 90 sco

65、re_max,score_max_student=max(score) %求各科的最高分, %并返回获得最高分的学生的编号score_max = 90 99 98 97 90score_max_student = 1 1 1 1 67/26/2024102 问题:根据上述数据。求的各科的最低分,并返回获得最低分的学生编号? score_stu_sum=sum(score) %注意score 什么意思?用意何在?score_stu_sum = 461 367 408 429 328 402 415 353 386 392 470 340 std(score) %各科成绩的标准差ans = 11.

66、6940 12.7098 13.1434 16.5575 11.2681 var(score) %各科成绩的方差ans = 136.7500 161.5379 172.7500 274.1515 126.96977/26/2024103曲线拟合及插值曲线拟合及插值v曲线拟合函数曲线拟合函数 多项式拟合函数:polyfit。该函数的结果将保证在数据点上拟合值与数据值差的平方和最小,即最小二乘曲线拟合。 调用格式: polyfit(X,Y,n) 执行该函数将产生一个n阶多项式P,并且使得P(X)=Y。回到主目录回到主目录7/26/2024104例:用5阶多项式对0,pi/2上的正弦函数进行最小二乘

67、拟合。 x=0:pi/20:pi/2; y=sin(x);a=polyfit(x,y,5); %用5阶多项式拟合 x1=0:pi/30:pi/2; y1=sin(x1);y2=a(1)*x1.5+a(2)*x1.4+a(3)*x1.3+a(4)*x1.2+a(5)*x1+a(6); plot(x1,y1,b-,x1,y2,r*)legend(原曲线,拟合曲线) axis(0,2,0,1.5)7/26/2024105v插值函数插值函数 插值分为一维插值和二维插值。一维插值是在线的方向上对数据点进行插值;二维插值则可以理解为在面的方向上进行插值。函数名说明interp一维插值interplq快速一

68、维线性插值interpft一维傅里叶插值interp2二维插值interp3三维插值interpnn维插值7/26/2024106 一维插值函数是最简单最重要的插值函数,其调用方法: Y1=interp(X,Y,X1,插值方式) 其中,X为节点向量值,Y是对应的节点函数值, X1是插值点。返回的Y1是计算插值点X1的函数值。 插值方式有:nearest 线性最近项插值linear 线性插值(默认方法)spine 三次样条插值cubic 三次插值要求:X可以不是等间距的,但必须是单调的。7/26/2024107v应用实例应用实例 本节将介绍各种拟合插值函数的应用。x=logspace(0,0.5

69、,10); y=sin(x);f2=polyfit(x,y,2); %用二阶拟合f6=polyfit(x,y,6); %用六阶拟合y2=polyval(f2,x); %求多项式f2在x上的值y6=polyval(f6,x); plot(x,y,r-,x,y2,b*,x,y6,+) %拟合结果示意图7/26/2024108x=0:0.1:1;y=0.232 0.3465 0.890 0.756 1.23 1.45 0.56 0.34 0.07 -0.02,0.67;f2=polyfit(x,y,2)f4=polyfit(x,y,4)f12=polyfit(x,y,12)y2=polyval(f2

70、,x); y4=polyval(f4,x); y12=polyval(f12,x); plot(x,y,o,x,y2,:*,x,y4,:x,x,y12,:p) 从这两个拟合例子可看出,曲线拟合时,并不是阶数越高越好。7/26/2024109最小二乘法拟合(polyfit)设y=span1,x,x2,用最小二乘法拟合下表所示的数据。x0.511.522.53y1.752.453.814.888.67/26/2024110x=0.5 1 1.5 2 2.5 3;y=1.75 2.45 3.81 4.8 8 8.6;a=polyfit(x,y,2)x1=0.5:0.05:3;y1=a(1)*x1.2

71、+a(2)*x1+a(3); %*plot(x,y,*)hold onplot(x1,y1,-r)7/26/2024111数值分析数值分析 数值分析主要讨论有关函数的极值问题、零点问题以及微积分问题等。v数值分析函数数值分析函数1、极值函数 fminbnd: X=fminbnd(fun,X1,X2) 其中fun是欲求极值的函数,X1,X2是求极值的范围。2、求根函数 fzero: X=fzero(fun,X0) 其中fun为欲求根函数;而当X0为一个数值时,结果将返回距X0最近的方程的根,当X0为一个两元素的数组时,结果将返回X0的两元素间的方程的根。回到主目录回到主目录7/26/202411

72、23、数值积分函数 quad、quad8、dblquad: quad函数为低阶数值积分函数。Q=quad(fun,A,B) 该函数的结果将返回fun在A和B之间的积分结果。 quad8函数为高阶数值积分函数。 Q=quad8(fun,A,B) dblquad函数是求解二次积分: R=dblquad(fun,inmin,inmax,outmin,outmax) 其中inmin,inmax为内层积分变量的变化区域,outmin,outmax为外层积分变量的变化区域。7/26/20241134、图形函数 ezplot和fplot 函数ezplot调用格式: ezplot(fun,a,b) 该函数在区

73、间a,b内绘制函数fun的曲线。7/26/2024114v应用实例应用实例例如: %极值函数示例x=fminbnd(cot,1,2)x = 1.9999 %零点函数示例 x=fzero(cot,1) %给出函数cot在1附近的零点x = 1.5708 x=fzero(cot,1,2) %给出cot在区间1,2中的零点x = 1.57087/26/2024115%数值积分函数示例 q=quad(sin,1,2)q = 0.9564%定义双参数函数function z=test5(x,y)z=y.*sin(x)+x.*cos(y);%求其在区间1:2,1:2内的积分 q=dblquad(test5

74、,1,2,1,2)q = 1.5364%图形函数示例 ezplot(sin,0,2*pi) fplot(sin(1/x),1,2*pi)7/26/2024116MATLAB的符号计算的符号计算u符号表达式符号表达式u符号矩阵的基本运算符号矩阵的基本运算u符号矩阵的简化符号矩阵的简化u符号函数符号函数u符号与数值之间的转换符号与数值之间的转换u符号微积分符号微积分u符号方程求解符号方程求解7/26/2024117符号表达式符号表达式v符号表达式的生成符号表达式的生成 符号表达式包括符号函数和符号方程。它们的生成有两种方式: 1、符号表达式在MATLAB内部表示为字符串。很多普通函数可以用作符号计

75、算,如sin、diff等。 例如:f=sin(x) eqation=a*x2+b*x+c=0 使用字符串形式表示符号表达式时,不推荐使用。 回到主目录回到主目录7/26/20241182、使用sym、syms函数建立符号表达式 例如: f=sym(sin(x) f=sym(sin(x)2=0) syms x f=sin(x)+cos(x) 注意:用syms函数不能创建符号方程。7/26/2024119v符号矩阵的生成符号矩阵的生成 在matlab中创建符号矩阵和创建数值矩阵的形式很相似,只不过要用到符号定义函数sym 。1、使用sym函数直接创建符号矩阵 例如: a=sym(1/s+x,sin

76、(x),cos(x)2/(b+x);9,exp(x2+y2),log(y)7/26/2024120 2、用创建的子阵的方法创建符号矩阵(不提倡此方法) 此方法中,无需调用sym函数,但要保证同一列的各元素字符串具有相同的长度。字符串较短时可用空格补充。 例如: a=sym(1/s+x,sin(x),cos(x)2/(b+x);9,exp(x2+y2),log(atan(y) ms=1/s,sin(x);1 ,exp(x) b=a;exp(-i),3,x3+y9 7/26/20241213、将数值矩阵转化为符号矩阵 sym 在matlab中,数值矩阵不能直接参与符号运算,必须先转化为符号矩阵。

77、例如: a=2/3,sqrt(2),0.222;1.4,1/0.32,log(3) %数值型的 b=sym(a) %转化为符号型 7/26/2024122v符号变量规则符号变量规则 当表达式中有多个变量时,只能有一个变量是自变量。选择规则:缺省变量惟一一般选x为自变量如有多个小写字母变量,选接近x的字母 很多函数可以设定自变量。察看自变量:findsym 表达式绘图函数ezplot(f,a b)7/26/2024123v四则运算:同数字运算四则运算:同数字运算v符号矩阵的其他基本运算符号矩阵的其他基本运算行列式det逆inv秩rank幂指数运算exp、expm(注意区别)符号矩阵的基本运算符号

78、矩阵的基本运算回到主目录回到主目录7/26/2024124例如:a=sym(1/x,1/(x+1);1/(x+2),1/(x+3);det(a)b=sym(x,1;x+2,0);inv(b)rank(a)a2exp(b)expm(b)7/26/2024125合并同类项:collect嵌套形式:hornor因式分解:factor展开:expand简化多项式:simplify simple:尝试多种简化方式,找字符最少的a,how=simple(f) 其中, a:简化值 b:方法分式通分:numdern,d=numden(a) 其中,n:分子 d:分母符号矩阵的简化符号矩阵的简化回到主目录回到主目

79、录7/26/2024126例如: syms x y;collect(x2*y+y*x-2*x-x2)horner(x3-6*x2+11*x-6)factor(x9-1)expand(x+1)3)expand(sin(x+y)simplify(sin(x)2+cos(x)2)n,d=numden(x/y+y/x)7/26/2024127符号函数符号函数v复合函数的运算复合函数的运算 复合函数compose的调用方法:compose(f,g) 返回当f=f(y),g=g(x)时的f(g(x)compose(f,g,z) 返回自变量为z的复合函数f(g(z)compose(f,g,x,z) f=f(

80、x,t),g=g(y),返回f(g(z),t)compose(f,g,x,y,z) f=(x,t),g=g(y,u),返回f(g(z,u),t)回到主目录回到主目录7/26/2024128 例如:syms x y z u t;f=1/(1+x2);g=sin(y);h=xt;p=exp(y/u);compose(f,g)compose(f,g,t)compose(h,g,x,z)compose(h,g,t,z)compose(h,p,x,y,z)compose(h,p,t,u,z)7/26/2024129v反函数运算反函数运算 g=finverse(f)例如: syms x y;f=x2+y;

81、finverse(f,y)7/26/2024130v符号函数的二维图符号函数的二维图1、符号函数的简易绘图函数ezplot ezplot(f,lim) 绘制f(x)的函数图,lim:横坐标范围 例如:ezplot(x2+3,0,9) 7/26/20241312、绘制函数图函数fplot fplot(f,lims,tol)lims=xmin xmax或xmin xmax ymin ymaxtol y=rand(100,1); plot(y)7/26/2024149plot(X,Y) X为横坐标,Y为纵坐标。 注意:向量X和Y必须是同维数的,也必须同是行向量或列向量。 当变量X和Y是同阶矩阵时,将

82、按矩阵的行或列进行操作。特别的,变量Y可以包含多个符合要求的向量,这时将在同一幅图中绘制所有的图形。7/26/2024150例如:x,y为同维向量时 x=0:0.01*pi:pi;y=sin(x).*cos(x); plot(x,y)7/26/2024151例如:x=0:0.01*pi:pi;y=sin(x),cos(x); %这化成y=sin(x),cos(x)行不?plot(x,x,y)7/26/2024152plot(X,Y,s) X为横坐标,Y为纵坐标。s为一字符,可以代表不同的线型、点标、颜色。 下表是s图形设置选项:当选项多于一个时,各项直接相连即可。选项选项说明说明选项选项说明说

83、明选项选项说明说明-实线g绿色xx符号:点线b蓝色+号-.点划线w白色*星号-虚线k黑色s方形y黄色.点d菱形r红色o圆p正五边形7/26/2024153例如:x=1:0.1*pi:2*pi;y=sin(x);z=cos(x);plot(x,y,-k,x,z,-.rd) %结果怎样?7/26/2024154v特殊的二维图形函数特殊的二维图形函数l特殊坐标系的二维图形函数特殊坐标系的二维图形函数 特殊坐标系具体为:对数坐标系、极坐标系。 函数semilogx:x坐标为对数坐标绘制二维图 semilogy:y坐标为对数坐标绘制二维图 loglog:双对数坐标绘制二维图7/26/2024155例如:

84、 x=1:0.1*pi:2*pi; y=sin(x); semilogx(x,y,-*)7/26/2024156 极坐标系绘图函数polar: polar(theta,tho,s) 其中theta为弧度表示的角度向量;tho为相应的幅向量;s为图形属性设置选项,可省略。例如:x=0:0.01*pi:4*pi; y=sin(x/2)+x; polar(x,y,-)7/26/2024157v二维特殊图形函数二维特殊图形函数函数名说明函数名说明area填充绘图feather矢量图bar条形图fill多边形填充barh水平条形图Fplot函数图绘制comet彗星图hist直方图errorbar误差带图

85、pie饼状图ezplot简单绘制函数图contour等高线图7/26/2024158例如:%绘制条形图x=1:10;y=rand(10,1)bar(x,y)7/26/2024159%绘制矢量图x=0:0.1*pi:2*pi;y=sin(x).*x;feather(x,y)7/26/2024160%绘制函数图形lim=0,2*pi,-1,1;fplot(sin(x),cos(x),lim)7/26/2024161%绘制饼状图形x=2,4,6,8;pie(x,math,english,chinese,music)7/26/2024162三维图形及相关函数三维图形及相关函数v基本的绘图函数基本的绘图

86、函数plot3函数函数 plot3(x,y,z,s) 例如:x=0:pi/50:10*pi;y=sin(x);z=cos(x);plot3(x,y,z);回到主目录回到主目录7/26/2024163 plot3也可以以矩阵作为输入参数,这时要求3个输入矩阵必须结构相同。例如:x,y=meshgrid(-2:0.1:2,-2:0.1:2);z=x.*exp(-x.2-y.2);plot3(x,y,z)7/26/2024164网格函数网格函数 mesh(x,y,z) 绘制三维面的网格图。 X,Y=meshgrid(x,y) 划分平面网格。x,y为给定的向量,矩阵(X,Y)是网格划分后的数据矩阵。

87、meshc(x,y,z) 绘制将网格与等高线结合的三维面图。 meshz(x,y,z) 绘制以边界面屏蔽的网格图 surf(x,y,z) 绘制三维着色面图7/26/2024165例如:X,Y=meshgrid(-4:0.5:4);z=sqrt(X.2+Y.2);subplot(2,2,1)mesh(z)subplot(2,2,2)meshc(z)subplot(2,2,3)meshz(z)subplot(2,2,4)surf(z)7/26/2024166v特殊的三维图形函数特殊的三维图形函数函数名说明函数名说明bar3三维条形图surfc着色图与等高线图结合comet3三维彗星轨迹图trisu

88、rf三角形表面图ezgraph3函数控制绘制三维图trimesh三角形网格图pie3三维饼状图waterfall瀑布图stem3三维离散数据图scatter3三维散射图7/26/2024167图形处理的基本技术图形处理的基本技术v图形的控制图形的控制 函数基本包括:坐标轴控制函数(axis)、坐标轴放缩函数(zoom)、平面图形的坐标网格函数(grid)以及坐标轴封闭函数(box)。 坐标轴的控制函数axis 最简单的调用形式:axis(V) 其中V为一个用于存储坐标轴的坐标范围的数组。 对于二维图形:V=xmin,xmax,ymin,ymax 对于三维图形:V=xmin,xmax,ymin,

89、ymax,zmin,zmax 回到主目录回到主目录7/26/2024168坐标轴放缩函数zoom zoom+控制字符串 控制字符串控制字符串说明说明空在zoom on与zoom off间切换(factor)以factor作为放缩因子进行坐标轴放缩on(off)允许(禁止)对图形进行放缩out恢复所进行的一切放缩xon(yon)只允许对x(y)坐标轴进行放缩reset清除放缩点7/26/2024169 注意:对图形的放缩不会影响图形的原始尺寸,也不会影响图形的横纵坐标比例。平面坐标的网格函数grid 具体的调用格式:grid on/off grid on 表示在图形中绘制坐标网格,grid of

90、f 表示取消坐标网格单独的grid函数将实现grid on与grid off状态间的转换。 例如:7/26/2024170 x=0:0.1*pi:2*pi;y=sin(x);plot(x,y)axis(0,2*pi,-1,1)grid on7/26/2024171v图形的标注图形的标注坐标标注 常用的函数有:title、xlabel、ylabel等。 上述三个函数的调用格式大同小异,以xlabel为例: xlabel(标注,属性1,属性值1,属性2,属性值2,) 这里属性为文本属性,包括:字体大小、字体名、字体粗细等。 例如:7/26/2024172x=0:0.1*pi:2*pi;y=sin(

91、x);plot(x,y)axis(0,2*pi,-1,1)xlabel(x(0-pi),fontweight,bold);ylabel(y=sin(x),fontweight,bold);title(正弦函数,fontsize,12)7/26/2024173文本标注text text(x,y,标注文本及控制字符串) 其中(x,y)给定了标注文本在图中添加的位置 例如: text(3*pi/4,sin(3*pi/4),leftarrow sin(3pi/4)=0.707)7/26/2024174交互式文本标注gtext gtext(I like studying Matlab,fontsize,

92、22)图例标注legend legend(标注1,标注2,.,定位代号) 其中定位代号可以缺省。Matlab提供了6个定位代号,分别为: 0:自动定位,使得图标与图形重复最少。 1:置于图形的右上角 2:置于图形的左上角 3:置于图形的左下角 4:置于图形的右下角 -1:置于图形的右外侧7/26/2024175v图形的保持与子图图形的保持与子图 图形的保持 hold on/off hold on:启动图形保持功能,此后绘制的所有图形都将添加在当前的图形窗口。 hold off:关闭图形保持功能。 注意:如果不对曲线属性做任何设置,则在图形保持状态下所绘制的图形均具有相同的属性,其中最明显的就是

93、曲线拥有相同的颜色。7/26/2024176子图subplot(m,n,p) subplot函数将把一个图形窗口分割成m*n个子绘图区域,用户柯通过参数p调用各子绘图区域进行操作。 例如:把图形窗口分割成2x2的子绘图区域。在各个绘图子域分别绘制sin(x),cos(x),sin(x).*cos(x),sin(x)+cos(x),并给出各子图的标题。7/26/2024177sin 正弦函数正弦函数 asin 反正弦函数反正弦函数 cos 余弦函数余弦函数 acos 反余弦函数反余弦函数 tan 正切函数正切函数 atan 反正切函数反正切函数 cot 余切函数余切函数 acot 反余切函数反余

94、切函数 sec 正割函数正割函数 asec 反正割函数反正割函数 csc 余割函数余割函数 acsc 反余割函数反余割函数 sinh 双曲正弦函数双曲正弦函数 asinh 反双曲正弦函数反双曲正弦函数 cosh 双曲余弦函数双曲余弦函数 acosh 反双曲余弦函数反双曲余弦函数 tanh 双曲正切函数双曲正切函数 atanh 反双曲正切函数反双曲正切函数 sech 双双曲正割函数曲正割函数 asech 反双曲正割函数反双曲正割函数 csch 双曲余割函数双曲余割函数 acsch 反双曲余割函数反双曲余割函数 coth 双曲余切函数双曲余切函数 acoth 反双曲余切函数反双曲余切函数 三角函数

95、与双曲函数三角函数与双曲函数9/ 15MATLAB 常用函数常用函数7/26/2024178abs(x) 绝对值绝对值sqrt(x)开平方开平方conj(z)共轭复数共轭复数round(x) 四舍五入四舍五入floor(x) 舍去正小数舍去正小数rat(x) 化为分数表示化为分数表示gcd(x,y) 最大公因数最大公因数exp(x) 自然指数自然指数log(x) e为底的对数为底的对数Log10(x) 10为底的对数为底的对数angle(z)复数复数z的相角的相角real(z)复数复数z的实部的实部imag(z)复数复数z的虚部的虚部fix(x) 舍去小数取整舍去小数取整ceil(x)加入正小

96、数取整加入正小数取整sign(x)符号函数符号函数rem(x,y)求求x除以除以y的余数的余数lcm(x,y)最小公倍数最小公倍数pow2(x)以以2为底的指数为底的指数log2(x)以以2为底的对数为底的对数10/ 15MATLAB 常用函数介绍常用函数介绍7/26/2024179who 列出在列出在MATLAB工作空间中已有的变量工作空间中已有的变量whos 列出驻留变量的同时列出驻留变量的同时, ,还给出维数及性质还给出维数及性质clear 删除内存中的变量(数据)删除内存中的变量(数据)clc 删除命令窗口的内容(已使用过的命令)删除命令窗口的内容(已使用过的命令)home 光标移到命

97、令窗口的左上角光标移到命令窗口的左上角clf 删除图形窗口的内容删除图形窗口的内容 调出刚才使用过的命令调出刚才使用过的命令quit 退出退出MATLAB11/ 15MATLAB 常用函数介绍常用函数介绍MATLAB命令窗口的部分通用命令命令窗口的部分通用命令7/26/2024180v1、通过描点法得到sin(x)*cos(x)函数在0-pi区间上的曲线。提示:通过点运算获得。v2、如果多个学生的成绩是同一科目的成绩放在一个数组中,如何应用函数vararout,varargin等,实现excel文件chengji中成绩表的数据导入matlab,且求各科目的平均成绩及个人的平均成绩。(科目数量不定,学生数量不定)%test22.m7/26/2024181v练习:练习: 一、在12h内,每隔1h测量一次温度。温度依次为:5,8,9,15,25,29,31,30,23,25,27,24。 1、试分别用分段线性插值方法估计在3.2h,6.5h,7.1h,11.7h的温度值,每隔0.1h估计一次温度值并画出其图形。2、用多项式拟合,估计在3.2h,6.5h,7.1h,11.7h的温度值。7/26/2024182

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

最新文档


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

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