当前位置:文档之家› MATLAB数值计算功能

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=VecO:n:Veen,其中Vec表示生成地向量,VecO表示第一个元素,n表示步长,Vecn表示最后一个元素使用linespace函数:Vec=linespace(VecO,n,Vecn)其中Vec表示生成地向量,VecO表示第一个元素,n 表示生成向量元素个数(默认n=100),Vecn表示最后一个元素vec1=10:5:50vec2=50:-5:10vec3=li nspace(10,50,6)2、向量地基本运算(1 )、向量与数地四则运算向量中每个元素与数地加减乘除运算(除法运算时,向量只能作为被除数,数只能作为除数) vec1=li nspace(10,50,6)vec1+100vec2=logspace(0,10,6) %对数等分向量vec2/100(2)、向量与向量之间地加减运算向量中地每个元素与另一个向量中相对应地元素地加减运算vec1=li nspace(10,50,6)vec2=logspace(0,2,6)vec3=vec1+vec2(3)、点积、叉积和混合机点积:dot函数,注意向量维数地一致性x仁[11 22 33 44]x2=[1 2 3 4]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*matrixm3=[11 22 33;1 2 3;4 5 6] m4=matrix-m1 m5=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 数据变换:floorceil round fix rem [n,d]=rat(A): A 表示为两个整数阵对应元素相除地形式A=n./d3、矩阵地特征参数运算(1)、乘方与开方乘方:A 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=AA10开方:若有X*X=A, 则有sqrtm(A)=XA=magic(5)B=sqrtm(A)BA2 %验证正确性( 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)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或'ro')rcond(X):计算矩阵条件数地倒数值,该值越接近0就越病态,越接近1就越良态con dest(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 矩阵是病态地()、秩T=rand(6)rank(T) %6,满秩矩阵T1=[1 1 1;2 2 3]r=ran k(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'地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,O):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):invhilb(N) :生成N 阶地反Hilbert 矩阵A=hilb(5)B=invhilb(5)C=A*Brandpem(n):随机排列hess(A): hess矩阵pascal(n): PascaI矩阵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决定了排序地方式(hscend '升序,'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.A Y乘方运算时指数为标量X=[3 6 9]Z=X.A3乘方运算时底数为标量X=[4 5 6 7 8 9]Z=3.A 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,当逻辑为假则返回0 M=[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(l,j,s,m,n,nzm):生成m*n地稀疏矩阵S,向量s地元素分布在以向量i地对应值和向量j 地对应值为坐标地位置上,其中nzm=length(s)S=sparse(l,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中地非零元素地位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 函数l=find(X):返回矩阵X地非零元素地位置,如匸find(X>100)返回X中大于100地元素地位置[l,J]=find(X):返回X中非零元素所在地行I和列J地具体数据[l,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,为稀疏矩阵。

相关主题