《Matlab编程基础.ppt》由会员分享,可在线阅读,更多相关《Matlab编程基础.ppt(81页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第二章第二章 Matlab编程基础编程基础数组和矩阵基本运算数组和矩阵基本运算主要内容:主要内容:2.1 矩阵矩阵和数组和数组2.2 matlab基本运算基本运算2.3 matlab语言结构与编程语言结构与编程2.4 文件文件I/O2.1 矩阵和数组矩阵和数组2.1.1 基本概念基本概念2.1.2 矩阵和数组的创建矩阵和数组的创建2.1.3 矩阵和数组的访问矩阵和数组的访问2.1.4 矩阵操作矩阵操作2.1.1 基本概念基本概念1.变量变量所谓变量,就是指在程序运行过程中需要改变所谓变量,就是指在程序运行过程中需要改变数值的量,每一个变量都具有一个名字,变量数值的量,每一个变量都具有一个名字,
2、变量将在内存中占据一定的空间,以便在程序运行将在内存中占据一定的空间,以便在程序运行的过程中保存其数值。的过程中保存其数值。对变量的命名有相应的要求:变量必须以字母对变量的命名有相应的要求:变量必须以字母开头,后面可以是开头,后面可以是19个字母、数字或者下划线个字母、数字或者下划线的组合的组合2.数组数组数组是有序数据的集合,在大多数编程数组是有序数据的集合,在大多数编程语言中,数组的每一个成员语言中,数组的每一个成员(元素元素)都属于都属于同一种数据类型,它们使用同一个数组同一种数据类型,它们使用同一个数组名称和不同的下标来惟一确定数组中的名称和不同的下标来惟一确定数组中的成员成员(元素元
3、素)。3.向量向量从编程语言的角度上看,向量其实就是从编程语言的角度上看,向量其实就是一维数组,然而从数学的角度上看,向一维数组,然而从数学的角度上看,向量就是量就是1N或者或者N1的矩阵,即行向量或的矩阵,即行向量或列向量列向量MATLAB的基本运算单位就是矩阵和向的基本运算单位就是矩阵和向量,而量,而M语言本身就是以向量化运算为语言本身就是以向量化运算为基础的编程语言基础的编程语言4.矩阵矩阵在在MATLAB中,矩阵的概念就是线性代数中定中,矩阵的概念就是线性代数中定义的矩阵的概念义的矩阵的概念矩阵是用一对圆括号或者矩阵是用一对圆括号或者方括号括起来,符合一定规则的数学对象。例方括号括起来
4、,符合一定规则的数学对象。例如:如:2.1.2 数组和矩阵的创建数组和矩阵的创建1.创建向量创建向量2.创建矩阵创建矩阵3.稀疏矩阵稀疏矩阵1.创建向量创建向量从编程语言的角度上看,向量也就是一从编程语言的角度上看,向量也就是一维数组。在维数组。在MATLAB中创建向量可以使中创建向量可以使用五种不同的方法,最直接也最简单的用五种不同的方法,最直接也最简单的方法就是逐个输入向量的元素方法就是逐个输入向量的元素1).创建行向量创建行向量2).创建列向量创建列向量(1)直接创建,通过直接输入数组中每个元)直接创建,通过直接输入数组中每个元素的值来创建数组,方法为以左方括号开始,素的值来创建数组,方
5、法为以左方括号开始,以空格或逗号为间隔输入元素值,最后以右方以空格或逗号为间隔输入元素值,最后以右方括号结尾括号结尾 例:在命令窗口输入例:在命令窗口输入例:在命令窗口输入例:在命令窗口输入X=1 2 3 4 5 6 7 8 9X=1 2 3 4 5 6 7 8 9或或或或x=1x=1,2 2,3 3,4 4,5 5,6 6,7 7,8 8,99(2 2)利用冒号运算符创建向量利用冒号运算符创建向量X=初值:终值,创建从初值开始到终值结束,增量初值:终值,创建从初值开始到终值结束,增量为为1的行向量的行向量x 例:例:例:例:x=0 x=0:10101).创建行向量创建行向量(3 3)x=x=
6、初值:增量:终值,创建从初值到终初值:增量:终值,创建从初值到终初值:增量:终值,创建从初值到终初值:增量:终值,创建从初值到终值,给定增量的行向量值,给定增量的行向量值,给定增量的行向量值,给定增量的行向量 例:例:例:例:x=0 x=0:0.10.1:1 1(4 4)利用函数)利用函数)利用函数)利用函数X=linspace(X=linspace(初值,终值,初值,终值,初值,终值,初值,终值,n)n)创创创创建从初值开始到终值结束,有建从初值开始到终值结束,有建从初值开始到终值结束,有建从初值开始到终值结束,有n n个元素的行向个元素的行向个元素的行向个元素的行向量量量量 例:例:例:例
7、:x=linespace(0,pi,11)x=linespace(0,pi,11)(5 5)利用函数)利用函数)利用函数)利用函数x=logspace(x=logspace(初值,终值,初值,终值,初值,终值,初值,终值,n)n)创创创创建从初值开始到终值结束,有建从初值开始到终值结束,有建从初值开始到终值结束,有建从初值开始到终值结束,有n n个元素对数分个元素对数分个元素对数分个元素对数分隔量。隔量。隔量。隔量。例:例:例:例:x=logspace(0,1,11)x=logspace(0,1,11)1.0000 1.2589 1.5849 1.9953 2.5119 3.1623 3.98
8、11 1.0000 1.2589 1.5849 1.9953 2.5119 3.1623 3.9811 5.0119 6.3096 7.9433 10.00005.0119 6.3096 7.9433 10.00002).创建列向量创建列向量(1)直接输入元素法。)直接输入元素法。通过直接输入数通过直接输入数组中每个元素的值来创建数组,方法为组中每个元素的值来创建数组,方法为以左方括号开始,以分号为间隔输入元以左方括号开始,以分号为间隔输入元素值,最后以右方括号结尾素值,最后以右方括号结尾例:例:A=1;2;3;4;5;6(2)使用转置的方法)使用转置的方法例:例:B=(1:6)2.创建矩阵创
9、建矩阵1)直接输入法)直接输入法A=1 2 3;4 5 6;7 8 9或或A=1,2,3;4,5,6;7,8,9在创建矩阵的时候,需要注意:在创建矩阵的时候,需要注意:整个矩阵的元素必须在整个矩阵的元素必须在“”中键入中键入 矩阵的元素行与行之间需要使用分号;间矩阵的元素行与行之间需要使用分号;间隔,也可以在需要分行的地方用回车键间隔隔,也可以在需要分行的地方用回车键间隔 矩阵的元素之间可以使用逗号或者空格间矩阵的元素之间可以使用逗号或者空格间隔。隔。其实创建上面的矩阵时还可以这么做其实创建上面的矩阵时还可以这么做 A=1:3;4:6;7:9A=2)创建特殊矩阵)创建特殊矩阵(1)随机数矩阵)
10、随机数矩阵randrand(x,yx,y)产生)产生)产生)产生x x行行行行y y列的随机数矩阵列的随机数矩阵列的随机数矩阵列的随机数矩阵(2)全)全1阵阵ones(n)ones(n)产生产生产生产生n n行行行行n n列的全列的全列的全列的全1 1方阵方阵方阵方阵ones(x,y)ones(x,y)产生产生产生产生x x行行行行y y列的全列的全列的全列的全1 1矩阵矩阵矩阵矩阵(3)全零阵)全零阵zeroszeros(n n)产生)产生)产生)产生n n行行行行n n列的全零方阵列的全零方阵列的全零方阵列的全零方阵zeroszeros(x,yx,y)产生)产生)产生)产生x x行行行行y
11、 y列的全零矩阵列的全零矩阵列的全零矩阵列的全零矩阵(4)对角矩阵)对角矩阵eyes(x,y)eyes(x,y)产生产生产生产生x x行行行行y y列的对角阵列的对角阵列的对角阵列的对角阵3.稀疏矩阵稀疏矩阵在实际工作中,经常遇到这样一类矩阵,这类在实际工作中,经常遇到这样一类矩阵,这类矩阵中数值为矩阵中数值为0的元素居多,这类矩阵一般被的元素居多,这类矩阵一般被称为稀疏矩阵。如果使用满阵的方式来表示稀称为稀疏矩阵。如果使用满阵的方式来表示稀疏矩阵,则疏矩阵,则0元素将占用相当的内存空间,特元素将占用相当的内存空间,特别是在别是在MATLAB中,由于中,由于MATLAB默认的数默认的数据类型是
12、双精度类型,每一个双精度类型的数据类型是双精度类型,每一个双精度类型的数据元素都要占用八个字节的内存空间,当据元素都要占用八个字节的内存空间,当0元元素很多的时候将占用相当可观的内存空间,因素很多的时候将占用相当可观的内存空间,因此,在此,在MATLAB中,专门提供了稀疏矩阵的表中,专门提供了稀疏矩阵的表示方法。示方法。创建稀疏矩阵创建稀疏矩阵在在MATLAB命令行窗口中键入下面的指令:命令行窗口中键入下面的指令:A=eye(5)A=1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1B=sparse(A)B=(1,1)1 (2,2)1 (3,3)
13、1 (4,4)1 (5,5)1 whos Name Size Bytes Class A 5x5 200 double array B 5x5 84 double array(sparse)Grand total is 30 elements using 284 bytes在上例中,首先使用在上例中,首先使用eye函数创建了五阶函数创建了五阶的单位矩阵,五阶单位方阵一共有的单位矩阵,五阶单位方阵一共有25个个元素,其中却有元素,其中却有20个元素是个元素是0,于是使用,于是使用sparse函数将该函数构造成为稀疏矩阵,函数将该函数构造成为稀疏矩阵,这样就得到了矩阵这样就得到了矩阵B。通过通过w
14、hos指令可以清晰地比较两个指令可以清晰地比较两个矩阵占用的内存空间,矩阵占用的内存空间,A矩阵占用了矩阵占用了200个字节,而个字节,而B矩阵仅占用了矩阵仅占用了84个字节。个字节。稀疏矩阵和普通矩阵稀疏矩阵和普通矩阵(满阵满阵)之间可以直接进行之间可以直接进行运算,例如运算,例如 A+Bans=2 0 0 0 0 0 2 0 0 0 0 0 2 0 0 0 0 0 2 0 0 0 0 0 2 这里运算得到的结果是一个满阵。这里运算得到的结果是一个满阵。MATLAB中使用中使用“三元组三元组”表示法来表示稀表示法来表示稀疏矩阵,该表示方法一般由三个向量组成:疏矩阵,该表示方法一般由三个向量组
15、成:第一个向量是由矩阵中非零元素组成的向量,第一个向量是由矩阵中非零元素组成的向量,其长度一般为其长度一般为nzmax,即矩阵中所有非零元素,即矩阵中所有非零元素的个数;的个数;第二个向量是非零元素的行序号,该向量的长第二个向量是非零元素的行序号,该向量的长度也为度也为nzmax;第三个向量是非零元素的列序号,该向量的长第三个向量是非零元素的列序号,该向量的长度也为度也为nzmax。例如对于下面的稀疏矩阵:例如对于下面的稀疏矩阵:因此,表示矩阵的三个向量分别为因此,表示矩阵的三个向量分别为 data=15 91 11 3 28 22 6 15;ir=1 5 2 2 6 1 3 1;jc=1 1
16、 2 3 3 4 4 6;利用上面的三个矩阵和利用上面的三个矩阵和sparse函数创建六行六列的稀疏函数创建六行六列的稀疏矩阵:矩阵:S=sparse(ir,jc,data,6,6)S=(1,1)15 (5,1)91 (2,2)11 (2,3)3 (6,3)28 (1,4)22 (3,4)-6 (1,6)-15%将该矩阵还原成满阵将该矩阵还原成满阵 full(S)ans=15 0 0 22 0 -15 0 11 3 0 0 0 0 0 0 -6 0 0 0 0 0 0 0 0 91 0 0 0 0 0 0 0 28 0 0 0 whos Name Size Bytes Class S 6x6
17、124 double array(sparse)ans 6x6 288 double array data 1x8 64 double array ir 1x8 64 double array jc 1x8 64 double arrayGrand total is 68 elements using 604 bytes 2.1.3 数组和矩阵的访问数组和矩阵的访问1.向量元素的访问向量元素的访问访问向量的元素只要使用相应元素的索引即可,访问向量的元素只要使用相应元素的索引即可,以例说明以例说明例例1:A=1 2 3 4 5 6 7 8 9 0,访问向量中的,访问向量中的元素。元素。在在MAT
18、LAB的命令行窗口中键入下面的指令:的命令行窗口中键入下面的指令:%访问向量的第三个元素访问向量的第三个元素 A(3)ans=3%访问向量的第一、三、七个元素访问向量的第一、三、七个元素 A(1 3 7)ans=1 3 7%访问向量的第一、三、五个元素访问向量的第一、三、五个元素 A(1,3,5)ans=1 3 5%访问向量的最后四个元素访问向量的最后四个元素 A(end-3:end)ans=7 8 9 0%重复访问向量中的元素重复访问向量中的元素 A(1:5,5:-1:1)ans=1 2 3 4 5 5 4 3 2 1说明:说明:访问向量的元素直接给出元素在向量中的序号,访问向量的元素直接给
19、出元素在向量中的序号,元素的序号不仅可以是单一的整数,还可以是元素的序号不仅可以是单一的整数,还可以是元素序号组成的向量,如例元素序号组成的向量,如例1中的各种操作。中的各种操作。关键字关键字end在访问向量元素时,表示向量中最在访问向量元素时,表示向量中最后一个元素的序号。后一个元素的序号。访问向量元素时,序号的数值必须介于数值访问向量元素时,序号的数值必须介于数值1end之间之间例例例例2 2 对向量对向量对向量对向量A=1 2 3 4 5 6 7 8 9 0中的元素赋中的元素赋中的元素赋中的元素赋值值值值在在MATLAB命令行窗口中键入下面的指令:命令行窗口中键入下面的指令:%对向量的第
20、三个元素赋值对向量的第三个元素赋值 A(3)=-3A=1 2 -3 4 5 6 7 8 9 0%对向量中不存在的数据赋值对向量中不存在的数据赋值 A(15)=-15A=Columns 1 through 10 1 2 -3 4 5 6 7 8 9 0 Columns 11 through 15 0 0 0 0 -15 说明:说明:在例在例2中,对向量的第中,对向量的第15个元素赋值,个元素赋值,在赋值之前向量的第在赋值之前向量的第1115个元素不存在,个元素不存在,但是在赋值之后,将自动创建这些元素,但是在赋值之后,将自动创建这些元素,并且为没有明确赋值的元素赋默认值并且为没有明确赋值的元素赋
21、默认值0,这就是这就是MATLAB的数据自动扩充和初始的数据自动扩充和初始化机制。化机制。2.矩阵元素的访问矩阵元素的访问访问矩阵的元素也需要使用矩阵元素的访问矩阵的元素也需要使用矩阵元素的索引,不过具有两种方式,第一种方式索引,不过具有两种方式,第一种方式是使用矩阵元素的行列全下标形式,第是使用矩阵元素的行列全下标形式,第二种方法是使用矩阵元素的单下标形式二种方法是使用矩阵元素的单下标形式例例3:MATLAB工作空间中具有一个工作空间中具有一个55的矩阵,的矩阵,该矩阵是五阶的幻方,通过命令行获取矩阵该矩阵是五阶的幻方,通过命令行获取矩阵的第二行、第四列的元素,于是在的第二行、第四列的元素,
22、于是在MATLAB命令行窗口中键入下面的指令:命令行窗口中键入下面的指令:%创建矩阵创建矩阵 A=magic(5)A=17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9%使用全下标的形式访问元素使用全下标的形式访问元素 A(2,4)ans=14%使用单下标的形式访问元素使用单下标的形式访问元素 A(17)ans=14 说明:说明:使用了使用了MATLABMATLAB函数函数magicmagic创建幻方。所谓幻方,就创建幻方。所谓幻方,就是是n n阶的方阵,该方阵的行元素和列元素的和都相等。阶的方阵,该方阵的行元素和
23、列元素的和都相等。使用全下标的形式访问矩阵元素的方法简单、直接,使用全下标的形式访问矩阵元素的方法简单、直接,同线性代数的矩阵元素的概念一一对应。同线性代数的矩阵元素的概念一一对应。矩阵元素的单下标是矩阵元素在内存中存储的序列矩阵元素的单下标是矩阵元素在内存中存储的序列号,一般地,同一个矩阵的元素存储在连续的内存单号,一般地,同一个矩阵的元素存储在连续的内存单元中。元中。矩阵元素的单下标与全下标之间的转换关系如下,矩阵元素的单下标与全下标之间的转换关系如下,以以m m行的矩阵为例,该矩阵的第行的矩阵为例,该矩阵的第i i行第行第j j列的元素全下标列的元素全下标表示为单下标表示为单下标l=(j
24、-1)l=(j-1)m+im+i。注意:注意:MATLABMATLAB的矩阵元素的排列以列元素优先,这一点的矩阵元素的排列以列元素优先,这一点同同FORTRANFORTRAN语言的二维数组元素的排列方法一致,与语言的二维数组元素的排列方法一致,与C C语言的二维数组元素的排列不同,语言的二维数组元素的排列不同,C C语言的二维数组元语言的二维数组元素排列以行元素优先。素排列以行元素优先。使用索引访问矩阵元素的方法使用索引访问矩阵元素的方法例例4 用不同的方法访问矩阵的元素。用不同的方法访问矩阵的元素。在在MATLAB命令行中键入下面的指令:命令行中键入下面的指令:%创建矩阵创建矩阵 A=1:2
25、5;A=reshape(A,5,5)A=1 6 11 16 21 2 7 12 17 22 3 8 13 18 23 4 9 14 19 24 5 10 15 20 25%访问矩阵的第三行第一列元素访问矩阵的第三行第一列元素 A(3,1)或或A(3)ans=3%访问矩阵第三行的所有元素访问矩阵第三行的所有元素 A(3,:)ans=3 8 13 18 23%访问矩阵第四列的所有元素访问矩阵第四列的所有元素 A(:,4)ans=16 17 18 19 20%访问矩阵的最后一行元素访问矩阵的最后一行元素 A(end,:)ans=5 10 15 20 25%获取矩阵的子矩阵获取矩阵的子矩阵 I=1 3
26、 5;J=2 4;A(I,J)ans=6 16 8 18 10 20 2.1.4 数组数组/矩阵操作矩阵操作对数组或矩阵的基本操作有:对数组或矩阵的基本操作有:插入插入重新排列重新排列提取提取按列拉长按列拉长置空(去掉某行或某列)置空(去掉某行或某列)置零置零用单个下标操作一个矩阵用单个下标操作一个矩阵用逻辑数组操作一个矩阵用逻辑数组操作一个矩阵按指定条件求子数组按指定条件求子数组求数组的规模求数组的规模例例1:X=4:6,按下列要求进行操作:,按下列要求进行操作:(1)插入:通过对)插入:通过对x进行插入运算创建矩阵进行插入运算创建矩阵AA=x-3;x;x+3A=1 2 34 5 67 8
27、9(2)重新排列:以逆序重新排列)重新排列:以逆序重新排列A的各行形成的各行形成矩阵矩阵BB=A3:-1:1,1:3B=7 8 94 5 61 2 3(3)提取:提取)提取:提取A的前两行的后两列构成矩阵的前两行的后两列构成矩阵CC=A1:2,end-1:end(或或C=A1:2,2:3)C=2 35 6(4)按列拉长:对)按列拉长:对C按列拉长形成矩阵按列拉长形成矩阵DD=C(:)D=2536(5 5)置空:删除)置空:删除)置空:删除)置空:删除B B的第的第的第的第2 2列列列列 B(:,2)=B(:,2)=B=B=7 94 61 3(6)置零:将矩阵)置零:将矩阵B的第的第2行第行第2
28、列的元素置为列的元素置为0(2,2)=0B=7 94 01 3(7)用单个下标操作一个矩阵,获得矩阵)用单个下标操作一个矩阵,获得矩阵B的的第第3个元素个元素B(3)ans=1(8)用逻辑数组操作一个矩阵:判断矩阵)用逻辑数组操作一个矩阵:判断矩阵A中中元素绝对值大于元素绝对值大于3的情况,如果绝对值大于的情况,如果绝对值大于3则则置为置为1,否则为,否则为0abs(A)3ans=0 0 01 1 11 1 1(9)按指定条件求子数组:寻找)按指定条件求子数组:寻找A中大于中大于4的元素对应的元素对应的下标的下标r,s=find(A4)r=32323s=12233(10)求数组的规模求数组的规
29、模S=size(A),返回一个二元素行向量返回一个二元素行向量s,s的第一的第一个元素是个元素是A的行数,第二个元素为的行数,第二个元素为A的列数的列数r,c=size(A),返回两个变量返回两个变量r和和c分别为分别为A的行的行数和列数数和列数r=size(A,1),只返回只返回A的行数给的行数给rc=size(A,2),只返回,只返回A的列数给的列数给cn=length(A),返回行数和列数中较大的一个,返回行数和列数中较大的一个2.2 Matlab基本运算基本运算2.2.1 数组和矩阵的基本运算数组和矩阵的基本运算2.2.2逻辑运算和关系运算逻辑运算和关系运算2.2.1 数组和矩阵的基本
30、运算数组和矩阵的基本运算1.数组操作函数数组操作函数2.矩阵生成函数矩阵生成函数3.数组和矩阵的运算符数组和矩阵的运算符4.数组和矩阵的基本运算函数数组和矩阵的基本运算函数1.数组操作函数数组操作函数函数名函数名功能功能diag(A)提取矩阵提取矩阵A的对角元素,并返回给列向量的对角元素,并返回给列向量diag(v)以向量以向量v为对角元素来创建对角矩阵为对角元素来创建对角矩阵flipud(A)将矩阵上下翻转将矩阵上下翻转fliplr(A)将矩阵左右反转将矩阵左右反转rot90(A)矩阵逆时针翻转矩阵逆时针翻转90度度reshape(A,m,n)返回一个返回一个mn矩阵,其元素是以列方式从矩阵
31、,其元素是以列方式从A中获得,中获得,A必须包含必须包含mn个元素个元素tril(A)提取矩阵提取矩阵A的下三角矩阵的下三角矩阵triu(A)提取矩阵提取矩阵A的上三角矩阵的上三角矩阵2.矩阵生成函数矩阵生成函数矩阵操作函数矩阵操作函数3.数组和矩阵运算符号数组和矩阵运算符号矩阵和数组运算是不同的,数组运算是矩阵和数组运算是不同的,数组运算是元素对元素的运算,而矩阵运算采用线元素对元素的运算,而矩阵运算采用线性代数的运算方式,两种运算符号也不性代数的运算方式,两种运算符号也不同,其区别见下表同,其区别见下表数组和矩阵的运算符号数组和矩阵的运算符号数组运算符号数组运算符号矩阵运算符号矩阵运算符号
32、功能功能+相加相加.*相乘相乘./左除左除.反除反除.乘幂乘幂例:例:A=eye(2),B=1,2;3,4,计算,计算A+B,A.*B,A*B,A./B,A/B,B.2,B2A=1 00 1B=A./B1 2 ans=3 4 1.0000 0 0 0.2500A+B A/Bans=ans=2 2 -2.0000 1.00003 5 1.5000 -0.5000A.*B B.2ans=ans=1 0 1 40 4 9 16A*Bans=1 23 4矩阵的基本运算矩阵的基本运算4.数组和矩阵的基本运算函数数组和矩阵的基本运算函数指数运算函数指数运算函数圆整和求余函数圆整和求余函数数组和矩阵基本运算
33、示例数组和矩阵基本运算示例例一:在例一:在MATLAB命令行中键入下面的指令:命令行中键入下面的指令:%创建三阶帕斯卡矩阵创建三阶帕斯卡矩阵 A=pascal(3)A=1 1 1 1 2 3 1 3 6%从矩阵从矩阵A生成下三角矩阵生成下三角矩阵 tril(A)ans=1 0 0 1 2 0 1 3 6%获取矩阵获取矩阵A的对角线元素的对角线元素 diag(A)ans=1 2 6%利用向量生成对角矩阵利用向量生成对角矩阵 diag(ans)ans=1 0 0 0 2 0 0 0 6 例二例二 MATLAB的圆整和求余函数。的圆整和求余函数。在在MATLAB的命令行中,键入下面的指的命令行中,键
34、入下面的指令:令:fix(-1.9)ans=-1 floor(-1.9)ans=-2 round(-1.9)ans=-2 ceil(-1.9)ans=-1例三例三 reshape函数的使用示例。函数的使用示例。在前面的例子在前面的例子2-11中曾经使用过中曾经使用过reshape函数,这函数,这里将详细讨论该函数的使用方法,在里将详细讨论该函数的使用方法,在MATLAB命令行命令行中,键入下面的指令:中,键入下面的指令:A=1:8A=1 2 3 4 5 6 7 8 B=reshape(A,2,4)B=1 3 5 7 2 4 6 8 C=reshape(B,3,3)?Error using=re
35、shapeTo RESHAPE the number of elements must not change.例四:例四:对称交换函数的使用示例。对称交换函数的使用示例。在在MATLAB命令行中,键入下面的指令:命令行中,键入下面的指令:A=reshape(1:9,3,3)A=1 4 7 2 5 8 3 6 9 fliplr(A)ans=7 4 1 8 5 2 9 6 3 flipud(A)ans=3 6 9 2 5 8 1 4 7 flipdim(A,1)ans=3 6 9 2 5 8 1 4 7 flipdim(A,2)ans=7 4 1 8 5 2 9 6 3 在生成比较复杂的矩阵时,可
36、以使用在生成比较复杂的矩阵时,可以使用MATLAB提供的矩提供的矩阵扩展方法完成相应矩阵的构造。假设矩阵阵扩展方法完成相应矩阵的构造。假设矩阵A为三阶方阵,为三阶方阵,B为二阶方阵,由矩阵为二阶方阵,由矩阵A和和B组合构成五阶方阵组合构成五阶方阵 ,其,其中中O为相应的零矩阵,具体的创建方法见例五。为相应的零矩阵,具体的创建方法见例五。例五:例五:创建复杂矩阵。创建复杂矩阵。在在MATLAB命令行中,键入下面的指令:命令行中,键入下面的指令:A=reshape(1:9,3,3);B=1 2;3 4;O=zeros(length(A),length(B)O=0 0 0 0 0 0 C=A O;O
37、 BC=1 4 7 0 0 2 5 8 0 0 3 6 9 0 0 0 0 0 1 2 0 0 0 3 4 思考:当思考:当A和和B不是不是方阵时怎么实现?方阵时怎么实现?例六例六 使用方括号创建复杂矩阵。使用方括号创建复杂矩阵。在在MATLAB命令行中,键入下面的指令:命令行中,键入下面的指令:A=1 2;3 4;B=A,A*2;tril(A),triu(A);A*3,A*4B=1 2 2 4 3 4 6 8 1 0 1 2 3 4 0 4 3 6 4 8 9 12 12 16 例七例七 函数函数repmat的应用示例。的应用示例。repmat(magic(2),2,3)ans=1 3 1
38、3 1 3 4 2 4 2 4 2 1 3 1 3 1 3 4 2 4 2 4 2repmat函数的基本语法为函数的基本语法为repmat(A,M,N),它的作用是,它的作用是将指定的矩阵将指定的矩阵A复制次,然后创建一个复杂的大矩阵,复制次,然后创建一个复杂的大矩阵,结果为结果为因此,在例七中,将一个简单的二行二列的矩阵进行了因此,在例七中,将一个简单的二行二列的矩阵进行了六次重复,创建了四行六列的大矩阵。六次重复,创建了四行六列的大矩阵。2.2.2逻辑运算和关系运算逻辑运算和关系运算逻辑运算逻辑运算关系运算关系运算1.逻辑运算逻辑运算说明:说明:参与逻辑运算的操作数不一定必须是逻辑参与逻辑
39、运算的操作数不一定必须是逻辑类型的变量或常数,也可以使用其他类型的数类型的变量或常数,也可以使用其他类型的数据进行逻辑运算,但是运算的结果一定是逻辑据进行逻辑运算,但是运算的结果一定是逻辑类型的数据。类型的数据。所谓具有短路作用是指,在进行所谓具有短路作用是指,在进行&或或|运运算时,若参与运算的变量有多个,例如算时,若参与运算的变量有多个,例如a&b&c&d,若,若a、b、c、d四个变量中四个变量中a为假,为假,则后面的三个都不再被处理,运算结束,并返则后面的三个都不再被处理,运算结束,并返回运算结果逻辑假。回运算结果逻辑假。逻辑运算示例逻辑运算示例例例1:在:在MATLAB命令行窗口中,键
40、入下面的命令行窗口中,键入下面的指令:指令:a=eye(3);b=a;b(3,1)=1;a&b?Operands to the|and&operators must be convertible to logical scalar values.a&bans=1 0 0 0 1 0 0 0 1 whos Name Size Bytes Class a 3x3 72 double array ans 3x3 9 logical array b 3x3 72 double arrayGrand total is 27 elements using 153 bytes 例例1中,首先参与逻辑运算的是
41、两个双精度类型中,首先参与逻辑运算的是两个双精度类型的矩阵,这两个矩阵进行的矩阵,这两个矩阵进行&运算时,运算时,MATLAB报告了相应的错误,因为参与报告了相应的错误,因为参与&或或者者|运算的操作数必须为标量。另外,从例子运算的操作数必须为标量。另外,从例子也能够看出,尽管参与运算的是两个双精度类也能够看出,尽管参与运算的是两个双精度类型的矩阵,运算的结果却是逻辑类型的矩阵。型的矩阵,运算的结果却是逻辑类型的矩阵。例例2:函数函数all和和any使用示例。使用示例。在在MATLAB命令行窗口中,键入下面的指令:命令行窗口中,键入下面的指令:a=1 0 1;1 0 0;1 1 0;1 1 1
42、a=1 0 1 1 0 0 1 1 0 1 1 1 all(a)ans=1 0 0 any(a)ans=1 1 1 2.关系运算关系运算关系运算是用来判断两个操作数关系的关系运算是用来判断两个操作数关系的运算,运算,MATLAB中的关系运算和中的关系运算和C语言语言的关系运算基本一致,主要有六种,见的关系运算基本一致,主要有六种,见下表下表关系运算关系运算参与关系运算的操作数可以使用各种数据类型的变量或参与关系运算的操作数可以使用各种数据类型的变量或者常数,运算的结果是逻辑类型的数据。标量也可以者常数,运算的结果是逻辑类型的数据。标量也可以和矩阵或者数组进行比较,比较的时候将自动扩展标和矩阵或
43、者数组进行比较,比较的时候将自动扩展标量,返回的结果是和数组同维的逻辑类型数组。如果量,返回的结果是和数组同维的逻辑类型数组。如果进行比较的是两个数组,则数组必须是同维的,且每进行比较的是两个数组,则数组必须是同维的,且每一维的尺寸也必须一致。一维的尺寸也必须一致。关系运算示例关系运算示例例例1:在:在MATLAB命令行窗口中,键入下面的命令行窗口中,键入下面的指令:指令:A=reshape(1:9,3,3);B=magic(3);A Bans=0 1 1 0 0 1 0 0 1 A=B ans=0 0 0 0 1 0 0 0 0 例例2:在:在MATLAB命令行窗口中,键入下面的命令行窗口中
44、,键入下面的指令:指令:A=reshape(-4:4,3,3)A=-4 -1 2 -3 0 3 -2 1 4 B=(A=0)B=1 1 0 1 0 0 1 0 0 C=(A0)&(A A=-2 10 NaN 30 0-11-Inf 31;pos=A B=A(pos)B=-2 -11 -Inf pos=(A=0)&(isfinite(A)pos=0 1 0 1 1 0 0 1 C=A(pos)C=10 30 0 31 运算符的优先级运算符的优先级 到本小节为止,到本小节为止,MATLAB的基本运算符都已的基本运算符都已经介绍完毕了。在经介绍完毕了。在M语言中可以将这些不同的语言中可以将这些不同的
45、运算符组合起来创建复杂的运算表达式。运算符组合起来创建复杂的运算表达式。M语语言的运算符和普通的高级编程语言类似,也具言的运算符和普通的高级编程语言类似,也具有相应的计算优先级。这里将有相应的计算优先级。这里将M语言的运算以语言的运算以及相应的计算优先级进行了总结:及相应的计算优先级进行了总结:(1)括号括号()。(2)数组转置数组转置(.),数组幂,数组幂(.),复转置,复转置(),矩阵幂矩阵幂()。(3)一元加一元加(+),一元减,一元减(-),逻辑非,逻辑非()。(4)数组乘法数组乘法(.*),数组除法,数组除法(./),数组左除,数组左除(.),矩阵乘法,矩阵乘法(*),矩阵右除,矩阵右除(/),矩阵左除,矩阵左除()。(5)加法加法(+),减法,减法(-)。(6)冒号运算符冒号运算符(:)。(7)小于小于(),小于等于,小于等于(),大,大于等于于等于(=),等于,等于(=),不等于,不等于(=)。(8)元素与元素与(&)。(9)元素或元素或(|)。(10)短路逻辑与短路逻辑与(&)。(11)短路逻辑或短路逻辑或(|)。
限制150内