《第2章MATLAB程序设计1》由会员分享,可在线阅读,更多相关《第2章MATLAB程序设计1(86页珍藏版)》请在金锄头文库上搜索。
1、MATLAB 数据及其运算n2.1 变量n2.2向量的生成n2.3 MATLAB矩阵的表示n2.4MATLAB运算n2.5 MATLAB程序设计 MATLAB 语言的特点语言的特点nMatlab的基本数据单元是不需指定维数的的基本数据单元是不需指定维数的矩阵矩阵。n对对于于数数值值数数据据最最常常用用的的类类型型为为双双精精度度型型。每每个个存存储的双精度数用储的双精度数用64位,用位,用double函数进行转换。函数进行转换。nchar用于存储字符,每个存储的字符用用于存储字符,每个存储的字符用16位。位。 2.1变量n变量是任何程序设计语言的变量是任何程序设计语言的基本元素基本元素之一。之
2、一。nMatlab并不要求对所用的变量进行实现声明,并不要求对所用的变量进行实现声明,也不需要指定变量类型。也不需要指定变量类型。Matlab会自动根据会自动根据变量所赋的值或对变量所进行的操作来确定变变量所赋的值或对变量所进行的操作来确定变量类型。量类型。n赋值过程中,如果变量已存在,则用赋值过程中,如果变量已存在,则用新值代替新值代替旧值,以新的类型代替旧的类型旧值,以新的类型代替旧的类型。2.1变量n2.1.1变量的命名规则变量的命名规则 (1) 以字母开头 (2)后接字母、数字、下划线 (3)matlab7.0中,最多31个字符 (4)变量区分字母大小写 注意注意:MATLAB提供的标
3、准函数名以及命令名必须是小写字母。2.1.2变量的分类n自定义变量n预定义变量n全局变量预定义变量neps eps是一个浮点误差值,如果不带参数,它的值为1到下一个能表示的比1大的浮点数之间差距的,它用来表示浮点相对误差精度。npipi 圆周率圆周率 的近似值的近似值3.14159263.1415926ninfinf或或InfInf 表示正无穷大表示正无穷大, ,定义为定义为1/01/0nNaNNaN 表示不定值,它产生于表示不定值,它产生于0 0 ,0/00/0, / / 等运算等运算ni,i,j j 虚数单位虚数单位nansans 对于未赋值运算结果,自动赋给对于未赋值运算结果,自动赋给a
4、nsansnrealminrealmin 最小正实数最小正实数nrealmaxrealmax 最大正实数最大正实数预定义变量nnarginnargin 函数输入参数个数。函数输入参数个数。nnargoutnargout 函数输出参数个数。函数输出参数个数。function y=test1(a,b) if nargin=0 a=0;b=0; elseif nargin=1 b=0; end y=a+b; 预定义变量nlasterrlasterr 存放最新的错误信息存放最新的错误信息nlastwarnlastwarn 存放最新的警告信息。存放最新的警告信息。!预定义变量有特定的含义,在使用时,应尽
5、量避免!预定义变量有特定的含义,在使用时,应尽量避免对这些变量重新赋值。对这些变量重新赋值。全局变量n格式:global 变量名;n例: global A; A=5.6;注意:尽量用大写字母定义全局变量,尽 管这并不是必须的。2.1.3变量的管理n对内存变量的管理方式:(1)通过命令行输入命令(2)通过工作区间浏览器进行管理(1)who-列出列出Mat lab工作空间已驻留的变量名清单;工作空间已驻留的变量名清单; whos-列出全部变量列出全部变量详细情况详细情况。(2)clear-清除内存中的全部变量。清除内存中的全部变量。 clear X-删除变量删除变量X变量的查询和删除变量的保存和载
6、入nsave sa x ;将变量x保存到sa.mat文件中nsave sa x y;将变量x,y保存到sa.mat文件中nsave sa;将工作空间中所有的变量存到sa.mat文件中nsave;将工作空间中所有的变量存到matlab.mat文件中格式格式:变量名以空格分隔,当变量名省略时自动保存所有变量:变量名以空格分隔,当变量名省略时自动保存所有变量默认文件名默认文件名变量的保存和载入nload sa x ;调用sa.mat文件中的变量xnload sa;调用sa.mat文件中的所有的变量Workspace工作空间浏览器l十进制数表示常数。l一般情况下数据元素用双精度数来表示和存储。l采用日
7、常记数法和科学记数法两种表示方法。l数据输出格式设置: format 格式符(p21) format short format long format short e format long e format short g format long g format rat 2.1.4数据的输出格式2.2 向量的生成(1 1)利用冒号表达式建立一个向量)利用冒号表达式建立一个向量冒号表达式可以产生一个行向量,一般格式是: e1:e2:e3其中e1为初始值,e2为步长,e3为终止值。如果省略s2的值,则步距取默认值1例:a=1: 2: 12b=1:12C=12:-2:1注意:如果注意:如果s2为
8、负值,则要求为负值,则要求s1大于大于s3的值,否则产生一个的值,否则产生一个空向量。空向量。2.2 向量的生成(2 2)用)用linspacelinspace函数建立一个向量函数建立一个向量( (线性等分线性等分) )格式是:linspace(a,b,n)其中a和b是生成向量的第一个和最后一个元素,n是元素总数。显然,linspace(a,b,n)与a:(b-a)/(n-1):b等价例: y=linspace(1,100,6)2.3 矩阵的表示一、矩阵变量创建的方式:(1)直接输入矩阵(2)通过外部数据加载(3)利用m文件建立矩阵(3)通过MATLAB的函数产生。1、直接输入矩阵n遵循的规则
9、 (1)把矩阵元素列入方括号内; (2)每行元素间用逗号或空格分隔; (3)行与行间用分号分隔; (4 4)矩阵的元素可以是数值、变量、表达式或函数;)矩阵的元素可以是数值、变量、表达式或函数; (5 5)矩阵的尺寸不必预先定义。)矩阵的尺寸不必预先定义。在命令窗口中直接输入例如: a=1,2,3;4,5,6;7,8,9 a=1 2 3;4 5 6;7 8 9会得到同样输出结果。na = 1 2 3 4 5 6 7 8 9在命令窗口中直接输入例如: a=1,2+5i,3;4,5,6*i;7,8,9 2、通过外部数据加载矩阵用户可以使用用户可以使用load命令加载命令加载外部数据文件来创建矩外部
10、数据文件来创建矩阵。例如将生成的矩阵保存为阵。例如将生成的矩阵保存为file.mat文件,然后在文件,然后在命令窗口中用命令窗口中用load file 加载。加载。3、利用M文件建立矩阵对于比较大且比较复杂的矩阵,可以为它专门建对于比较大且比较复杂的矩阵,可以为它专门建立一个立一个M文件。文件。下面通过一个简单例子来说明如何利用下面通过一个简单例子来说明如何利用M文件创文件创建矩阵。建矩阵。 例例2-2 2-2 利用利用M M文件建立文件建立MYMATMYMAT矩阵。矩阵。( (1) 启动启动MATLAB文本编辑器,并输入待建矩阵:文本编辑器,并输入待建矩阵:(2) 把输入的内容以纯文本方式存
11、盘把输入的内容以纯文本方式存盘(设文件名为设文件名为mymatrix.m)。 (3) 在在MATLAB命令窗口中输入命令窗口中输入mymatrix,即运行该,即运行该M文件,文件,就会自动建立一个名为就会自动建立一个名为MYMAT的矩阵,可供以后使用。的矩阵,可供以后使用。4、通过MATLAB函数产生矩阵四个产生基本矩阵的函数:四个产生基本矩阵的函数:zeros 函数函数 ones 函数函数 rand 函数函数 randn 函数函数产生特殊矩阵的函数有:产生特殊矩阵的函数有:magic 函数函数 diag 函数函数 triu 函数函数 eye 函数函数 size 函数函数(1)zeros 函数
12、函数作用:能够生成元素全为零的矩阵作用:能够生成元素全为零的矩阵格式:矩阵名格式:矩阵名zeros(m,n)通过MATLAB函数产生矩阵(2)ones函数函数作用:能够生成元素全为作用:能够生成元素全为1的矩阵的矩阵格式:矩阵名格式:矩阵名ones(m,n)(3)rand 函数函数作用:能够生成统一分布随机元素的矩阵,元素数值范围作用:能够生成统一分布随机元素的矩阵,元素数值范围为(为(0.0 , 1.0)格式:矩阵名格式:矩阵名rand(m,n)(4)randn 函数函数作用:能够生成正态分布随机元素的矩阵,元素数值范围作用:能够生成正态分布随机元素的矩阵,元素数值范围为(为(0.0 , 1
13、.0)格式:矩阵名格式:矩阵名rand(m,n)(5)magic 函数函数作用:能够自动生成一种特殊的作用:能够自动生成一种特殊的n阶矩阵,这些矩阵的行、阶矩阵,这些矩阵的行、列和对角线上的元素之和都相等。列和对角线上的元素之和都相等。格式:矩阵名格式:矩阵名magic(n)(6)diag 函数函数作用:自动生成指定矩阵作用:自动生成指定矩阵D的对角矩阵。的对角矩阵。格式:格式:Y=diag(D) 通过MATLAB函数产生矩阵(7)triu 函数函数作用:自动生成指定矩阵的上三角矩阵。作用:自动生成指定矩阵的上三角矩阵。格式:格式:Y=triu(D)(8)tril 函数函数作用:自动生成指定矩
14、阵的下三角矩阵。作用:自动生成指定矩阵的下三角矩阵。格式:格式:Y=tril(D)通过MATLAB函数产生矩阵(9)eye 函数和函数和 size 函数函数作用:作用:size函数用来返回指定矩阵的行数和列数。函数用来返回指定矩阵的行数和列数。 eye 函数产生指定行数和列数的单位矩阵。函数产生指定行数和列数的单位矩阵。两个函数共同使用可产生与指定矩阵同阶的单位矩阵。两个函数共同使用可产生与指定矩阵同阶的单位矩阵。格式:格式:Yeye(size(D)通过MATLAB函数产生矩阵magicna=magic(4)a = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1d
15、iag nc=diag(a)c = 16 11 6 1triu nd=triu(a)d = 16 2 3 13 0 11 10 8 0 0 6 12 0 0 0 1trilne=tril(a)e = 16 0 0 0 5 11 0 0 9 7 6 0 4 14 15 1eye sizena=eye(3,3)a = 1 0 0 0 1 0 0 0 1nm,n=size(a)nm =3nn =3(5)magic 函数函数作用:能够自动生成一种特殊的作用:能够自动生成一种特殊的n阶矩阵,这些矩阵的阶矩阵,这些矩阵的行、列和对角线上的元素之和都相等。行、列和对角线上的元素之和都相等。格式:矩阵名格式:
16、矩阵名magic(n)(6)diag 函数函数作用:自动生成指定矩阵作用:自动生成指定矩阵D的对角矩阵。的对角矩阵。格式:格式:Y=diag(D) 二、建立大矩阵三、矩阵的拆分1矩阵元素矩阵元素通过下标引用矩阵的元素通过下标引用矩阵的元素,例如,例如A(3,2)=200采用矩阵元素的序号来引用矩阵元素采用矩阵元素的序号来引用矩阵元素。矩阵元素的序号就。矩阵元素的序号就是相应元素在内存中的排列顺序。在是相应元素在内存中的排列顺序。在MATLAB中,矩阵中,矩阵元素按列存储,先第一列,再第二列,依次类推。例如元素按列存储,先第一列,再第二列,依次类推。例如A=1,2,3;4,5,6;A(3)ans
17、 = 2显然,序号显然,序号(Index)与下标与下标(Subscript )是一一对应的,以是一一对应的,以mn矩阵矩阵A为例,矩阵元素为例,矩阵元素A(i,j)的序号为的序号为(j-1)*m+i。其相。其相互转换关系也可利用互转换关系也可利用sub2ind和和ind2sub函数求得。函数求得。三、矩阵的拆分1矩阵元素矩阵元素(a)通过下标引用矩阵的元素通过下标引用矩阵的元素,例如,例如A(3,2)=200(b)采用矩阵元素的序号来引用矩阵元素。)采用矩阵元素的序号来引用矩阵元素。矩阵元素的序号矩阵元素的序号就是相应元素在内存中的排列顺序。在就是相应元素在内存中的排列顺序。在MATLAB中,
18、矩阵元素中,矩阵元素按列存储,先第一列,再第二列,依次类推。例如按列存储,先第一列,再第二列,依次类推。例如A=1,2,3;4,5,6;A(3)显然,序号显然,序号(Index)与下标与下标(Subscript )是一一对应的,以是一一对应的,以mn矩阵矩阵A为例,矩阵为例,矩阵元素元素A(i,j)的序号为的序号为(j-1)*m+i。其相互转换关系也可利用。其相互转换关系也可利用sub2ind和和ind2sub函函数求得。数求得。例:例:A=1,2,3;4,5,6;sub2ind(size(A),1,2)i,j=ind2sub(size(A),3)2矩阵拆分矩阵拆分 (1) 利用冒号表达式获得
19、子矩阵利用冒号表达式获得子矩阵三、矩阵的拆分 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+m)表示取表示取A矩阵第矩阵第ii+m行内,并在第行内,并在第kk+m列中的所有元素。列中的所有元素。例:A=85,82,34,73 59,64,29,
20、31 50,82,34,84 90,66,53,57 A(1:2,2:4) A(1:2,:) A(:,1:2:4)此外,还可利用一般向量和此外,还可利用一般向量和end运算符来表示矩阵下标,运算符来表示矩阵下标,从而获得子矩阵。从而获得子矩阵。end表示某一维的末尾元素下标。表示某一维的末尾元素下标。三、矩阵的拆分 (2)利用空矩阵删除矩阵的元素利用空矩阵删除矩阵的元素在在MATLAB中,定义中,定义为空矩阵。给变量为空矩阵。给变量X赋空矩阵的语句为赋空矩阵的语句为X=。注意,注意,X=与与clear X不同,不同,clear是将是将X从工作空间中删除,从工作空间中删除,而空矩阵则存在于工作空
21、间,只是维数为而空矩阵则存在于工作空间,只是维数为0。将某些元素从矩阵中删除,采用将其置为空矩阵的方法就是一将某些元素从矩阵中删除,采用将其置为空矩阵的方法就是一种有效的方法。种有效的方法。 三、矩阵的拆分例:A=85,82,34,73 59,64,29,31 50,82,34,84 90,66,53,57;A(2,:)=2.4MATLAB运算n2.2.1算术运算 (1) +,- 加减 (2) * 矩阵乘 .*数组乘 (3) 矩阵乘方 .数组乘方 (4) 矩阵左除 .数组左除 (5) /矩阵右除 ./数组右除注意注意:带点的运算均属于数组运算带点的运算均属于数组运算例子:n a=1,1,1;2
22、,2,2;3,3,3;b=a;c=a*b c=a.*bc = c = 6 6 6 1 1 1 12 12 12 4 4 4 18 18 18 9 9 9例:计算 的值,其中x=1+2iy=3- 将计算结果赋给z。x=1+2i;y=3-sqrt(17);z=(cos(abs(x+y)-sin(78*pi/180)/(x+abs(y);2.2.2关系运算符n=等于 =不等于n大于 =大于等于 bnc =n 0na=1,2,3;4,5,6;b=2,4,3;1,8,6;c=a=bnc =n 0 0 1n 0 0 1例子na=3;nb=2,4,7;1,2,5;nc=abnc =n 1 0 0n 1 1
23、02.2.3逻辑运算符n& 与 |或 非n运算规则同关系运算符n注意:在MATLAB运算中,算术运算符优先级最高,其次是关系运算符,逻辑运算符最低。n例: a=3;b=6;c=8; b+a=a&xm=z);xm(k)=xm(k)-(a-A);2.3MATLAB程序设计2.3.1M文件文件nMATLAB的编程通过使用编写脚本来实现,脚本是一系列的命令集,可包含函数,以M文件的形式存储。M文件是一个文本文件,我们通常用MATLAB提供的文本编辑器来编写程序。n编辑器通常用不同颜色区分不同内容n绿色:注释部分,程序不执行n黑色:程序主体n红色:属性值的设定n蓝色:控制流程,如:for,if,else
24、,while等建立M文件n通过菜单建立 File New M-filen通过工具栏新建命令nM文件一般存放在默认工作目录c:matlab6p5work2.3.2数据的输入输出ninput用来接收键盘数据n格式: a=input(提示信息,选项)n例如: a=input(输入一个矩阵:) a=input(姓名,s)dispndisp输出函数n格式:disp(输出项)n例: a=1,2,3;4,5,6; disp(a) 1 2 3 4 5 6例求一元二次方程ax2+bx+c=0的根n程序: a=input(a=); b=input(b=); c=input(c=); d=b2-4*a*c;x1=(
25、-b+sqrt(d)/(2*a);x2 =(-b-sqrt(d)/(2*a);disp(x1,x2);运行结果na=2nb=7nc=3n -0.5000 -3.0000pausen程序运行时,为了查看程序的中间结果,有时需要暂停程序的执行,可使用pause函数n格式:pause(暂停秒数)n如果省略时间,则知道按任意键后程序继续运行n强行终止程序运行可使用Ctrl+C2.3.3选择结构n单分支if语句n格式:if 条件 语句组 endn条件成立时执行if与end之间的语句,执行完后继续执行后边的语句.n条件不成立时直接执行后边的语句.单分支 nx=input(x=)if x3 y=sqrt(x
26、-3);end双分支if结构n双分支if语句n格式:if 条件 语句组1 else 语句组 end例n双分支写:x=input(x=)if x=2 y=x+x-2; elseif x=0 y=x-(x-2); else y=-x-(x-2); endswitch语句n根据表达式的取值不同分别执行不同的语句n格式:switch 表达式case 表达式1 语句组case 表达式 语句组otherwise 语句组n endtry语句n这是试探性结构语句n格式:try 语句组catch 语句组endn先试探语句组,如果出现错误,则将错误信息符给系统变量lasterr并转去执行语句组例n程序:a=1,2
27、,3;4,5,6; b=6,5,4;3,2,1; try c=a*b; catch c=a.*b; end disp(lasterr); disp(c);运行结果nError using = *nInner matrix dimensions must agree.n 6 10 12n 12 10 62.3.4循环结构n循环是指按给定的条件重复执行指定语句n循环语句: for 和whilenfor 语句n格式:nfor 循环变量=表达式1:表达式2:表达式3 语句组 end 表达式1为循环变量初值,表达式2的值为步长,当步长为1时可省略,表达式3为循环变量终值.例n求1-100的和.ns=0
28、for i=1:100 s=s+i; end disp(s);例n求1-100的偶数的和.ns=0 for i=2:2:100 s=s+i; end disp(s);for语句的另一中用法nfor 循环变量=矩阵 语句组 endn s=0; a=1:100 for i=a s=s+iendwhile语句n格式: while 条件 语句组 endn若条件成立,则执行语句组,执行后再判断条件是否成立,若成立则继续执行语句组,否则跳出循环.例ns=0; i=1; while ia(j) a(i)=a(i)+a(j) a(j)=a(i)-a(j) a(i)=a(i)-a(j) end endend2.
29、3.5函数文件n函数文件也是M文件,MATLAB提供的标准函数大部分也是M文件n格式: function 输出参数表=函数名(输入参数表) 注释部分 函数体语句 注意:输出形参多于一个时,用方括号括起来,以矩阵的形式表示.例:求n!的函数文件nfunction f=jch(n) f=1; for i=2:n f=f*i; endn注意:MATLAB要求函数名一般要与函数名一致,否则调用时会出错.例:输入一个数求比他小的素数的和.na=input(输入一个数输入一个数:);nif a=2n sum=2;nelsen sum=2;n for i=3:an flag=1;n for j=2:i-1n if mod(i,j)=0n flag=0;n break;n endn endn if flag=1n sum=sum+i;n endn endnend运行结果n输入一个数:20n sumnsum =n 77