第二章_矩阵和数组_第1页
第二章_矩阵和数组_第2页
第二章_矩阵和数组_第3页
第二章_矩阵和数组_第4页
第二章_矩阵和数组_第5页
已阅读5页,还剩126页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第二章矩阵和数组,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,1b2,1B=b3,1和B=b1,1b1,2b1,3b1,nbn,1,概述(续),矩阵是用一对圆括号或方括号括起来,符合一定规则的数学对象b11b12b13B=b21b22b23b31b32b33对于编程语言,矩阵就是二维的数组,矩阵和数组(续),2.1概述2.2创建向量2.3创建矩阵2.4索引2.5基本运算2.6稀疏矩阵2.7多维数组2.8小结,2.2创建向量,1.在命令窗口逐个输入元素例2-1:X=13pi3+5i2.利用冒号运算符创建向量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.00001.25001.50001.75002.0000,创建向量(续),logspace是用来创建对数空间的向量logspace的基本语法X=logspace(X1,X2,n)该函数创建的向量第一个元素值为10X1,而最后一个元素的数值为10X2,n为向量的元素个数,元素彼此之间的间隔按照对数空间的间隔设置若在表达式中忽略参数n,则系统默认地将向量设置为50个元素,创建向量(续),例2-5使用logspace函数创建向量X=logspace(1,3,3)X=101001000,创建向量(续),创建列向量使用分号作为元素与元素之间的间隔使用转置运算符“”例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创建矩阵,矩阵的元素可以为任意MATLAB数据类型的数值或对象创建矩阵的方法直接输入法使用数组编辑器,2.3.1直接输入法,规则:整个矩阵的元素必须用括住同一行的矩阵元素之间必须用逗号或空格分隔在内矩阵的行与行之间必须用分号分隔,也可以在需要分行的地方用回车键间隔矩阵元素可以是任何MATLAB表达式,可以是实数,也可以是复数,复数用i,j输入例2-7:A=1,2,3;4,5,6;7,8,9X=2pi/2;sqrt(3)3+5i,逗号和分号的作用逗号和分号可作为指令间的分隔符,MATLAB允许多条语句在同一行出现。分号如果出现在指令后,屏幕上将不显示结果。只要是赋过值的变量,不管是否在屏幕上显示过,都会存储在工作空间中,以后可随时显示或调用。变量名尽可能不要重复,否则会覆盖。例2-8:A=1,2,3;4,5,6;7,8,9,X=2pi/2;sqrt(3)3+5i?A=1,2,3;4,5,6;7,8,9;X=2pi/2;sqrt(3)3+5i?,直接输入法(续),例2-8:A=1,2,3;4,5,6;7,8,9,X=2pi/2;sqrt(3)3+5iA=123456789X=2.00001.57081.73213.0000+5.0000iA=1,2,3;4,5,6;7,8,9;X=2pi/2;sqrt(3)3+5iX=2.00001.57081.73213.0000+5.0000i,直接输入法(续),冒号的作用用于生成等间隔的向量,默认间隔为1。例2-9:y=1:3;4:6;7:9,直接输入法(续),2.3.2数组编辑器,调用数组编辑器的方法选择工作空间浏览器中的变量,然后单击工作栏中的按钮在工作空间浏览器中直接双击变量选择工作空间浏览器中的变量,然后单击快捷菜单命令Open在MATLAB命令行窗口中键入指令“openvar变量名”数组编辑器仅能编辑、修改向量或矩阵,对于多维数组,数组编辑器只能察看数组的内容,不能修改多维数组的元素,数组编辑器(续),利用数组编辑器完成矩阵的编辑步骤在命令行窗口中创建一个新的变量,为其赋任意数值如:A=1打开数组编辑器,在数组编辑器中加载相应的变量在数组编辑器的工具栏中,修改矩阵的行数和列数,双击任意元素修改矩阵的元素值,2.3.3矩阵的修改,直接修改在命令行窗口中,可用键找到所要修改的矩阵,用键移动到要修改的矩阵元素上即可修改。在数组编辑器中,可用、键找到所要修改的矩阵元素进行修改。指令修改:用A(,)=来修改。例2-10:A=120;305;789A=120305789A(3,3)=0A=120305780,矩阵和数组(续),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-11B=3274961805访问向量中的元素B(3)ans=7B(137)ans=371B(1:3:5)ans=34,B(end-3:end)ans=1805B(1:5,5:-1:1)ans=?B(1:5;5:-1:1)ans=?,向量元素的访问(续),例2-11B=3274961805访问向量中的元素B(3)ans=7B(137)ans=371B(1:3:5)ans=34,B(end-3:end)ans=1805B(1:5,5:-1:1)ans=3274994723B(1:5;5:-1:1)ans=?,向量元素的访问(续),例2-11B=3274961805访问向量中的元素B(3)ans=7B(137)ans=371B(1:3:5)ans=34,B(end-3:end)ans=1805B(1:5,5:-1:1)ans=3274994723B(1:5;5:-1:1)ans=3274994723,向量元素的访问(续),例2-12对向量的元素进行赋值B(3)=-3B=3274961805B(15)=-15B=Columns1through1332-34961805000Columns14through150-15,-3,2.4.2矩阵元素的访问,访问矩阵的元素需要使用矩阵元素的索引使用矩阵元素的行列全下标形式A(*,*)使用全下标形式访问矩阵元素的方法简单、直接,同线性代数的矩阵元素的概念一一对应使用矩阵元素的单下标形式A(*)矩阵元素的单下标是矩阵元素在内存中存储的序列号,一般地,同一个矩阵的元素在连续的内存单元中(元素的排列以列元素优先),矩阵元素的访问(续),A(1:4,5)A(:,5)A(:,end)A(17:20),A(2:4,2:3)A(234,23),A(1,2)A(5),例13A=,矩阵元素的访问(续),矩阵元素的单下标与全下标之间的转换关系以mn的矩阵为例第i行第j列的元素全下标转换为单下标l=(j-1)m+i例:A(1,2)A(5)m=4,n=5,i=1,j=2l=(j-1)m+i=(2-1)4+1=5MATLAB提供的两个函数sub2ind:根据全下标计算单下标ind2sub:根据单下标计算全下标,矩阵元素的访问(续),例:A=410162;82947;75715;03458A=410162829477571503458,sub2ind(size(A),2,2)ans=6,i,j=ind2sub(size(A),7)i=3j=2,矩阵元素的访问(续),使用索引访问矩阵元素的方法,在索引矩阵或数组的元素时,若直接用冒号运算符且不给任何的参数,则表示选择该行或列,或维中的所有元素,矩阵元素的访问(续),例:用不同的方法访问矩阵的元素A=1:25A=reshape(A,5,5)A=16111621271217223813182349141924510152025A(3,1)或A(3)ans=3,16111621271217223813182349141924510152025,A(end,:)ans=510152025I=135;J=24;A(I,J)A(135,24)ans=6168181020,A(:,4)ans=1617181920,A(3,:)ans=38131823,矩阵和数组(续),2.1概述2.2创建向量2.3创建矩阵2.4索引2.5基本运算2.6稀疏矩阵2.7多维数组2.8小结,矩阵的基本运算函数基本数学运算规则数组的运算运算函数运算指令,2.5基本运算,2.5.1矩阵生成函数,例2-14矩阵生成函数示例A=zeros(3)A=000000000A=ones(3)A=111111111,矩阵生成函数(续),A=eye(3)A=100010001A=rand(3)A=0.95010.48600.45650.23110.89130.01850.60680.76210.8214,A=randn(3)A=-0.43260.28771.1892-1.6656-1.1465-0.03760.12531.19090.3273,例2-14矩阵生成函数示例A=magic(3)A=816357(15)492A=magic(4)A=162313511108(34)97612414151,矩阵生成函数(续),例2-15矩阵生成函数示例A=pascal(3)ans=tril(A)ans=100120136,矩阵生成函数(续),diag(A)ans=126diag(ans)ans=?,例2-15矩阵生成函数示例A=pascal(3)ans=tril(A)ans=100120136,矩阵生成函数(续),diag(A)ans=126diag(ans),ans=100020006,例2-15矩阵生成函数示例A=pascal(3)ans=tril(A)ans=100120136,矩阵生成函数(续),diag(A)ans=126diag(ans),diag(ans)ans=?,ans=100020006,例2-15矩阵生成函数示例A=pascal(3)ans=tril(A)ans=100120136,矩阵生成函数(续),diag(A)ans=126diag(ans),diag(ans),ans=100020006,ans=126,例2-15矩阵生成函数示例A=pascal(3)ans=tril(A)ans=100120136,矩阵生成函数(续),diag(A)ans=126diag(ans),diag(ans),ans=100020006,ans=126,diag(*)*是向量,则执行该指令生成对角矩阵*是矩阵,则执行该指令获取矩阵的对角线元素,2.5.2基本矩阵运算,1.矩阵加、减运算(AB、AB)规则:相加、减的两矩阵必须有相同的行和列,两矩阵对应元素相加减。MATLAB允许参与运算的两矩阵之一是标量,标量与矩阵的所有元素分别进行加减操作。例:A=123;456B=345;789C=3A+B=468;111315A+C=456;789B+C=678;101112,基本矩阵运算(续),2.矩阵乘运算A*B:A矩阵的列数必须等于B矩阵的行数。s*A或A*s:标量可与任何矩阵相乘,标量s分别与矩阵A每个元素相乘。例:A=123;456;780;B=1;2;3;C=A*BC=143223D=-1;0;2;F=pi*DF=-3.141606.2832,基本矩阵运算(续),3.矩阵除运算及线性方程组的解在线性代数中没有矩阵的除运算,只有矩阵逆的运算,在MATLAB中有两种矩阵除运算。A/B矩阵右除,相当于Ainv(B)AB矩阵左除,相当于inv(A)B因此,x=AB是线性方程组Ax=B的解。例:求解方程组3x1+x2-x3=3.6x1+2x2+4x3=2.1-x1+4x2+5x3=-1.4A=31-1;124;-145;B=3.6;2.1;-1.4;x=ABx=1.4818-0.46060.3848,基本矩阵运算(续),4.矩阵乘方AnA自乘n次幂例a=1,2,3;4,5,6;7,8,9;a2ans=303642668196102126150,基本矩阵运算(续),数组运算指元素对元素的算术运算,与通常意义上的由符号表示的线性代数矩阵运算不同。1.数组加减(+,-)运算规则:相加、减的两数组必须有相同的行和列,两数组对应元素相加减。MATLAB允许参与运算的两数组之一是标量,标量与数组的所有元素分别进行加减操作A+BA-B,2.5.3基本数组(元素)运算,与矩阵加减运算等效,数组之一也可为标量。,2.数组乘()运算ABA,B两数组必须有相同的行和列,两数组相应元素相乘。sA或As标量与数组相乘,标量s分别与数组A每个元素相乘,与sA或As相同。例16:A=123;456;789;B=246;135;7910;A.*Bans=281841530497290,基本数组(元素群)运算(续),A=123;456;789;B=246;135;7910;A*Bans=253746558510985133172,3.数组除(/,)运算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.AA的元素分别被标量s除s./A=A.s标量s分别被A的元素除例:A=123;B=456;C1=A./BC1=0.25000.40000.5000C2=B.AC2=0.25000.40000.5000C3=A.BC3=4.00002.50002.0000,基本数组(元素)运算(续),A=123;B=456;A/Bans=0.4156ABans=0000001.33331.66672.0000,4.数组乘方(.)A.nA的每个元素自乘n次A.p对A各元素分别求非整数幂p.A以p为底,分别以A的元素为指数求幂值C=A.B元素对元素的幂C(i,j)=A(i,j).B(i,j)例:A=123;B=456;X=A.2X=1.004.009.00Y=A.0.5Y=1.00001.41421.7321,基本数组(元素)运算(续),C=3.BY=81.00243.00729.00343536Z=A.BZ=1.0032.00729.00142536,5.数组转置(.)例:A=135;246A=135246Aans=123456A.ans=123456,基本数组(元素群)运算(续),结论:对于实数矩阵,矩阵转置和数组转置的计算结果是一致的。,例:A=A*iA=0+1.0000i0+3.0000i0+5.0000i0+2.0000i0+4.0000i0+6.0000iAans=0-1.0000i0-2.0000i0-3.0000i0-4.0000i0-5.0000i0-6.0000iA.ans=0+1.0000i0+2.0000i0+3.0000i0+4.0000i0+5.0000i0+6.0000i,基本数组(元素)运算(续),结论:对于复数矩阵,矩阵转置和数组转置的计算结果不一致。矩阵转置运算共轭转置数组转置运算非共轭转置,函数的主要类别三角函数指数运算函数复数运算函数圆整和求余函数函数在处理参数时,是按照数组运算的规则进行的,2.5.4基本数学函数,三角函数,基本数学函数(续),指数运算函数,基本数学函数(续),复数运算函数,基本数学函数(续),圆整和求余函数,基本数学函数(续),例2-16:圆整和求余函数fix(-1.9)ans=-1floor(-1.9)ans=-2round(-1.9)ans=-2ceil(-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=-1floor(-1.9)ans=-2round(-1.9)ans=-2ceil(-1.9)ans=-1,基本数学函数(续),mod(9,-2)ans=-1rem(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=-1floor(-1.9)ans=-2round(-1.9)ans=-2ceil(-1.9)ans=-1,基本数学函数(续),mod(9,-2)ans=-1rem(9,-2)ans=1,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=-1floor(-1.9)ans=-2round(-1.9)ans=-2ceil(-1.9)ans=-1,基本数学函数(续),mod(9,-2)ans=-1rem(9,-2)ans=1,mod(x,y):ans和y的符号相同rem(x,y):ans和x的符号相同如果x和y的符号相同,则函数mod和rem的结果相同,mod(-9,2)ans=1rem(-9,2)ans=?,mod(9,2)ans=?rem(9,2)ans=?,例2-16:圆整和求余函数fix(-1.9)ans=-1floor(-1.9)ans=-2round(-1.9)ans=-2ceil(-1.9)ans=-1,基本数学函数(续),mod(9,-2)ans=-1rem(9,-2)ans=1,mod(x,y):ans和y的符号相同rem(x,y):ans和x的符号相同如果x和y的符号相同,则函数mod和rem的结果相同,mod(-9,2)ans=1rem(-9,2)ans=-1,mod(9,2)ans=?rem(9,2)ans=?,例2-16:圆整和求余函数fix(-1.9)ans=-1floor(-1.9)ans=-2round(-1.9)ans=-2ceil(-1.9)ans=-1,基本数学函数(续),mod(9,-2)ans=-1rem(9,-2)ans=1,mod(x,y):ans和y的符号相同rem(x,y):ans和x的符号相同如果x和y的符号相同,则函数mod和rem的结果相同,mod(-9,2)ans=1rem(-9,2)ans=-1,mod(9,2)ans=1rem(9,2)ans=?,例2-16:圆整和求余函数fix(-1.9)ans=-1floor(-1.9)ans=-2round(-1.9)ans=-2ceil(-1.9)ans=-1,基本数学函数(续),mod(9,-2)ans=-1rem(9,-2)ans=1,mod(x,y):ans和y的符号相同rem(x,y):ans和x的符号相同如果x和y的符号相同,则函数mod和rem的结果相同,mod(-9,2)ans=1rem(-9,2)ans=-1,mod(9,2)ans=1rem(9,2)ans=1,Mod由分母符号决定rem由分子符号决定,例2-17:圆整和求余函数sign(9)ans=1sign(0)ans=0sign(-9)ans=-1,基本数学函数(续),sign(*)若*是正数,则ans为1若*是零,则ans为0若*是负数,则ans为-1,用于矩阵(数组)操作的常用函数,2.5.5矩阵(数组)操作函数,例2-18:reshape函数使用示例A=1:8A=12345678B=reshape(A,2,4)B=13572468C=reshape(A,3,3)?Errorusing=reshapeToRESHAPEthenumberofelementsmustnotchange.,矩阵(数组)操作函数(续),不能改变矩阵包含元素的个数,将矩阵A改成2行4列,也可写成B=reshape(1:8,2,4),例2-19:对称交换函数使用示例B=13572468fliplr(B)ans=75318642flipud(B)ans=24681357,矩阵(数组)操作函数(续),flipdim函数的第二个参数必须是大于0的整数:参数为1时,效果和flipud函数一致参数为2时,效果和fliplr函数一致,flipdim(B,1)ans=24681357flipdim(B,2)ans=75318642,例2-20:repmat使用示例A=pascal(2)A=1112repmat(A,2,3)ans=111111121212111111121212,矩阵(数组)操作函数(续),repmat函数的基本语法为:repmat(A,M,N)作用是将指定的矩阵A复制MN次,其中M对应的是行,N对应的是列。,创建复杂矩阵使用MATLAB提供的矩阵扩展方法完成相应矩阵的构造假设矩阵A为三阶方阵,B为二阶方阵,由A和B组合构成五阶方阵C=AO;OB,其中O为相应的零矩阵,矩阵(数组)操作函数(续),例2-21:A=reshape(1:9,3,3);B=12;34;O=zeros(length(A),length(B)O=000000C=AO;OBC=1470025800369000001200034,矩阵(数组)操作函数(续),E=123;456E=123456length(E)ans=3F=123;456;789;427F=123456789427length(F)ans=?,例2-21:A=reshape(1:9,3,3);B=12;34;O=zeros(length(A),length(B)O=000000C=AO;OBC=1470025800369000001200034,矩阵(数组)操作函数(续),E=123;456E=123456length(E)ans=3F=123;456;789;427F=123456789427length(F)ans=4,提问:A=reshape(1:9,3,3);B=12;34;C=1200034000001470025800369O=zeros(length(?),length(?)O=?C=?;?,矩阵(数组)操作函数(续),C=AO;OBC=1470025800369000001200034,提问:A=reshape(1:9,3,3);B=12;34;C=1200034000001470025800369O=zeros(length(B),length(A)O=000000C=BO;OA,矩阵(数组)操作函数(续),O=zeros(length(A),length(B)O=000000C=BO;OA,创建复杂矩阵利用不同的矩阵运算,通过矩阵合并运算符“”将不同的矩阵组合在一起构成大矩阵A=12;34;B=A,A*2;tril(A),triu(A);A*3,A*4B=122434681012340436489121216,矩阵(数组)操作函数(续),矩阵和数组(续),2.1概述2.2创建向量2.3创建矩阵2.4索引2.5基本运算2.6稀疏矩阵2.7多维数组2.8小结,2.6稀疏矩阵,矩阵的存储方式:1.全元素(Full)存储完全矩阵2.稀疏(Sparse)存储稀疏矩阵稀疏矩阵存在的必要性:对大多数元素数值为0的矩阵,若采用满阵方式表示,则0元素将占用相当的存储空间。稀疏矩阵的特点:只存储“非零元素”值(按列)和“非零元素”的位置,对大多数元素数值为0的矩阵,创建稀疏矩阵稀疏矩阵建立指令sparse1、B=sparse(A)例23.A=2000;0001;0400A=200000010400B=sparse(A)B=(1,1)2(3,2)4(2,4)1,一、稀疏矩阵的建立,C=1234;5678;3729;C=123456783729B+Cans=3234567931129,2、S=sparse(ir,jc,data,m,n)“三元组”表示法ir非零元素所在的行序号jc非零元素所在的列序号data非零元素的数值m矩阵的行n矩阵的列,稀疏矩阵的建立(续),向量,标量,例24.1500220-150113000S=000-60000000091000000028000data6-15;ir=15226131;jc=11233446;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=1500220-150113000000-60000000091000000028000,例25S=sparse(132,124,241,3,4)S=?full(S)ans=?,稀疏矩阵的建立(续),例25S=sparse(132,124,241,3,4)S=(1,1)2(3,2)4(2,4)1full(S)ans=?,稀疏矩阵的建立(续),例25S=sparse(132,124,241,3,4)S=(1,1)2(3,2)4(2,4)1full(S)ans=200000010400,稀疏矩阵的建立(续),在MATLAB命令行窗口中键入指令helpsparfun,可以得到稀疏矩阵运算函数列表,稀疏矩阵的建立(续),稀疏矩阵的常用函数,1、speye(创建单位稀疏矩阵)speye(m,n)在行、列相同位置上的元素值为“1”,其余位置上的元素值为“0”speye(m)是speye(m,m)的简写。在对角线上的元素值为“1”,其余位置上的元素值为“0”例26:A=speye(3,4)A=(1,1)1(2,2)1(3,3)1full(A)ans=100001000010,稀疏矩阵的建立(续),B=speye(3,3),C=speye(3)C=(1,1)1(2,2)1(3,3)1full(C)ans=100010001,B=(1,1)1(2,2)1(3,3)1full(B)ans=100010001,2、find(获取矩阵非零元素的索引向量)find(A)例27:S=sparse(132,124,241,3,4)S=(1,1)2(3,2)4(2,4)1find(S)ans=1611,稀疏矩阵的建立(续),full(S)ans=200000010400,3、nonzeros(获取矩阵的非零元素向量)nonzeros(A)例27:S=sparse(132,124,241,3,4)S=(1,1)2(3,2)4(2,4)1nonzeros(S)ans=241,稀疏矩阵的建立(续),full(S)ans=200000010400,4、nnz(获取矩阵的非零元素的个数)nnz(A)例28:S=sparse(132,124,241,3,4)S=(1,1)2(3,2)4(2,4)1nnz(S)ans=3,稀疏矩阵的建立(续),full(S)ans=200000010400,5、nzmax(获取矩阵的各个向量的最大长度)nzmax(A)例29:S=sparse(132,124,241,3,4)S=(1,1)2(3,2)4(2,4)1nzmax(S)ans=3,稀疏矩阵的建立(续),full(S)ans=200000010400,6、spones(将稀疏矩阵中的非零元素用数字1代替)spones(A)例30:S=sparse(132,124,241,3,4)S=(1,1)2(3,2)4(2,4)1A=spones(S)A=(1,1)1(3,2)1(2,4)1full(A)ans=100000010100,稀疏矩阵的建立(续),full(S)ans=200000010400,7、issparse(判断输入参数是否为稀疏矩阵)issparse(A):是,则ans为“1”否,则ans为“0”例31:S=sparse(132,124,241,3,4)S=(1,1)2(3,2)4(2,4)1issparse(S)ans=1A=123;456;issparse(A)ans=0,稀疏矩阵的建立(续),稀疏矩阵和普通矩阵(满阵)之间可以直接进行运算,运算结果是满阵例32:A=2000;0001;0400;S=sparse(A)S=(1,1)2(3,2)4(2,4)1A+Sans=400000020800,二、稀疏矩阵的运算,稀疏矩阵和稀疏矩阵之间进行运算,运算结果是稀疏矩阵例33B=0030;1000;0500;T=sparse(B)T=(2,1)1(3,2)5(1,3)3S+Tans=(1,1)2(2,1)1(3,2)9(1,3)3(2,4)1,稀疏矩阵的运算(续),full(S+T)ans=203010010900A+Bans=203010010900,矩阵和数组(续),2.1概述2.2创建向量2.3创建矩阵2.4索引2.5基本运算2.6稀疏矩阵2.7多维数组2.8小结,2.7多维数组,多维数组:用全下标表示元素时,下标超过了两个的数组第一维行(Row)第二维列(Column)第三维页(Page)第四维箱(Box)三维数组的每一页上的数组必须具有同样的行数和列数介绍的内容创建多维数组多维数组的操作函数,2.7.1创建多维数组,使用直接赋值的方法创建多维数组使用MATLAB函数创建多维数组,1、使用直接赋值的方法创建多维数组,例34A=pascal(4)A=1111123413610141020A(:,:,2)=eye(4)A(:,:,1)=1111123413610141020A(:,:,2)=1000010000100001A(:,:,3)=magic(5)?Subscriptedassignmentdimensionmismatch.,思考:A=pascal(4)A=1111123413610141020A(:,:,1)=eye(4)?,使用直接赋值的方法创建多维数组(续),例34A=pascal(4)A=1111123413610141020A(:,:,2)=eye(4)A(:,:,1)=1111123413610141020A(:,:,2)=1000010000100001A(:,:,3)=magic(5)?Subscriptedassignmentdimensionmismatch.,思考:A=pascal(4)A=1111123413610141020A(:,:,1)=eye(4)A=1000010000100001,使用直接赋值的方法创建多维数组(续),例35B(3,3,3)=1B(:,:,1)=000000000B(:,:,2)=000000000B(:,:,3)=000000001,使用直接赋值的方法创建多维数组(续),例36A(2,1,3)=5A(:,:,1)=00A(:,:,2)=00A(:,:,3)=05,2、使用函数创建多维数组,例37rand(3,3,3)ans(:,:,1)=0.95010.48600.45650.23110.89130.01850.60680.76210.8214ans(:,:,2)=0.44470.92180.40570.61540.73820.93550.79190.17630.9169ans(:,:,3)=0.41030.35290.13890.89360.81320.20280.05790.00990.1987,使用函数创建多维数组(续),例38ones(3,3,3)ans(:,:,1)=111111111ans(:,:,2)=111111111ans(:,:,3)=111111111,使用函数创建多维数组(续),例39A=magic(3)A=816357492B=eye(3)B=100010001C=pascal(3)C=111123136,cat(3,A,B,C)ans(:,:,1)=816357492ans(:,:,2)=100010001ans(:,:,3)=111123136,cat(1,A,B,C)ans=816357492100010001111123136cat(2,A,B,C)ans=816100111357010123492001136,cat(1,A,B)相当于A;Bcat(2,A,B)相当于A,Bcat(3,A,B)创建三维数组cat(4,A,B)创建四维数组,使用函数创建多维数组(续),访问多维数组的元素和访问向量或者矩阵元素的方法一致,可以使用相应的索引作为下标访问多维数组的元素,也可以使用单下标的方式来访问,使用函数创建多维数组(续),例40A=rand(3,3,2)A(:,:,1)=0.50280.30460.68220.70950.18970.30280.42890.19340.5417A(:,:,2)=0.15090.86000.49660.69790.85370.89980.37840.59360.8216,ind2sub(size(A),8)ans=8如果将单下标向全下标转换不给输出参数,转换得到的结果还是单下标。,sub2ind(size(A),2,3,2)ans=17,i,j,k=ind2sub(size(A),8)i=2j=3k=1,多维数组的操作函数,2.7.2多维数组的操作函数,例41:permute和ipermute函数使用示例A=rand(4,5,6);size(A)ans=456B=permute(A,312);size(B)ans=645C=ipermute(B,312);size(C)ans=456D=permute(B,312);size(D)ans=564,多维数组的操作函数(续),A一维行4A二维列5A三维页6B一维行(3)A三维6B二维列(1)A一维4B三维页(2)A二维5D一维行(3)B三维5D二维列(1)B一维6D三维页(2)B二维4permute和ipermute函数的第二个参数是向量,向量内的元素是多维数组各个维的序号。,C=ipermute(B,312)相当于B=permute(C,312)B一维行6(3)C三维B二维列4(1)C一维B三维页5(2)C二维,课堂作业:permute和ipermute函数使用示例A=ones(5,8,9);size(A)ans=?B=permute(A,213);size(B)ans=?C=ipermute(B,213);size(C)ans=?D=permute(B,213);size(D)ans=?,多维数组的操作函数(续),答案,例42:shiftdim函数使用示例shiftdim(A,m)或shiftdim(A)1、shiftdim(A,m)m为正时,将数组维数向左循环平移m位,若第m位维数值为“1”,则消除,其前相邻的维数值为“1”的,也消除。m为负时,将数组维数向右平移m位,这m位用维数值为“1”进行填补。m为正(1):A=rand(1,3,1,1,5);size(A)ans=13115size(shiftdim(A,1)ans=3115size(shiftdim(A,2)ans=11513,多维数组的操作函数(续),size(shiftdim(A,3)ans=1513size(shiftdim(A,4)ans=513size(shiftdim(A,5)ans=13115,m为正(2):A=rand(1,3,1,2,5);size(A)ans=13125size(shiftdim(A,1)ans=3125size(shiftdim(A,2)ans=12513,多维数组的操作函数(续),size(shiftdim(A,3)ans=2513size(shiftdim(A,4)ans=51312,m为正(3):A=rand(1,1,1,2,5);size(A)ans=11125size(shiftdim(A,1)ans=1125size(shiftdim(A,2)ans=125,多维数组的操作函数(续),size(shiftdim(A,3)ans=25size(shiftdim(A,4)ans=51112,m为负(1):A=rand(1,3,1,1,5);size(A)ans=13115size(shiftdim(A,-1)ans=113115size(shiftdim(A,-2)ans=1113115,多维数组的操作函数(续),m为负(2):A=rand(1,3,1,2,5);size(A)ans=13125size(shiftdim(A,-1)ans=113125size(shiftdim(A,-3)ans=11113125,多维数组的操作函数(续),m为负(3):A=rand(1,1,1,2,5);size(A)ans=11125size(shiftdim(A,-1)ans=111125size(shiftdim(A,-2)ans=1111125,多维数组的操作函数(续),2、shiftdim(A)将多维数组前面维数值为“1”的消除。A=rand(1,3,1,1,5);size(A)ans=13115size(shiftdim(A)ans=3115A=rand(1,3,1,2,5);size(A)ans=13125size(shiftdim(A)ans=3125,多维数组的操作函数(续),A=rand(1,1,1,2,5);size(A)ans=11125size(shiftdim(A)ans=25,例43:circshift函数使用示例A=123;456;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论