矩阵分析
- 行列式
- 逆
- MATLAB中可以通过函数inv求解矩阵的逆。
- 矩阵的逆在求解线性方程组时是重要的,对于一般的给定线性方程组A*X=b,其解就可以通过X=inv(A)*b求得。
- 需要注意的是,对于严重病态的矩阵或奇异矩阵,inv求解时会出现警告提示,因为这时候其逆矩阵本来就不存在,或者非常容易受扰动而使得求解不精确。
- 对于一般的长方形矩阵A,A*X=I和X*A=I中至少有一个没有解,因此长方形矩阵A没有逆矩阵。但MATLAB中可以用pinv函数求解长方形矩阵A的伪逆矩阵B=pinv(A),B一定满足B*A=I或A*B=I中的一个等式。
- 秩
- 矩阵的范数和条件数
- 矩阵条件数是用来刻画矩阵病态程度的关键表征量。矩阵的条件数越大,代表矩阵病态程度越严重。线性方程组A*X=b中,如果系数矩阵A严重病态,其精确求解将是很困难的。
- (1)1-范数norm(A,1)实际上返回矩阵A列向元素和的最大值max(sum(abs(A)))。
- (2)2-范数norm(A,2)返回矩阵A的最大奇异值max(svd(A))。
- (3)无穷范数norm(A,inf)返回矩阵A行向元素和的最大值max(sum(abs(A’)))
- norm(A)相当于norm(A,2),求解矩阵A的2-范数。
- MATLAB中求解矩阵条件数的函数是cond。
- 一个矩阵和它的逆矩阵一定具有相同的条件数。另外,对于秩为0或非常接近0的奇异矩阵,其条件数会非常大,即矩阵病态程度很严重。
- 矩阵的特征值、特征向量和特征多项式
- (1)d=eig(A)返回n*n矩阵A的n个特征值。
- (2)[V,D]=eig(A)返回以矩阵A的特征向量为列的矩阵V和以矩阵A的特征值为对角元素的矩阵D。
- poly(A)生成矩阵A的特征多项式,即det(λ*I-A)这一λ的n阶多项式。矩阵A的特征多项式的根,实际上就是矩阵A的特征值。
- 矩阵的标准正交基
- 这样的最少个数的一组基向量称为该空间的基,如果这些向量正好长度为1,彼此正交,则称为标准正交基。
- 在MATLAB中,可以通过orth函数产生矩阵A的线性空间的一组标准正交基,即若B=orth(A),则B的列向量组成了矩阵A的线性空间的一组标准正交基,于是B’*B=eye(rank(A))。
- 矩阵分解
- LU分解
- LU分解,是把矩阵A分解为两个矩阵的乘积,其中一个是下三角矩阵置换后的矩阵,另一个是上三角矩阵。MATLAB中通过函数lu可以实现矩阵的LU分解。
- (1)[L,U]=lu(A)把矩阵A分解为下三角矩阵的置换矩阵L和上三角矩阵U,满足A=L*U。
- (2)[L,U,P]=lu(A)的分解结果中L是一个下三角矩阵,U是一个上三角矩阵,P是一个置换矩阵,满足LU = PA。
- Cholesky分解
- 一个对称正定矩阵,可以分解为一个下三角矩阵和一个上三角矩阵的乘积,这种分解称为Cholesky分解。MATLAB中通过chol函数实现矩阵的Cholesky分解。
- R=chol(A)得到一个上三角矩阵,满足R’*R=A。
- 因为chol只能分解对称正定矩阵,因此使用chol之前最好通过eig命令检查矩阵A的所有特征值是否为正(即矩阵是否正定)。
- QR分解
- QR分解是把矩阵分解为一个正交矩阵和一个上三角矩阵的乘积。MATLAB中实现QR分解的命令是qr。
- [Q,R]=qr(A)把矩阵A分解为正交矩阵Q和上三角矩阵R,满足A=Q*R。
- QR分解不仅适用于分解方阵,也可以分解长方形矩阵。
- SVD分解(奇异值分解)
- 奇异值分解也是常用的矩阵分解之一。MATLAB中通过svd函数实现矩阵的奇异值分解。
- (1)s=svd[A]返回矩阵A的奇异值组成的列向量。
- (2)[U,S,V]=svd(A)将矩阵A分解为3个矩阵的乘积,即A=USV’:其中U和V是正交矩阵,S是一个对角矩阵,其对角元素为矩阵A奇异值的降序排列。
- Schur分解
- MATLAB中实现Schur分解的命令是schur。其语法格式为:
- 其中,U是一个正交矩阵,T是一个上三角矩阵,称为A的Schur矩阵,并且满足A=UTU’。
- 矩阵的对角元素操作
- MATLAB中支持的对矩阵对角元素的操作包括:提取对角元素,求矩阵对角元素的和(矩阵的迹),提取矩阵的上三角或下三角部分。
- (1)函数diag提取矩阵的对角元素为一个向量。
- (2)函数trace计算矩阵的迹。
- (3)函数tril提取矩阵的下三角部分。
- (4)函数triu提取矩阵的上三角部分。
- 矩阵分析函数总结
线性方程组
- 线性方程组的表示和种类
- (1)当方程个数等于未知数个数,即系数矩阵A是一个方阵而且满秩时,即rank(A)=m=n,此线性方程组具有唯一解,称为恰定方程组
- (2)当方程个数小于未知数个数,即m< n时,线性方程组有无穷多个可能的解,称为欠定方程组。
- (3)当有效方程个数(线性无关的方程个数)大于未知数个数时(一般m>n都对应这种情况),线性方程组肯定没有精确解,称为超定方程组。
- 线性方程组的MATLAB求解
- 高斯消元法
- 求解线性方程组可以通过高斯消元法,即将扩展矩阵[A b]通过行方向的线性运算变形为[D nb]形式,其中D和A尺寸相同且其最左上部分是一个单位矩阵。
- (1)对于恰定方程组,D是和A同尺寸的单位矩阵,此时方程组的解的每一个分量可以通过X(i)=nb(i)/D(i,i)计算得到。
- (2)对于欠定方程组,D的左上部是一个比A小的k*k的单位矩阵,这时候把i>k的X(i)置为0,i<=k的X(i)就可以通过X(i)=nb(i)/D(i,i)计算得到。
- (3)对于超定方程组,高斯消元后只能看出该方程组没有解。
- 矩阵除法求解
- 求解线性方程组最简单的办法是用矩阵的除法。AX=b的解可以由X=A\b得到,XA =b的解可以由X=b/A得到,注意,这里应用左除和右除对应的方程组形式的不同。
- 矩阵除法求解线性方程组,不会返回方程组类型的信息,即无论哪种类型的方程组,MATLAB矩阵除法都会返回一个计算结果。对于恰定方程组,这个结果就是其唯一解;对于欠定方程组,此结果是其一个特解;对于超定方程组,计算结果是方程组最小二乘意义上的解。
- 矩阵求逆求解
- 求解线性方程组也可以通过逆矩阵的方法。对于方程组A*X=b:
- (1)当A是方阵时,X=inv(A)*b。
- (2)当A不是方阵时,X=pinv(A)*b。
- 特殊矩阵
- 特殊矩阵生成函数
- 稀疏矩阵
- 在通常情况下,MATLAB中顺序存储普通矩阵的各个元素。但在有些应用领域,矩阵中零元素非常多,在庞大的矩阵中只有非常有限的非零元素,这时候如果还用顺序存储方式,会耗费很多不必要的内存空间,而且对于矩阵运算、处理也带来了不必要的复杂性。针对这种情况,MATLAB中可以采用稀疏矩阵提高存储、运算效率。
- MATLAB存储稀疏矩阵时,只存储矩阵中的非零元素及其位置索引。这对于大规模的零元素居多的数组存储是非常高效的。
- MATLAB通过3个数组来存储一个m行n列的稀疏矩阵的信息。
- 第一个数组是浮点类型,存储了稀疏矩阵中所有非零元素的值(例如k个)。
- 第二个数组是整型,存储了这k个非零元素的行索引。
- 第三个数组是整型,存储了原来的m行n列元素中每一列第一个非零元素在前两个数组中的位置,以及第n列最后一个非零元素在前两个数组中的位置。
- 稀疏矩阵的创建
- MATLAB中可以通过sparse函数把普通矩阵转换成稀疏矩阵,也可以通过full函数把稀疏矩阵转换为对应的普通矩阵。
- 稀疏矩阵函数
|
请发表评论