第二章_矩阵和数组.ppt
第二章第二章 矩阵和数组矩阵和数组MATLAB提供了一种计算机高级编程语言M语言MATLAB提供了不同类型的数据MATLAB专门以矩阵作为基本的运算单位MATLAB提供了关于数组和矩阵不同的运算方法矩阵和数组(续)矩阵和数组(续)本章讲述的内容矩阵和向量矩阵运算数组运算稀疏矩阵多维数组矩阵和数组(续)矩阵和数组(续)2.1 概述2.2 创建向量2.3 创建矩阵2.4 索引2.5 基本运算2.6 稀疏矩阵2.7 多维数组2.8 小结2.1 概述概述在M语言中最常用的数据类型表现手段和形式就是变量和常量M语言的基本处理单位是数值矩阵或者数值向量回顾有关概念变量和常量数组向量矩阵概述(续)概述(续)变量和常量变量:程序运行过程中需要改变数值的量每一个变量都具有一个名字变量在内存中占据一定的空间变量必须以字母开头,后面可以是字母、数字或者下划线的组合MATLAB仅识别前面N个字符,在不同的操作系统下可以识别的字符个数不同常量:在程序运行的过程中不需要改变数值的量常量具有名字在M语言中不存在常量的定义,只在MATLAB中提供一些常用的常数作为常量概述(续)概述(续)数组是有序数据的集合数组的每一个成员(元素)都属于同一种数据类型,它们使用同一个数组名称和不同的下标来唯一确定数组中的成员(元素)。在MATLAB中元胞数组比较特殊,数组中的元素可以是不同的数据类型。概述(续)概述(续)向量从编程语言的角度上看,向量其实就是一维数组从数学的角度上看,向量就是1N或者N1的矩阵,即行向量或列向量 b1,1 b2,1 B=b3,1 和B=b1,1 b1,2 b1,3 b1,n bn,1概述(续)概述(续)矩阵是用一对圆括号或方括号括起来,符合一定规则的数学对象 b11 b12 b13 B=b21 b22 b23 b31 b32 b33对于编程语言,矩阵就是二维的数组矩阵和数组(续)矩阵和数组(续)2.1 概述2.2 创建向量2.3 创建矩阵2.4 索引2.5 基本运算2.6 稀疏矩阵2.7 多维数组2.8 小结2.2 2.2 创建向量创建向量1.在命令窗口逐个输入元素 例2-1:X=1 3 pi 3+5i 2.利用冒号运算符创建向量X=J:INC:KJ为向量的第一个元素,K为向量的最后一个元素,INC为向量元素递增的步长J、INC、K之间必须用“:”间隔若忽略INC,则默认的递增步长为1INC可以为正数,也可以为负数 例2-2:X=1:10 例2-3:X=1:0.01:1.1创建向量(续)创建向量(续)3.定数线性采样法:在设定的“总点数”下,均匀采 样生成向量(一维“行”数组)使用函数linspace 和logspacelinspace是用来创建线性间隔向量的函数linspace 的基本语法 X=linespace(X1,X2,n)X1为向量的第一个元素,X2为向量的最后一个元素,n为向量具有的元素个数,函数将根据n的数值平均计算元素之间的间隔,间隔计算公式为若在表达式中忽略参数n,则系统默认地将向量设置为100个元素创建向量(续)创建向量(续)例2-4 使用linspace函数创建向量X=linspace(1,2,5)X=1.0000 1.2500 1.5000 1.7500 2.0000创建向量(续)创建向量(续)logspace是用来创建对数空间的向量logspace 的基本语法 X=logspace(X1,X2,n)该函数创建的向量第一个元素值为10X1,而最后一个元素的数值为10X2,n为向量的元素个数,元素彼此之间的间隔按照对数空间的间隔设置若在表达式中忽略参数n,则系统默认地将向量设置为50个元素创建向量(续)创建向量(续)例2-5 使用logspace函数创建向量X=logspace(1,3,3)X=10 100 1000创建向量(续创建向量(续)创建列向量使用分号作为元素与元素之间的间隔使用转置运算符“”例2-6:A=1;2;3;4;5;6或A=(1:6)矩阵和数组(续)矩阵和数组(续)2.1 概述2.2 创建向量2.3 创建矩阵2.4 索引2.5 基本运算2.6 稀疏矩阵2.7 多维数组2.8 小结2.3 创建创建矩阵矩阵n矩阵的元素可以为任意MATLAB数据类型的数值或对象n创建矩阵的方法n直接输入法n使用数组编辑器2.3.1 直接输入法直接输入法规则:整个矩阵的元素必须用 括住同一行的矩阵元素之间必须用逗号或空格分隔在 内矩阵的行与行之间必须用分号分隔,也可以在需要分行的地方用回车键间隔矩阵元素可以是任何MATLAB表达式,可以是实数,也可以是复数,复数用i,j 输入 例2-7:A=1,2,3;4,5,6;7,8,9 X=2 pi/2;sqrt(3)3+5i n逗号和分号的作用n逗号和分号可作为指令间的分隔符,MATLAB允许多条语句在同一行出现。n分号如果出现在指令后,屏幕上将不显示结果。n只要是赋过值的变量,不管是否在屏幕上显示过,都会存储在工作空间中,以后可随时显示或调用。变量名尽可能不要重复,否则会覆盖。例2-8:A=1,2,3;4,5,6;7,8,9,X=2 pi/2;sqrt(3)3+5i?A=1,2,3;4,5,6;7,8,9;X=2 pi/2;sqrt(3)3+5i?直接输入法(续)直接输入法(续)例2-8:A=1,2,3;4,5,6;7,8,9,X=2 pi/2;sqrt(3)3+5iA=1 2 3 4 5 6 7 8 9X=2.0000 1.5708 1.7321 3.0000+5.0000i A=1,2,3;4,5,6;7,8,9;X=2 pi/2;sqrt(3)3+5iX=2.0000 1.5708 1.7321 3.0000+5.0000i直接输入法(续)直接输入法(续)n冒号的作用 用于生成等间隔的向量,默认间隔为1。例2-9:y=1:3;4:6;7:9直接输入法(续)直接输入法(续)2.3.2 数组编辑器n调用数组编辑器的方法n选择工作空间浏览器中的变量,然后单击工作栏中的按钮n在工作空间浏览器中直接双击变量n选择工作空间浏览器中的变量,然后单击快捷菜单命令Openn在MATLAB命令行窗口中键入指令“openvar 变量名”数组编辑器仅能编辑、修改向量或矩阵,对于多维数组,数组编辑器只能察看数组的内容,不能修改多维数组的元素数组编辑器(续)n利用数组编辑器完成矩阵的编辑步骤n在命令行窗口中创建一个新的变量,为其赋任意数值 如:A=1n打开数组编辑器,在数组编辑器中加载相应的变量n在数组编辑器的工具栏中,修改矩阵的行数和列数,双击任意元素修改矩阵的元素值2.3.3 矩阵的修改矩阵的修改直接修改在命令行窗口中,可用键找到所要修改的矩阵,用键移动到要修改的矩阵元素上即可修改。在数组编辑器中,可用、键找到所要修改的矩阵元素进行修改。指令修改:用A(,)=来修改。例2-10:A=1 2 0;3 0 5;7 8 9 A=1 2 0 3 0 5 7 8 9A(3,3)=0 A=1 2 0 3 0 5 7 8 0矩阵和数组(续)矩阵和数组(续)2.1 概述2.2 创建向量2.3 创建矩阵2.4 索引2.5 基本运算2.6 稀疏矩阵2.7 多维数组2.8 小结2.4 索索 引引 访问和操作向量或矩阵元素的方法利用矩阵或向量元素的索引完成相应的操作。注意:MATLAB的矩阵或数组的索引起始数值为1 介绍的内容 向量元素的访问 矩阵元素的访问2.4.1 向量元素的访问向量元素的访问访问向量的元素只要使用相应元素的索引即可访问向量元素的结果是创建新的向量访问向量的元素直接给出元素在向量中的序号元素的序号可以是单一的整数元素的序号可以是元素序号组成的向量关键字end在访问向量元素时,表示向量中最后一 个元素的序号访问向量元素时,序号的数值必须介于1end之间可以通过访问元素的方法,对具体的元素赋值向量元素的访问(续)向量元素的访问(续)例2-11 B=3 2 7 4 9 6 1 8 0 5访问向量中的元素 B(3)ans=7 B(1 3 7)ans=3 7 1 B(1:3:5)ans=3 4 B(end-3:end)ans=1 8 0 5 B(1:5,5:-1:1)ans=?B(1:5;5:-1:1)ans=?向量元素的访问(续)向量元素的访问(续)例2-11 B=3 2 7 4 9 6 1 8 0 5访问向量中的元素 B(3)ans=7 B(1 3 7)ans=3 7 1 B(1:3:5)ans=3 4 B(end-3:end)ans=1 8 0 5 B(1:5,5:-1:1)ans=3 2 7 4 9 9 4 7 2 3 B(1:5;5:-1:1)ans=?向量元素的访问(续)向量元素的访问(续)例2-11 B=3 2 7 4 9 6 1 8 0 5访问向量中的元素 B(3)ans=7 B(1 3 7)ans=3 7 1 B(1:3:5)ans=3 4 B(end-3:end)ans=1 8 0 5 B(1:5,5:-1:1)ans=3 2 7 4 9 9 4 7 2 3 B(1:5;5:-1:1)ans=3 2 7 4 9 9 4 7 2 3向量元素的访问(续)向量元素的访问(续)例2-12 对向量的元素进行赋值 B(3)=-3B=3 2 7 4 9 6 1 8 0 5 B(15)=-15B=Columns 1 through 13 3 2 -3 4 9 6 1 8 0 5 0 0 0 Columns 14 through 15 0 -15-32.4.2 矩阵元素的访问矩阵元素的访问访问矩阵的元素需要使用矩阵元素的索引使用矩阵元素的行列全下标形式A(*,*)使用全下标形式访问矩阵元素的方法简单、直接,同线性代数的矩阵元素的概念一一 对应使用矩阵元素的单下标形式A(*)矩阵元素的单下标是矩阵元素在内存中存储 的序列号,一般地,同一个矩阵的元素在连 续的内存单元中(元素的排列以列元素优先)矩阵元素的访问(续)矩阵元素的访问(续)4 110 51 96 132 178 22 69 104 147 187 35 77 111 155 190 43 84 125 168 20A(1:4,5)A(:,5)A(:,end)A(17:20)A(2:4,2:3)A(2 3 4,2 3)A(1,2)A(5)例13 A=矩阵元素的访问(续)矩阵元素的访问(续)矩阵元素的单下标与全下标之间的转换关系以mn的矩阵为例 第i行第j列的元素全下标转换为单下标 l=(j-1)m+i 例:A(1,2)A(5)m=4,n=5,i=1,j=2 l=(j-1)m+i=(2-1)4+1=5MATLAB提供的两个函数sub2ind:根据全下标计算单下标ind2sub:根据单下标计算全下标矩阵元素的访问(续)矩阵元素的访问(续)例:A=4 10 1 6 2;8 2 9 4 7;7 5 7 1 5;0 3 4 5 8 A=4 10 1 6 2 8 2 9 4 7 7 5 7 1 5 0 3 4 5 8 sub2ind(size(A),2,2)ans=6 i,j=ind2sub(size(A),7)i=3 j=2矩阵元素的访问(续)矩阵元素的访问(续)使用索引访问矩阵元素的方法矩阵元素的访问说 明A(i,j)访问矩阵A的第i行第j列上的元素,其中i和j为标量A(I,J)访问由向量I和J指定的矩阵A中的元素A(i,:)访问矩阵A中第i行的所有元素A(:,j)访问矩阵A中第j列的所有元素A(:)访问矩阵A中的所有元素,将矩阵看成一个向量A(l)使用单下标的方式访问矩阵元素,其中l为标量A(L)访问由向量L指定的矩阵A的元素,向量L中的元素为矩阵元素的单下标数值 在索引矩阵或数组的元素时,若直接用冒号运算符且不给任何的参数,则表示选择该行或列,或维中的所有元素矩阵元素的访问(续)矩阵元素的访问(续)例:用不同的方法访问矩阵的元素A=1:25A=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 25A(3,1)或A(3)ans=3 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(end,:)ans=5 10 15 20 25I=1 3 5;J=2 4;A(I,J)A(1 3 5,2 4)ans=6 16 8 18 10 20 A(:,4)ans=16 17 18 19 20 A(3,:)ans=3 8 13 18 23矩阵和数组(续)矩阵和数组(续)2.1 概述2.2 创建向量2.3 创建矩阵2.4 索引2.5 基本运算2.6 稀疏矩阵2.7 多维数组2.8 小结矩阵的基本运算函数基本数学运算规则数组的运算运算函数运算指令2.5 基本运算基本运算2.5.1 矩阵生成函数矩阵生成函数函 数说 明zeros产生元素全为0的矩阵ones产生元素全为1的矩阵eye产生单位矩阵rand产生均匀分布的随机数矩阵,数值范围(0,1)randn产生均值为0,方差为1的正态分布随机数矩阵diag获取矩阵的对角线元素,也可生成对角矩阵tril产生下三角矩阵triu产生上三角矩阵pascal产生帕斯卡矩阵magic产生幻方阵例2-14 矩阵生成函数示例 A=zeros(3)A=0 0 0 0 0 0 0 0 0 A=ones(3)A=1 1 1 1 1 1 1 1 1矩阵生成函数(续)矩阵生成函数(续)A=eye(3)A=1 0 0 0 1 0 0 0 1 A=rand(3)A=0.9501 0.4860 0.4565 0.2311 0.8913 0.0185 0.6068 0.7621 0.8214 A=randn(3)A=-0.4326 0.2877 1.1892 -1.6656 -1.1465 -0.0376 0.1253 1.1909 0.3273例2-14 矩阵生成函数示例 A=magic(3)A=8 1 6 3 5 7 (15)4 9 2 A=magic(4)A=16 2 3 13 5 11 10 8 (34)9 7 6 12 4 14 15 1矩阵生成函数(续)矩阵生成函数(续)例2-15 矩阵生成函数示例A=pascal(3)ans=tril(A)ans=1 0 0 1 2 0 1 3 6矩阵生成函数(续)矩阵生成函数(续)1 1 1 1 2 3 1 3 6diag(A)ans=1 2 6 diag(ans)ans=?例2-15 矩阵生成函数示例A=pascal(3)ans=tril(A)ans=1 0 0 1 2 0 1 3 6矩阵生成函数(续)矩阵生成函数(续)1 1 1 1 2 3 1 3 6diag(A)ans=1 2 6 diag(ans)ans=1 0 0 0 2 0 0 0 6例2-15 矩阵生成函数示例A=pascal(3)ans=tril(A)ans=1 0 0 1 2 0 1 3 6矩阵生成函数(续)矩阵生成函数(续)1 1 1 1 2 3 1 3 6diag(A)ans=1 2 6 diag(ans)diag(ans)ans=?ans=1 0 0 0 2 0 0 0 6例2-15 矩阵生成函数示例A=pascal(3)ans=tril(A)ans=1 0 0 1 2 0 1 3 6矩阵生成函数(续)矩阵生成函数(续)1 1 1 1 2 3 1 3 6diag(A)ans=1 2 6 diag(ans)diag(ans)ans=1 0 0 0 2 0 0 0 6ans=1 2 6例2-15 矩阵生成函数示例A=pascal(3)ans=tril(A)ans=1 0 0 1 2 0 1 3 6矩阵生成函数(续)矩阵生成函数(续)1 1 1 1 2 3 1 3 6diag(A)ans=1 2 6 diag(ans)diag(ans)ans=1 0 0 0 2 0 0 0 6ans=1 2 6diag(*)*是向量,则执行该指令生成对角矩阵*是矩阵,则执行该指令获取矩阵的对角线元素2.5.2 基本矩阵运算基本矩阵运算运算命令说 明A矩阵转置An矩阵求幂,n可以为任意实数A*B矩阵相乘A/B矩阵右除(一般的除法,A/B=AB)AB矩阵左除(一种倒置的除法,AB=BA)A+B矩阵相加A-B矩阵相减inv矩阵求逆,注意不是所有的矩阵都有逆矩阵det求方阵的行列式rank求矩阵的秩eig求矩阵的特征向量和特征值svd对矩阵进行奇异值分解norm求矩阵的范数1.矩阵加、减运算(AB、AB)规则:相加、减的两矩阵必须有相同的行和列,两矩阵对应元素相加减。MATLAB允许参与运算的两矩阵之一是标量,标量与矩阵的所有元素分别进行加减操作。例:A=1 2 3;4 5 6 B=3 4 5;7 8 9 C=3 A+B=4 6 8;11 13 15 A+C=4 5 6;7 8 9 B+C=6 7 8;10 11 12基本矩阵运算(续)基本矩阵运算(续)2.矩阵乘运算n A*B:A矩阵的列数必须等于B矩阵的行数。n s*A 或 A*s:标量可与任何矩阵相乘,标量s分别与矩阵A每个元素相乘。例:A=1 2 3;4 5 6;7 8 0;B=1;2;3;C=A*B C=14 32 23 D=-1;0;2;F=pi*D F=-3.1416 0 6.2832 基本矩阵运算(续)基本矩阵运算(续)3.矩阵除运算及线性方程组的解 在线性代数中没有矩阵的除运算,只有矩阵逆的运算,在MATLAB中有两种矩阵除运算。A/B 矩阵右除,相当于 Ainv(B)AB 矩阵左除,相当于 inv(A)B 因此,x=AB 是线性方程组Ax=B的解。例:求解方程组 3x1+x2 -x3 =3.6 x1+2x2+4x3 =2.1 -x1+4x2+5x3 =-1.4 A=3 1-1;1 2 4;-1 4 5;B=3.6;2.1;-1.4;x=AB x=1.4818 -0.4606 0.3848基本矩阵运算(续)基本矩阵运算(续)4.矩阵乘方 An A自乘n次幂 例a=1,2,3;4,5,6;7,8,9;a2 ans=30 36 42 66 81 96 102 126 150 方阵方阵1的的整数整数基本矩阵运算(续)基本矩阵运算(续)数组运算指元素对元素的算术运算,与通常意义上的由符号表示的线性代数矩阵运算不同。1.数组加减(+,-)运算规则:相加、减的两数组必须有相同的行和列,两数组对应元素相加减。MATLAB允许参与运算的两数组之一是标量,标量与数组的所有元素分别进行加减操作 A+B A-B2.5.3 基本数组(元素)运算基本数组(元素)运算 与矩阵加减运算等效,数组之一也可为标量。2.2.数组乘()运算AB A,B两数组必须有相同的行和列,两数组相应元素相乘。n sA 或 As 标量与数组相乘,标量s分别与数组A每个元素相乘,与 sA 或 As 相同。例16:A=1 2 3;4 5 6;7 8 9;B=2 4 6;1 3 5;7 9 10;A.*B ans=2 8 18 4 15 30 49 72 90基本数组(元素群)运算(续)基本数组(元素群)运算(续)A=1 2 3;4 5 6;7 8 9;B=2 4 6;1 3 5;7 9 10;A*Bans=25 37 46 55 85 109 85 133 1723.数组除(/,)运算C=A./B 数组右除 C(i,j)=A(i,j)/B(i,j)C=A.B 数组左除 C(i,j)=B(i,j)/A(i,j)A./B=B.AA./s=s.A A的元素分别被标量s除s./A=A.s 标量s分别被A的元素除例:A=1 2 3;B=4 5 6;C1=A./B C1=0.2500 0.4000 0.5000 C2=B.A C2=0.2500 0.4000 0.5000 C3=A.B C3=4.0000 2.5000 2.0000 基本数组(元素)运算(续)基本数组(元素)运算(续)A=1 2 3;B=4 5 6;A/Bans=0.4156 ABans=0 0 0 0 0 0 1.3333 1.6667 2.00004.数组乘方(.)A.n A的每个元素自乘n次A.p 对A各元素分别求非整数幂p.A 以p为底,分别以A的元素为指数求幂值C=A.B 元素对元素的幂C(i,j)=A(i,j).B(i,j)例:A=1 2 3;B=4 5 6;X=A.2 X=1.00 4.00 9.00 Y=A.0.5 Y=1.0000 1.4142 1.7321 基本数组(元素)运算(续)基本数组(元素)运算(续)C=3.B Y=81.00 243.00 729.00 34 35 36Z=A.B Z=1.00 32.00 729.00 14 25 365.数组转置(.)例:A=1 3 5;2 4 6 A=1 3 5 2 4 6 A ans=1 2 3 4 5 6 A.ans=1 2 3 4 5 6基本数组(元素群)运算(续)基本数组(元素群)运算(续)结论:对于实数矩阵,矩阵转置和数组转置的计算结果是一致的。例:A=A*i A=0+1.0000i 0+3.0000i 0+5.0000i 0+2.0000i 0+4.0000i 0+6.0000i A ans=0-1.0000i 0-2.0000i 0-3.0000i 0-4.0000i 0-5.0000i 0-6.0000i A.ans=0+1.0000i 0+2.0000i 0+3.0000i 0+4.0000i 0+5.0000i 0+6.0000i基本数组(元素)运算(续)基本数组(元素)运算(续)结论:对于复数矩阵,矩阵转置和数组转置的计算结果不一致。矩阵转置运算共轭转置 数组转置运算非共轭转置函数的主要类别三角函数指数运算函数复数运算函数圆整和求余函数函数在处理参数时,是按照数组运算的规则进行的2.5.4 基本数学函数基本数学函数 三角函数基本数学函数基本数学函数(续)函数说明函数说明函数说明sin正弦函数tanh双曲正切函数csch双曲余割函数sinh双曲正弦函数atan反正切函数acsc反余割函数asin反正弦函数atan2四象限反正切函数acsch反双曲余割函数asinh反双曲正弦函数atanh反双曲正切函数cot余切函数cos余弦函数sec正割函数coth双曲余切函数cosh双曲余弦函数sech双曲正割函数acot反余切函数acos反余弦函数asec反正割函数acoth反双曲余切函数acosh反双曲余弦函数asech双曲反正割函数tan正切函数csc余割函数指数运算函数基本数学函数基本数学函数(续)函数说明函数说明exp指数函数realpow实数幂运算函数log自然对数函数reallog实数自然对数函数log10常用对数函数realsqrt实数平方根函数log2以2为底的对数函数sqrt平方根函数pow22的幂函数nextpow2求大于输入参数的第一个2的幂复数运算函数基本数学函数基本数学函数(续)函数说明函数说明abs求复数的模,若参数为实数则求绝对值real求复数的实部angle求复数的相角unwrap相位角按照360线调整complex构造复数isreal判断输入的参数是否为实数conj求复数的共轭复数cplxpair复数阵成共轭对形式排列image求复数的虚部圆整和求余函数基本数学函数基本数学函数(续)函数说明函数说明fix向0取整的函数mod求模函数floor向-取整的函数rem求余数ceil向+取整的函数sign符号函数round向最近的整数取整的函数例2-16:圆整和求余函数 fix(-1.9)ans=-1 floor(-1.9)ans=-2 round(-1.9)ans=-2 ceil(-1.9)ans=-1基本数学函数基本数学函数(续)mod(9,-2)ans=?rem(9,-2)ans=?mod(x,y):ans和y的符号相同rem(x,y):ans和x的符号相同如果x和y的符号相同,则函数mod和rem的结果相同 mod(-9,2)ans=?rem(-9,2)ans=?mod(9,2)ans=?rem(9,2)ans=?例2-16:圆整和求余函数 fix(-1.9)ans=-1 floor(-1.9)ans=-2 round(-1.9)ans=-2 ceil(-1.9)ans=-1基本数学函数基本数学函数(续)mod(9,-2)ans=-1 rem(9,-2)ans=?mod(x,y):ans和y的符号相同rem(x,y):ans和x的符号相同如果x和y的符号相同,则函数mod和rem的结果相同 mod(-9,2)ans=?rem(-9,2)ans=?mod(9,2)ans=?rem(9,2)ans=?例2-16:圆整和求余函数 fix(-1.9)ans=-1 floor(-1.9)ans=-2 round(-1.9)ans=-2 ceil(-1.9)ans=-1基本数学函数基本数学函数(续)mod(9,-2)ans=-1 rem(9,-2)ans=1mod(x,y):ans和y的符号相同rem(x,y):ans和x的符号相同如果x和y的符号相同,则函数mod和rem的结果相同 mod(-9,2)ans=?rem(-9,2)ans=?mod(9,2)ans=?rem(9,2)ans=?例2-16:圆整和求余函数 fix(-1.9)ans=-1 floor(-1.9)ans=-2 round(-1.9)ans=-2 ceil(-1.9)ans=-1基本数学函数基本数学函数(续)mod(9,-2)ans=-1 rem(9,-2)ans=1mod(x,y):ans和y的符号相同rem(x,y):ans和x的符号相同如果x和y的符号相同,则函数mod和rem的结果相同 mod(-9,2)ans=1 rem(-9,2)ans=?mod(9,2)ans=?rem(9,2)ans=?例2-16:圆整和求余函数 fix(-1.9)ans=-1 floor(-1.9)ans=-2 round(-1.9)ans=-2 ceil(-1.9)ans=-1基本数学函数基本数学函数(续)mod(9,-2)ans=-1 rem(9,-2)ans=1mod(x,y):ans和y的符号相同rem(x,y):ans和x的符号相同如果x和y的符号相同,则函数mod和rem的结果相同 mod(-9,2)ans=1 rem(-9,2)ans=-1 mod(9,2)ans=?rem(9,2)ans=?例2-16:圆整和求余函数 fix(-1.9)ans=-1 floor(-1.9)ans=-2 round(-1.9)ans=-2 ceil(-1.9)ans=-1基本数学函数基本数学函数(续)mod(9,-2)ans=-1 rem(9,-2)ans=1mod(x,y):ans和y的符号相同rem(x,y):ans和x的符号相同如果x和y的符号相同,则函数mod和rem的结果相同 mod(-9,2)ans=1 rem(-9,2)ans=-1 mod(9,2)ans=1 rem(9,2)ans=?例2-16:圆整和求余函数 fix(-1.9)ans=-1 floor(-1.9)ans=-2 round(-1.9)ans=-2 ceil(-1.9)ans=-1基本数学函数基本数学函数(续)mod(9,-2)ans=-1 rem(9,-2)ans=1mod(x,y):ans和y的符号相同rem(x,y):ans和x的符号相同如果x和y的符号相同,则函数mod和rem的结果相同 mod(-9,2)ans=1 rem(-9,2)ans=-1 mod(9,2)ans=1 rem(9,2)ans=1Mod由分母符号决定 rem由分子符号决定例2-17:圆整和求余函数 sign(9)ans=1 sign(0)ans=0 sign(-9)ans=-1基本数学函数基本数学函数(续)sign(*)若*是正数,则ans为1若*是零,则ans为0若*是负数,则ans为-1用于矩阵(数组)操作的常用函数2.5.5 矩阵(数组)操作函数矩阵(数组)操作函数 函数说 明size获取矩阵的行、列数,对于多维数组,获取数组的各个维的尺寸length获取向量长度,若输入参数为矩阵或多维数组,则返回各个维尺寸的最大值ndims获取矩阵或多维数组的维数numel获取矩阵或数组的元素个数disp显示矩阵或者字符串内容cat合并不同的矩阵或数组reshape保持矩阵元素的个数不变,修改矩阵的行数和列数repmat复制矩阵元素并扩展矩阵fliplr交换矩阵左右对称位置上的元素flipud交换矩阵上下对称位置上的元素flipdim获取指定的方向翻转交换矩阵元素find获取矩阵或者数组中非零元素的索引例2-18:reshape函数使用示例 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(A,3,3)?Error using=reshapeTo RESHAPE the number of elements must not change.矩阵(数组)操作函数矩阵(数组)操作函数(续)不能改变矩阵包含元素的个数将矩阵A改成2行4列,也可写成 B=reshape(1:8,2,4)例2-19:对称交换函数使用示例B=1 3 5 7 2 4 6 8 fliplr(B)ans=7 5 3 1 8 6 4 2 flipud(B)ans=2 4 6 8 1 3 5 7矩阵(数组)操作函数矩阵(数组)操作函数(续)flipdim函数的第二个参数必须是大于0的整数:参数为1时,效果和flipud函数一致参数为2时,效果和fliplr函数一致 flipdim(B,1)ans=2 4 6 8 1 3 5 7 flipdim(B,2)ans=7 5 3 1 8 6 4 2例2-20:repmat使用示例 A=pascal(2)A=1 1 1 2 repmat(A,2,3)ans=1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2矩阵(数组)操作函数矩阵(数组)操作函数(续)repmat函数的基本语法为:repmat(A,M,N)作用是将指定的矩阵A复制MN次,其中M对应的是行,N对应的是列。创建复杂矩阵使用MATLAB提供的矩阵扩展方法完成相应矩阵的构造假设矩阵A为三阶方阵,B为二阶方阵,由A和B组合构成五阶方阵C=A O;O B,其中O为相应的零矩阵矩阵(数组)操作函数矩阵(数组)操作函数(续)例2-21: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 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矩阵(数组)操作函数矩阵(数组)操作函数(续)E=1 2 3;4 5 6E=1 2 3 4 5 6 length(E)ans=3 F=1 2 3;4 5 6;7 8 9;4 2 7F=1 2 3 4 5 6 7 8 9 4 2 7 length(F)ans=?例2-21: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 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矩阵(数组)操作函数矩阵(数组)操作函数(续)E=1 2 3;4 5 6E=1 2 3 4 5 6 length(E)ans=3 F=1 2 3;4 5 6;7 8 9;4 2 7F=1 2 3 4 5 6 7 8 9 4 2 7 length(F)ans=4提问:A=reshape(1:9,3,3);B=1 2;3 4;C=1 2 0 0 0 3 4 0 0 0 0 0 1 4 7 0 0 2 5 8 0 0 3 6 9 O=zeros(length(?),length(?)O=?C=?;?矩阵(数组)操作函数矩阵(数组)操作函数(续)C=A O;O 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=reshape(1:9,3,3);B=1 2;3 4;C=1 2 0 0 0 3 4 0 0 0 0 0 1 4 7 0 0 2 5 8 0 0 3 6 9 O=zeros(length(B),length(A)O=0 0 0 0 0 0 C=B O;O A矩阵(数组)操作函数矩阵(数组)操作函数(续)O=zeros(length(A),length(B)O=0 0 0 0 0 0 C=B O;O A创建复杂矩阵利用不同的矩阵运算,通过矩阵合并运算符“”将不同的矩阵组合在一起构成大矩阵 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矩阵(数组)操作函数矩阵(数组)操作函数(续)矩阵和数组(续)矩阵和数组(续)2.1 概述2.2 创建向量2.3 创建矩阵2.4 索引2.5 基本运算2.6 稀疏矩阵2.7 多维数组2.8 小结2.6 2.6 稀疏矩阵稀疏矩阵矩阵的存储方式:1.全元素(Full)存储 完全矩阵2.稀疏(Sparse)存储稀疏矩阵稀疏矩阵存在的必要性:对大多数元素数值为0的矩阵,若采用满阵方式表示,则0元素将占用相当的存储空间。稀疏矩阵的特点:只存储“非零元素”值(按列)和“非零元素”的位置 对大多数元素数值为0的矩阵,创建稀疏矩阵稀疏矩阵建立指令 sparse1、B=sparse(A)例23.A=2 0 0 0;0 0 0 1;0 4 0 0 A=2 0 0 0 0 0 0 1 0 4 0 0 B=sparse(A)B=(1,1)2 (3,2)4 (2,4)1一、稀疏矩阵的建立一、稀疏矩阵的建立 C=1 2 3 4;5 6 7 8;3 7 2 9;C=1 2 3 4 5 6 7 8 3 7 2 9 B+Cans=3 2 3 4 5 6 7 9 3 11 2 92、S=sparse(ir,jc,data,m,n)“三元组”表示法 ir 非零元素所在的行序号 jc 非零元素所在的列序号 data 非零元素的数值 m 矩阵的行 n 矩阵的列稀疏矩阵的建立(续)稀疏矩阵的建立(续)向量标量例24.15 0 0 22 0 -15 0 11 3 0 0 0 S=0 0 0 -6 0 0 0 0 0 0 0 0 91 0 0 0 0 0 0 0 28 0 0 0 data=15 91 11 3 28 22-6-15;ir=1 5 2 2 6 1 3 1;jc=1 1 2 3 3 4 4 6;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例25 S=sparse(1 3 2,1 2 4,2 4 1,3,4)S=?full(S)ans=?稀疏矩阵的建立(续)稀疏矩阵的建立(续)例25 S=sparse(1 3 2,1 2 4,2 4 1,3,4)S=(1,1)2 (3,2)4 (2,4)1 full(S)ans=?稀疏矩阵的建立(续)稀疏矩阵的建立(续)例25 S=sparse(1 3 2,1 2 4,2 4 1,3,4)S=(1,1)2 (3,2)4 (2,4)1 full(S)ans=2