数组和矩阵的关系 MATLAB
Matlab——数组与矩阵

Matlab——数组与矩阵1 一维数组(向量)的创建1.1 直接输入法从键盘直接输入元素,列与列之间的数据用逗号或空格分隔,行与行之间的数据用分号分隔。
a=[1;2;3] 生成列向量b=[1,2,3] 生成行向量c=[1 2 3] 生成行向量说明:在一行中写多条语句时,逗号和分号可作为语句间的分隔符。
如果用分号,则命令窗不显示运行结果。
1.2 冒号生成法用于产生递增或递减的等差数列。
格式:初值:步长:终值说明:步长为1时可以省略。
a=1:2:6b=1:61.3 定数线性采样法用于产生起止于两点之间的n 个数据点。
格式:x = linspace(a,b,n)b= linspace(1,6,6) b=1:6说明:n 的默认值是100。
1.4 拼接法利用已有的一维数组创建新的一维数组。
将两个行向量或列向量拼接为一个行向量或列向量,也可以利用冒号抽取其中的部分数据生成新的一维数组。
行向量拼接:用方括号和逗号a3= [a1,a2]列向量拼接:用方括号和分号b3= [b1;b2]向量的抽取:用冒号a4= a3(1:2:end)抽取a3 中的奇数位置的元素组成新的数组例1 创建两个不同的一维行向量和列向量,并利用这两个向量拼接成一个新的行向量和列向量,然后再由新向量中的奇数位置元素组成新的向量。
x1= 1:3x2= linspace(5,20,4)x= [x1,x2]y1=[1:3]’y2= linspace(5,20,4)’y= [y1;y2]x3= x ( 1:2:end)y3= y ( 1:2:end)2 一维数组中元素的提取利用圆括号和索引号。
A= [1 2 3 4 5]a3=A(3)提取第3个元素3 二维数组(矩阵)的创建3.1 直接输入法从键盘直接输入元素。
输入规则如下:(1)矩阵元素必须在方括号内;(2)同行元素之间用空格或逗号隔开;(3)行与行之间用分号或回车符隔开;(4)元素可以是数值、变量、表达式或函数;(5)矩阵的维数不必预先定义。
matlab第二章矩阵运算基础

南京信息工程大学
4
例2.1 创建矩阵
>>x=[1 2 3;4 5 6;7 8 9] >>x=[1 2 3 456 7 8 9] >>x=[a b c;e f g;u v w] >>x=[1 2 3;4 5 6]; y=[2 3 4;5 6 7] >>Q=x*y >>a=2;b=3 >>x=a*b
2010-12-29
2010-12-29 南京信息工程大学 6
2.1 矩阵的创建
2、 赋值语句 MATLAB赋值语句有两种格式:
变量=表达式(或数) 表达式
2010-12-29
南京信息工程大学
7
【例2.2】 x=[1,2,3;4,5,6;7,8,9] 与[1,2,3;4,5,6;7,8,9]。
5 + cos 47
【例2.3】计算
2010-12-29
南京信息工程大学
25
§2.2 矩阵和数组的算术运算 六、点运算
C=A.*B C=A.\B
C=A./B C=A.^B
2010-12-29
南京信息工程大学
26
§2.2 矩阵和数组的算术运算 七、幂运算
C=A^B C=A.^B
2010-12-29
南京信息工程大学
27
例2.12 例2.13 例2.14 例2.15
find(x)
检查x是 否全为1
南京信息工程大学 42
2010-12-29
例2.20 建立矩阵A,然后找出大于4的元素位置 (1)建立A >>A=[4 -6 5 -54 0 6 56 0 67 -45 0] (2)找出大于4的元素位置 >>find(A>4)
MATLAB数值计算功能(向量、矩阵、数组、稀疏矩阵)

数值计算功能向量及其运算1、向量生成(1)、直接输入向量元素用“[ ]”括起来,用空格或逗号生成行向量,用分号生成列向量a1=[11 14 17 18]a2=[11,14,17,18]a2=[11;14;17;18] %列向量用“’”可以进行向量转置a1=[11 14 17 18]a4=a1' %a1行向量,a4列向量也可以用组合方法:A=[1 2 3];B=[7 8 9];C=[A 4 ones(1,2) B](2)、等差元素向量生成冒号生成法:Vec=Vec0:n:Vecn,其中Vec表示生成的向量,Vec0表示第一个元素,n表示步长,Vecn表示最后一个元素使用linespace函数:Vec=linespace(Vec0,n,Vecn),其中Vec表示生成的向量,Vec0表示第一个元素,n表示生成向量元素个数(默认n=100),Vecn表示最后一个元素vec1=10:5:50vec2=50:-5:10vec3=linspace(10,50,6)2、向量的基本运算(1)、向量与数的四则运算向量中每个元素与数的加减乘除运算(除法运算时,向量只能作为被除数,数只能作为除数)vec1=linspace(10,50,6)vec1+100vec2=logspace(0,10,6) %对数等分向量vec2/100(2)、向量与向量之间的加减运算向量中的每个元素与另一个向量中相对应的元素的加减运算vec1=linspace(10,50,6)vec2=logspace(0,2,6)vec3=vec1+vec2(3)、点积、叉积和混合机点积:dot函数,注意向量维数的一致性x1=[11 22 33 44]x2=[1 2 3 4]a=dot(x1,x2)sum(x1.*x2) %还可以采用sum函数计算向量的点积叉积:cross函数,注意向量维数的一致性(由几何意义可知,向量维数只能为3)x1=[11 22 33 44]x2=[1 2 3 4]x3=cross(x1,x2) %报错,维数只能为3x1=[11 22 33]x2=[1 2 3]x3=cross(x1,x2)混合积:结果为一个数,先求cross,再求dota=[1 2 3]b=[2 4 3]c=[5 2 1]v=dot(a,cross(b,c))v=cross(a,dot(b,c)) %报错矩阵及其运算MATLAB的基本单位是矩阵,逗号或空格区分同一行不同元素,分号区分不同行1、矩阵的生成4种方法:在command window直接输入;通过语句和函数产生;M文件中建立;外部数据文件中导入(1)、直接输入:把矩阵元素直接排列到方括号中,每行元素用逗号或空格相隔,行与行之间用分号相隔martix=[1 1 1 1;2,2,2,2;3,3,3,3;4 4 4 4]冒号用法:A=[1 1 1;1 2 3;1 3 6]B=A(1:2,:)(2)文件导入:*.mat*.txt*.datload 文件名参数直接导入:File—Import Data2、矩阵的基本数值运算(1)、矩阵与是常数的四则运算(除法时,常数只能作为除数)matrix=[1 1 1 1;2,2,2,2;3,3,3,3;4 4 4 4]m1=100+matrixm2=100-matrixm3=100*matrixm4=matrix/2(2)、矩阵之间的四则运算加减法:矩阵各个元素之间的加减法,必须是同型矩阵matrix=[1 1 1 1;2,2,2,2;3,3,3,3;4 4 4 4]m1=20*matrixm2=m1+matrixm3=[11 22 33;1 2 3;4 5 6]m4=matrix-m1m5=m3+m1 %报错,非同型矩阵乘法:用*,左矩阵的列数需等于右矩阵的行数A=[1 1 1 1;2 2 2 2;3 3 3 3;4 4 4 4]B=[1 5 9 2;6 3 5 7;2 5 8 9;4 5 6 3]C=A*BD=[1 5 9;6 3 5;2 5 8]E=A*D % 报错,4*4矩阵不能与3*3矩阵相乘除法:左除\(AX=B则X=A\B,相当于X=inv(A)*B,但是左除稳定性好)右除/(XA=B则X=B/A,相当于X=B*inv(A))个人认为:左除相当于逆矩阵左乘,右除相当于逆矩阵右乘%解方程组XA=B的解,本列中A=[2 1 -1; 2 1 0;1 -1 1] ;B=[1 -1 3;4 3 2] A=[2 1 -1; 2 1 0;1 -1 1]B=[1 -1 3;4 3 2]X=B/A矩阵可以使用比较运算符:结果矩阵的对应位置为0或1数据变换:floorceilroundfixrem[n,d]=rat(A):A表示为两个整数阵对应元素相除的形式A=n./d3、矩阵的特征参数运算(1)、乘方与开方乘方:A^p计算A的p次方p>0:A的p次方p<0:A逆矩阵的abs(p)次方A=[1 2 3 4;4 5 6 7;4 5 6 7;8 9 10 11]B=A^10开方:若有X*X=A,则有sqrtm(A)=XA=magic(5)B=sqrtm(A)B^2 %验证正确性(2)、指数与对数指数:expm(X)=V*diag(exp(diag(D)))/V([V,D]=eig(X))对数:L=logm(A),与指数运算互逆X=rand(4)Y=expm(X)A=randn(4)B=logm(A)(3)、逆运算inv函数,充要条件:矩阵的行列式不为0A=[1 0 0 0;1 2 0 0;2 1 3 0;1 2 1 4]B=inv(A)广义逆矩阵(伪逆):pinv(A)非奇异矩阵的pinv与inv相同(4)、行列式det函数A=[1 0 0 0;1 2 0 0;2 1 3 0;1 2 1 4]B=inv(A)x=det(A)y=det(B)i=x*y(5)、特征值E=eig(X):生成由X的特征值组成的列向量[V,D]=eig(X):V是以X的特征向量为列向量的矩阵,D是由矩阵X的特征值构成的对角阵D=eigs(X):生成由X的特征值组成的列向量(eigs函数使用迭代法求解矩阵的特征值和特征向量,X必须是方阵,最好是大型稀疏矩阵)[V,D]=eig(X):V是以X的特征向量为列向量的矩阵,D是由矩阵X的特征值构成的对角阵X=magic(3)A=[1 0 0;0 0 3;0 9 0]E=eig(X)[V D]=eig(X)D=eigs(A)[V D]=eigs(A)(6)、矩阵(向量)的范数norm(X):2-范数norm(X,2):2-范数norm(X,1):1-范数norm(X,inf):无穷范数norm(X,’fro’):Frobenius范数normest(X):只能计算2-范数,并且是2-范数的估计值,用于计算norm(X)比较费时的情况X=hilb(4)norm(4)norm(X)norm(X,2)norm(X,1)norm(X,inf)norm(X,'fro')normest(X)(7)、矩阵的条件数运算矩阵的条件数是判断矩阵“病态”成都的一个度量,矩阵A的条件数越大,表明A越病态,反之,表明A越良态,Hilbert矩阵就是有名的病态矩阵cond(X):返回关于矩阵X的2-范数的条件数cond(X,P):关于矩阵X的P-范数的条件数(P为1、2、inf或’fro’)rcond(X):计算矩阵条件数的倒数值,该值越接近0就越病态,越接近1就越良态condest(X):计算关于矩阵X的1-范数的条件数的估计值M=magic(3);H=hilb(4);c1=cond(M)c2=cond(M,1)c3=rcond(M)c4=condest(M)h1=cond(H)h2=cond(H,inf)h3=rcond(H)h4=condest(H)由以上结果可以看出,魔术矩阵比较良态,Hilbert矩阵是病态的(8)、秩rank函数T=rand(6)rank(T) %6,满秩矩阵T1=[1 1 1;2 2 3]r=rank(T1) %r=2,行满秩矩阵(9)、迹trace函数,主对角线上所有元素的和,也是特征值之和M=magic(5)T=trace(M)T1=eig(M)T2=sum(T1)4、矩阵的分解运算(1)、三角分解(lu)非奇异矩阵A(n*n),如果其顺序主子式均不为0,则存在唯一的单位下三角L和上三角阵U,从而使得A=LU[L,U]=lu(X):产生一个上三角矩阵U和一个下三角矩阵L,使得X=LU,X可以不为方阵[L,U,P]=lu(X):产生一个单位下三角矩阵L、一个上三角矩阵U和交换矩阵P,PX=LUY=lu(X):如果X是满矩阵,将产生一个lapack’s的dgetrf和zgetrf的输出常式矩阵Y;如果X 是稀疏矩阵,产生的矩阵Y将包含严格的下三角矩阵L和上三角矩阵U,这两种情况下,都不会有交换矩阵PX=[6 2 1 -1;2 4 1 0;1 1 4 -1;-1 0 -1 3][L U]=lu(X)[L U P]=lu(X)Y=lu(X)(2)、正交分解(qr)对于矩阵A(n*n),如果A非奇异,则存在正交矩阵Q和上三角矩阵R,使得A满足关系式A=QR,并且当R的对角元都为正时,QR分解是唯一的[Q,R]=qr(A):产生一个与A维数相同的上三角矩阵R和一个正交矩阵Q,使得满足A=QR [Q,R,E]=qr(A):产生一个交换矩阵E、一个上三角矩阵R和正交阵Q,这三者满足AE=QR [Q,R]=qr(A,0):对矩阵A进行有选择的QR分解,当矩阵A为m*n且m>n,那么只会产生具有前n列的正交矩阵QR=qr(A):只产生矩阵R,并且满足R=chol(A’*A)A=[17 3 4;3 1 12;4 12 8][Q R]=qr(A)[Q R E]=qr(A)[Q R]=qr(A,0)R=qr(A)[Q,R]=qrdelete(A,j):去除第j列求QR分解[Q,R]=qrdelete(A,j,x):在第j列插入x后求QR分解(3)、特征值分解(eig)[V,D]=eig(X):V是以矩阵X的特征向量作为列向量构成的矩阵,D是矩阵X的特征值构成的对角阵,满足XV=VD[V,D]=eig(A,B):对矩阵A、B做广义特征值分解,使得AV=BVDA=magic(4)[V D]=eig(A)Z=A*V-V*DB=[17 3 4 2;3 1 12 6;4 12 8 7;1 2 3 4][V D]=eig(A,B)Z=A*V-B*V*D(4)、Chollesky分解(chol)当矩阵A(n*n)对称正定时,则存在唯一的对角元素为正的上三角矩阵R,使得A=R’*R,当限定R的对角元素为正的时候,该分解是唯一的当矩阵A为非正定阵时,会提示出错A=[4 -1 1;-1 4.25 2.75;1 2.75 3.5]R=chol(A)R'*R %=AA=[0 4 0;3 0 1;0 1 3]R=chol(A) %报错,A为非正定阵(5)奇异值分解(svd)[U,S,V]=svd(X):与矩阵X维数相同的对角阵S、正交矩阵U和正交矩阵V,使得满足X=USV’[U,S,V]=svd(X,0):X为M*N矩阵,当M>N时,生成的矩阵U只有前N列元素被计算出来,并且S为N*N矩阵X=[1 2 3;4 5 6;7 8 9][U S V]=svd(X)X=[1 2 3;4 5 6;7 8 9;10 11 12][U S V]=svd(X)X=[1 2 3;4 5 6;7 8 9;10 11 12ckl[U S V]=svd(X,0)Schur分解(正交阵和schur阵)[U,T]=schur(A):A=UTU’schur阵是主对角线元素为特征值的三角阵5、矩阵的一些特殊处理size(A):求矩阵A的行数、列数diag(A):求出矩阵A的对角元素repmat(A):将矩阵A作为单位,赋值成m*n矩阵,其中每个元素都是A矩阵cat(k,A,B):k=1合并后形如[A;B](A,B列数相等);k=1合并后形如[A,B](A,B行数相等)(1)、矩阵的变维reshape(X,M,N):将矩阵X的所有元素分配到一个M*N的新矩阵,当矩阵X的元素不是M*N 时,返回错误reshape(X,M,N,P,...):返回由矩阵X的元素组成的M*N*P*...多维矩阵,若果M*N*P* (X)元素数不同时,将返回错误reshape(X,[M,N,P,…]):与上一条相同A=rand(4,2)reshape(A,2,4)reshape(A,[2,2,2])用冒号变维:A=[1 2 3 4;5 6 7 8;9 10 11 12];B=ones(2,6);B(:)=A(:)(2)、矩阵的变向rot90(A):A按逆时针旋转90度rot90(A,K):A按逆时针旋转90*K度filpud(X):将X上下翻转fliplr(X):将X左右翻转flipdim(X,DIM):将X的第DIM维翻转X=[1 4;2 5;3 6]rot90(X)rot90(X,-1)flipud(X)fliplr(X)flipdim(X,2) %左右翻转6、特殊矩阵的生成(1)、零矩阵和全1矩阵的生成A=zeros(M,N):生成M*N的零矩阵A=zeros(size(B)):生成与B同型的零矩阵A=zeros(N):生成N阶零矩阵仿真全1矩阵的生成与零矩阵的生成类似,使用ones函数A=zeros(4,5)B=[1 2 3 4 5;2 3 4 5 6;9 8 7 6 5;8 7 6 5 4]A=zeros(size(B))A=zeros(5)C=ones(5,6)C=ones(3)(2)、对角矩阵的生成A=diag(V,K):V为某个向量,K为向量V偏离主对角线的列数,K=0表示V为主对角线,K>00表示V在主对角线以上,K<0表示V在主对角线以下A=diag(V):相当于K=0v=[1 9 8 1 6]diag(v,1)diag(v)(3)、随机矩阵的生成rand(N):生成N*N的随机矩阵,元素值在(0.0,1.0)之间rand(M,N)randn(N):生成N*N的随机矩阵,元素之服从正态分布N(0,1)randn(M,N)rand(5)randn(5)(4)、范德蒙德矩阵的生成A=vander(V):有A(I,j)=v(i)n-jv=[1 3 5 7 9]A=vander(v)(5)、魔术矩阵的生成它是一个方阵,方阵的每一行,每一列以及每条主对角线的元素之和都相同(2阶方阵除外)magic(N):生成N阶魔术矩阵,使得矩阵的每一行,每一列以及每条主对角线元素和相等,N>0(N=2除外)magic(2)magic(3)magic(4)(6)、Hilbert矩阵和反Hilbert矩阵的生成Hilbert矩阵的第i行、第j列的元素值为1/(i+j-1),反Hilbert矩阵是Hilbert矩阵的逆矩阵hilb(N):生成N阶的Hilbert矩阵invhilb(N):生成N阶的反Hilbert矩阵A=hilb(5)B=invhilb(5)C=A*Brandpem(n):随机排列hess(A):hess矩阵pascal(n):Pascal矩阵hankel(c):Hankel矩阵wilkinson(n):wilkinson特征值测试矩阵blkdiag(a,b,c,d):产生以输入元素为对角线元素的矩阵注:diag函数的输入参数只能有一个(可以为向量)compan(u):友矩阵hadamard(n):hadamard矩阵toeplitz(c,r):托布列兹阵数组及其运算1、数组寻址和排序(1)、数组的寻址A=randn(1,10)A(4) %访问A的第4个元素A(2:6) %访问A的第2到6个元素A(6:-2:1)A([1 3 7 4]) %访问A中1、3、7和4号元素A(4:end) %end参数表示数组的结尾(2)、数组的排序sort(X):将数组X中的元素按升序排序X是多维数组时,sort(X)命令将X中的各列元素按升序排序X是复数时,sort(X)命令将X中的各个元素的模abs(X)按升序排序X是一个字符型单元数组,sort(X)命令将X中的各列元素按ASCII码升序排序Y=sort(X,DIM,MODE):DIM选择用于排列的维,MODE决定了排序的方式(’ascend’升序,’descend’降序),该命令生成的数组Y与X是同型的X=[3 7 5;0 4 2]sort(X,1) %纵向升序排序sort(X,2) %横向升序排序sort(2)2、数组的基本数值运算(1)、加减法(与矩阵加减法相同)X=[1 4 7]Y=[2 5 8]Z=X-YV=X+Y(2)、数组的乘除法乘法用“.*”:X、Y有相同维数,X.*Y表示X和Y中单个元素之间的对应乘积除法用“./”:注意“./”和“.\”完全不同X=[10 52 96 12 56]Y=[2 26 3 4 8]Z=[10 52 96 12 56 42]Z1=X.*YZ2=X.*Z %报错,维数问题Z3=X./Y %Z3=5,2,32,3,7Z4=X.\Y %Z4=0.2,0.5,0.0313,0.3333,0.1429Z5=X.\Z %报错,维数问题(3)、数组的乘方两个数组之间的乘方X=[1 4 7]Y=[2 5 8]Z=X.^Y乘方运算时指数为标量X=[3 6 9]Z=X.^3乘方运算时底数为标量X=[4 5 6 7 8 9]Z=3.^X数组和矩阵也可以进行exp、log、sqrt等运算,是对每个对应元素进行运算3、数组的关系运算小于(<),小于等于(<=),大于(>),大于等于(>=),等于(==),不等于(~=),结果为1,则关系式为真,结果为0,则关系式为假%rem(X,n),求余函数,X为被除数,n为除数M=magic(7)N=(rem(M,3))N=(rem(M,3)<=1)N=(rem(M,3)==1)N=(rem(M,3)>=1)4、数组的逻辑运算与(&),或(|),非(~),其中与、或可以比较两个标量或者两个同阶数组(或矩阵),非运算时针对数组(或矩阵中的每一个元素),当逻辑为真则返回1,当逻辑为假则返回0M=[1 1 0;0 1 0;1 0 0]N=[1 0 1;1 1 1;0 0 0]M|NM&N~Ncat:串接flipdimfliplrflipudkron:积数组permute:重组repmatreshaperot90稀疏型矩阵1、稀疏矩阵的生成(1)、speye函数:生成单位稀疏矩阵speye(size(A))speye(M,N):维数为M和N中较小的一个speye(N)A=eye(10)speye(size(A))speye(7,6)speye(5)(2)、sprand函数:生成随机稀疏矩阵(元素服从0-1之间的随机分布)R=sprand(S):产生与稀疏矩阵S结构相同的稀疏矩阵,但它的元素都是0-1上的随机数Rsprand(M,N,D):产生一个M*N的随机稀疏矩阵R,它的非您元素的个数近似为M*N*D,注意D的值在0-1之间且不要过大v=[3 5 6 2 1 9 6 5 5 6]S=diag(v)R=sprand(S)R=sprand(10,10,0.08)(3)、sparse函数S=sparse(X):将矩阵X转化为稀疏矩阵SS=sparse(I,j,s,m,n,nzm):生成m*n的稀疏矩阵S,向量s的元素分布在以向量i的对应值和向量j的对应值为坐标的位置上,其中nzm=length(s)S=sparse(I,j,s):生成m*n的稀疏矩阵S,向量s的元素分布在以向量i的对应值和向量j的对应值为坐标的位置上,其中m=max(i),n=max(j)S=sparse(m,n):是sparse([],[],[],m,n,0)的简化形式i=[6 2 7 7 4 1 2 5]j=[1 3 2 7 2 8 3 2]s=[8 3 7 7 1 7 0 2]X=diag(s,-2)S=sparse(X)S1=sparse(i,j,s,10,10,7) %报错,nzmax=length(s)S1=sparse(i,j,s,10,10,8)S2=sparse(i,j,s,10,9) %默认nzmax=length(s)S2=sparse(i,j,s) %m=max(i),n=max(j)2、稀疏矩阵的操作(1)、nnz函数:用于求非零元素的个数nz=nnz(S):返回S总非零元素个数D=nnz(S)/prod(size(S)):表示稀疏矩阵S中非零元素的密度v=[6 2 7 7 4 1 3 5]S=diag(v,-1)nz=nnz(S)D=nnz(S)/prod(size(S))(2)、sponse函数R=sponse(S):生成一个与稀疏矩阵S结构相同的稀疏矩阵R,但是在矩阵S中的非零元素的位置上用元素1替换S=sprandsym(10,0.05)R=spones(S)(3)、spalloc函数S=spalloc(m,n,nzm):生成一个所有元素都为0的m*n阶稀疏矩阵,计算机利用这些空间来存储nzm个非零元素n=3;v=sprand(n,1,0.33) %生成3*1的稀疏列向量s=spalloc(n,n,1*n) %分配3*3的空间,最终可以存储3个非零元素for j=1:ns(:,j)=(v) %v为含有一个非零元素的稀疏列向量end(4)、full函数S=full(X):将稀疏矩阵(三元组表示)转换为满矩阵(矩阵表示)s(6,1)=8;s(4,2)=1;s(5,3)=60;s(6,2)=57;s(1,7)=25;s(3,8)=37;full(s)(5)、find函数I=find(X):返回矩阵X的非零元素的位置,如I=find(X>100) 返回X中大于100的元素的位置[I,J]=find(X):返回X中非零元素所在的行I和列J的具体数据[I,J,V]=find(X):除了返回I和J,还返回矩阵中非零元素的值V注:find(X)和find(X~=0)会产生同样的I和J,但是后者会生成一个包括所有非零元素位置的向量S(10,50)=82;S(32,14)=82;S(251,396)=25;I=find(S)[I J]=find(S)[I J V]=find(S)(6)、issparse函数issparse(S):返回值为1说明矩阵S是一个稀疏矩阵,返回值为0时说明矩阵S不为稀疏矩阵v=[6 2 7 7 4 1 3 5]S=diag(v,2)R=sparse(S)N=issparse(S) %返回0,不为稀疏矩阵Y=issparse(R) %返回1,为稀疏矩阵。
[Matlab]数组运算和矩阵运算
![[Matlab]数组运算和矩阵运算](https://img.taocdn.com/s3/m/67e7b8e29b89680203d82581.png)
上面方程是超定方程.要注意的:结果矩阵 x 是列向量形式.如果, >> a=[21 34 20 5; 78 20 21 14; 17 34 31 38]; >> b=[10 20 30]'; >> x=b\a x= 1.6286 1.2571 1.1071 1.0500 上面的方程为不定方程. 4. 矩阵与标量间的四则运算 矩阵与标量的四则运算和数组与标量间的四则运算完全相同,即矩阵中的每个元素与标量进 行加,减,乘,除四则运算.需要说明的是,当进行除法运算时,标量只能做除数. 5. 矩阵的幂运算 矩阵的幂运算与标量的幂运算不同.用符号"^",它不是对矩阵的每个元素进行幂运算,而是与 矩阵的某种分解有关. >> b=[21 34 20; 78 20 21; 17 34 31]; >> c=b^2 c= 3433 2074 1754 3555 3766 2631 3536 2312 2015 6. 矩阵的指数,对数运算与开方运算 矩阵的指数运算,对数运算与开方运算与数组相应的运算是不同的.它并不是对矩阵中的单个 元素的运算,而是对整个矩阵的运算.这些运算函数如下: expm, expm1, expm2, expm3 —— 指数运算函数; logm —— 对数运算函数; sqrtm —— 开方运算函数. >> a=[1 3 4; 2 6 5; 3 2 4]; >> c=expm(a) c= 1.0e+004 * 0.4668 0.7694 0.9200
矩阵 B 的逆乘标量 s A.^n 数组 A 的每个元素的 n 次方 A^n A 为方阵时,矩阵 A 的 n 次方 A+B 数组对应元素的相加 A+B 矩阵相加 A-B 数组对应元素的相减 A-B 矩阵相减 A.*B 数组对应元素的相乘 A*B 内维相同矩阵的乘积 A./B A 的元素被 B 的对应元素除 A/B A 右除 B B.\A 一定与上相同 B\A A 左除 B(一般与右除不同) exp(A) 以 e 为底,分别以 A 的元素为指数,求幂 expm(A) A 的矩阵指数函数 log(A)
matlab实验三

1 + 2i 2 1 2 A= , B = 3 4 i 1
例3-9
求:A‘,A.',B’,B.’
19
矩阵函数
1、矩阵的共轭 MATLAB中求矩阵的共轭矩阵的函数是conj,其调用 格式为: B=conj(A) 求矩阵A的共轭矩阵B,复数矩阵的共轭与 复数的共轭类似,复数矩阵的共轭矩阵与复数矩阵的 实部相同,虚部相反。
5
方法二: 通过M文件创建矩阵
当矩阵的规模较大时,直接输入法就力不从心, 出现差错也不容易修改。因此可以使用M文件生成 矩阵。 方法:建立一个M文件,其内容是生成矩阵的命令, 在MATLAB的命令窗口中输入此文件名,即将矩阵 调入工作空间(写入内存)。
6
方法二: 通过M文件创建矩阵
例3-2 用建立M文件的方式生成矩阵 (1) 建立M文件mydata.m内容如下
注意: 注意:在A.\B的结果中,“Inf”表示无穷大,在MATLAB中,被零 除或浮点溢出都不按错误处理,只是给出警告信息,同时用“Inf” 标记。
16
4、 矩阵的幂运算:^ A^B A的B次方。 (1)A和B都是标量时,表示标量A的B次幂。 (2)A为矩阵,B为标量时要求A必须是方阵。
(3)当A为标量,B为矩阵时,要求B为方阵。
10
矩阵的算术运算
例3-4
1 2 3 A = 2 3 4 , 3 4 5 3 2 4 B = 2 5 3 2 3 1
求A+B,A-2
例3-5 两个矩阵如下所示,维数不同,求两者相 减的差。
MATLAB基础教程 第2章 数组、矩阵及其运算

写出MATLAB表达式。 解:根据MATLAB的书写规则,以上MATLAB表达式为: (1)y=1/(a*log(1-x-1)+C1) (2)f=2*log(t)*exp(t)*sqrt(pi) (3)z=sin(abs(x)+abs(y))/sqrt(cos(abs(x+y))) (4)F=z/(z-exp(T*log(8)))
命令:X(3:-1:1)
命令:X(find(X>0.5)) 命令:X([1 2 3 4 4 3 2 1])
第二章 数组、矩阵及其运算
2.1 数组(矩阵)的创建和寻访
2. 二维数组的创建和寻访
例2-3 综合练习。将教材P.31~P.44的实例按顺序在MATLAB的 command窗口中练习一遍,观察并体会其输出结果。 (注意变量的大小写要和教材上的严格一致。)
A./B
B.\A
A的元素被B的对应元素相除
(与上相同)
第二章 数组、矩阵及其运算
2.3 数组、矩阵的其他运算
1. 乘方开方运算
数组的乘方运算与power函数 格式:c=a.^k或c=power(a,k) 例如: >> g=[1 2 3;4 5 6] >>g.^2 矩阵的乘方运算与mpower函数 格式:C=A^P或C=mpower(A,P) 注意:A必须为方阵
第二章 数组、矩阵及其运算
2.2 数组、矩阵的运算
3. 矩阵的加法、减法
运算规则是:若A和B矩阵的维数相同,则可以执行矩阵的加减运算, A和B矩阵的相应元素相加减。如果维数不相同,则MATLAB将给出
出错信息。
第二章 数组、矩阵及其运算
2.2 数组、矩阵的运算
3. 矩阵的乘法
MATLAB教学 最新第二章 矩阵与数组2-4

把D的逆阵右乘以B,记作/D,称之为右除.
2.5.3 基本数组运算 1,数组转置 数组转置的操作符是在矩阵转置操作符前加符号".".(实数情 况下等价) 例:数组转置操作
2,数组幂 数组幂运算符 (单个符号自身运算)就是在矩阵运算符前加上符 号".".
3.数组乘法
2.5.4 基本数学函数 在MATLAB中部分函数可以用来进行基本的 数学运算,有三角函数,指数运算函数,复数 运算函数等. 注意:这些函数的参数可以是矩阵,向量或者 多维数组,函数在处理参数时,都是按照数组 运算运算的规则来进行的. 函数数目较多,不一一列出,后面用到时再 作说明. 2.5.5 矩阵(数组)操作函数
例2-5 使用logspace函数创建向量.
上面创建的都是行向量,即创建的都 是一行n列的二维数组.如果需要创建 列向量,即n行一列的数组,则需要使 用分号作为元素与元素之间的间隔或 者直接使用转置运算符" ' ".
2.3 创建矩阵 在编程语言中,矩阵和二维数组一般指的是同一 个概念,在M语言中,矩阵的元素可以为任意的 MATLAB数据类型的数值或者对象.创建矩阵的方 法也有多种,不仅可以直接输入元素,还可以使用 MATLAB MATLAB的数组编辑器编辑矩阵的元素. 2.3.1直接输入法 直接输入矩阵元素创建矩阵的方法适合创建元素较 少的矩阵. 例2-7 用直接输入矩阵元素的方法创建矩阵.
length获取向量长度若输入参数为矩阵或多维数组则返回各个维尺寸的最大值ndims获取矩阵或多维数组的维数numel获取矩阵或数组的元素个数disp显示矩阵或者字符串的内容cat合并不同的矩阵或者数组reshape保持矩阵元素的个数不变修改矩阵的行数和列数repmat复制矩阵元素并扩展矩阵fliplr交换矩阵左右对称位置上的元素flipud交换矩阵上下对称位置上的元素flipdim按照指定的方向翻转交换矩阵元素find获取矩阵或数组中非零元素的索引55例
数组平方和矩阵平方matlab

数组平方和矩阵平方matlab数组平方和矩阵平方是数学中常见的概念,也是在MATLAB中经常使用的操作。
在本文中,我们将介绍数组平方和和矩阵平方的概念,并且展示如何在MATLAB中进行这些操作。
让我们来看看数组平方和。
数组平方和是指将一个数组中的每个元素平方后相加的结果。
在MATLAB中,可以使用sum函数和.^运算符来计算数组平方和。
例如,如果我们有一个数组a=[1 2 3 4],那么它的平方和可以通过以下代码计算得出:sum(a.^2)这将返回一个值30,因为1^2+2^2+3^2+4^2=30。
接下来,让我们来看看矩阵平方。
矩阵平方是指将一个矩阵乘以它自己的转置矩阵的结果。
在MATLAB中,可以使用*运算符和'运算符来计算矩阵平方。
例如,如果我们有一个矩阵A=[1 2; 3 4],那么它的平方可以通过以下代码计算得出:A*A'这将返回一个2x2的矩阵,其值为:5 1111 25这是因为A*A'的结果是:1*1+2*2 1*3+2*43*1+4*2 3*3+4*4即:5 1111 25在MATLAB中,我们还可以使用power函数来计算矩阵的幂。
例如,如果我们想计算矩阵A的3次幂,可以使用以下代码:power(A,3)这将返回一个2x2的矩阵,其值为:1 827 64这是因为A的3次幂的结果是:1^3 2^33^3 4^3即:1 827 64数组平方和和矩阵平方是数学中常见的概念,在MATLAB中也经常使用。
我们可以使用sum函数和.^运算符来计算数组平方和,使用*运算符和'运算符来计算矩阵平方,以及使用power函数来计算矩阵的幂。
这些操作在MATLAB中非常简单,可以帮助我们更好地理解和处理数学问题。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数组和矩阵的关系
摘要:数组和矩阵式MATLAB中基本的数据存在形式。
一方面,数组是数据结构中的概念,有利于计算机实现层次上的计算;另一方面,矩阵是线性代数中的概念,有利于数学层次上的计算。
关键词:数组,矩阵,MATLAB
我们可以确定数组与矩阵之间的关系:(1)一维数组可以表示行向量或列向量;(2)二维数组可以表示为矩阵。
所以,矩阵运算可以看作是基于数组实现的高级运算。
所谓数组,就是相同数据类型的元素按一定顺序排列的集合,即把有限个类型相同的变量用一个名字命名,用编号区分每个元素的变量的集合,这个名字称为数组名,编号称为下标。
组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。
我们必须清楚,数组是用于程序设计的数据结构中的概念,并不是数学上的概念,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来的一种形式。
为了实现某种数学运算,可以使用数组来描述某种类型的变量。
简而言之,数组的运算是对所有元素进行相同运算。
一,数组与矩阵的创建
直接输入法是创建数组最简单的方法。
而且此方法可以自由指定元素的数值。
采用基本规则是:(1)所有元素必须用方括号“[ ]”括起来;(2)元素之间必须用逗号“,”或空格“”分割;(3)每个元素可以用MATLAB表达式表示,既可以是实数,也可以是复数。
通常,很多数组依赖数据最大值和最小值来产生数组的元素。
区间限定法可以代替直接输入法中由用户计算元算的过程,依据指定数据的最大值last和最小值first 自动生成数组的每个元素。
与一维数组相比,二维数组增加了一个维度,所以创建方法有所不同。
直接输入法的使用增加了一个新规则:在方括号“[ ]”内的行与行之间必须用分号“;”分隔。
区间限定法也可以直接用于二维数组的创建。
与数组的创建相似,矩阵的创建可以采用直接输入法。
矩阵创建的基本规则是(1)所有元素必须用方括号“[ ]”括起来;(2)在[ ]内矩阵的行与行之间必须用分号“;”分隔;(3)元素之间必须用逗号“,”分隔;(4)每个元素可以用MATLAB表达式表示,既可以是实数,也可以是复数。
二,数组与矩阵的访问
对于数组的访问,需要实现对数组元素的浏览和修改。
方法一,可以通过界面的可视化操作直接编辑数组的某个元素,即通过在工作空间中找到定义数组变量名,用鼠标双击变量名后,进入“Array Editor”操作界面,用鼠标直接单击或者用键盘方向键找到所要修改的元素进行修改即可,
方法二,对于数组的访问,可以用MATLAB命令来访问数组的某个元素,这对于应用MATLAB进行高级程序设计是非常必要的。
为了访问一维数组元素,采用“数组名(序号)”方式来读取数组元素,采用“数组名(序号) = 数据”方式来修改数组元素。
为了访问二维数组元素,采用“数组名(序号1,序号2)”方式来读取数组元素,采用“数组名(序号1,序号2)= 数据”方式来修改数组元素。
可以利用与数组访问相同的方法实现对矩阵的访问,或者通过MATLAB工作空间直接编辑矩阵的某个元素,还可以采用“矩阵名(序号)”的方式访问矩阵元素。
三,数组与矩阵的运算
①数组与矩阵的加减
数组加运算符为“+”,减运算符为“—”,具体运算形式为:a+b或者a—b
运算法则为:数组加减运算是两个数组的对应元素的相加减,并且要求两个数组每个维度必须拥有相同的元素个数。
矩阵加运算符为“+”,减运算符为“—”,具体运算形式如下:a+b或者a-b
运算法则为:相加减的两矩阵必须拥有相同的行和列;两矩阵对应元素进行相加减;允许参与运算的两矩阵之一为标量,且标量与矩阵的所有元素进行相加减操作。
矩阵的加减运算结果与数组加减运算结果相同。
②数组与矩阵的乘法
数组乘运算符为“*”,与一般的乘法运算符相比,它增加了一个标点符号“.”。
由于数组运算是元素对元素的算术运算,运算符中的“.”可以理解为元素,所以,通常将数组称为“点乘”。
具体运算形式如下:
a.*b
运算法则为:数组乘法运算是两个数组的对应元素相乘,要求两个数组每个维度必须拥有相同的元素个数。
应注意“a.*b”与“a*b”的运算结果并不相同。
矩阵乘运算符为“*”,与一般的乘法运算符相同。
具体运算形式如下:
a * b
运算为:矩阵乘法运算是两个矩阵对应行列的元素相乘;a矩阵的列数必须等于b 矩阵的行数;标量可与任何矩阵相乘。
③数组与矩阵的除法,
与一般的除法运算有所不同,数组除运算分别为右除和左除,运算符分别表示为“./”和“.\”。
与数组乘法相类似,数组除法运算符也增加了一个点符号,所以,通常将数组除运算符称为“点除”。
具体运算形式如下:
“a./b”表示a的元素被b的对应元素除;
“a.\b”表示b的元素被a的对应元素除。
在线性代数中并不存在矩阵的除法运算。
矩阵除法是MATLAB在矩阵求逆的基础上扩展而来的。
与一般的除法运算有所不同,矩阵除运算符分为左除和右除,运算符号分别表示为“\”和“/”。
根据线性代数的知识,可以知道矩阵A可逆的条件为:(1)A是方阵;(2)A的各列线性无关;(3)行列式|A|不等于0。
MATLAB的矩阵除法与逆矩阵紧密相关,如果数学上逆矩阵并不存在,那么MATLAB的矩阵除法会得到一个什么结果呢?事实上,MATLAB的计算功能之强大就在于扩展了数学上的概念,提供一个可以参考的计算结果。
当数学上的逆矩阵并不存在时,MATLAB会提供一个伪逆,即用函数pinv来参与运算。
与数组运算除法所不同,即使除数和被除数的矩阵相同,矩阵左除和右除的计算结果也不一定相同。
一般情况下,a\b不等于b\a。
④数组与矩阵的乘方
数组乘方运算符为“^”,表示数组元素对元素的幂运算。
通常将数组乘方运算称为“点幂”。
具体运算形式如下:
a.^b
运算法则为:数组乘方运算是两个数组的对应元素进行幂运算,要求两个数组每个维度必须拥有相同的元素个数。
矩阵乘方运算符号为“^”,a的p次幂具体运算形式如下:
其中,a和p可以是矩阵或者标量,但不能同时是矩阵。
由以上的运算可知,MATLAB可以进行幂指数为浮点数的运算,计算功能十分强大,而这些复杂计算是如何进行呢?
矩阵乘方的等价运算说明如下。
(1)当a为方阵,p为标量时,分两种情况:
①当p是大于1的正整数,则a的p次幂即为a自乘p次;当p是负整数时,则a的p次幂为a的逆自乘p次。
②当p是不为整数的标量时,乘方的等价运算为a^p=v*D.^p/v。
其中,D为矩阵a的特征值矩阵,v为对应的特征矢量阵。
可以使用eig函数求出矩阵a的D和v,即[v,D]=eig(a)。
(2)当p为方阵、a为标量时,a^p=v*a^D/v,其中[v,D]=eig(p)。
四,小结
总的来说,数组中的元素可以是字符等,而矩阵中的只能是数这是二者最直观的区别。
因为矩阵是一个数学概念(线性代数里的),数组是个计算机上的概念。
因为计算机上(准确的说是信息科学中)常用到线性代数的知识,就引用了矩阵的概念。
一维数组相当于向量,二维数组相当于矩阵.所以矩阵是数组的子集数组运算是指数组对应元素之间的运算,也称点运算.矩阵的乘法、乘方和除法有特殊的数学含义,并不是数组对应元素的运算,所以数组乘法、乘方和除法的运算符前特别加了一个点。
矩阵是一个二维数组,所以矩阵的加、减、数乘等运算与数组运算是一致的。
但有两点要注意:(1)对于乘法、乘方和除法等三种运算,矩阵运算与数组运算的运算符及含义都不同:矩阵运算按线性变换定义,使用通常符号;数组运算按对应元素运算定义,使用点运算符;
(2)数与矩阵加减、矩阵除法在数学是没有意义的,在MATLAB中为简便起见,定义了这两类运算。
参考文献:
[1]尚涛.MATLAB基础及其应用教程[M].北京:电子工业出版社,2014:33-45.。