一、矩阵元素运算
1.矩阵的加减运算
前提是参与运算的两个或多个矩阵均为m*n矩阵;或者其中一个或多个矩阵为标量
- C = A±B:C(m,n) = A(m,n) + B(m,n)
- C = A±x:C(m,n) = A(m,n) + x
矩阵运算满足加法法则,交换律、结合律
2.矩阵的乘法运算
数与矩阵的乘法:
由于MATLAB中单个数据都是以标量的形式存在,因此数与矩阵的乘法也可以从称为标量与矩阵的乘法
- C = x*A:C(m,n) = x*A(m,n)、
- l*A = A
- x(A+B) = xA+xB
- (x+y)A = xA+yA
- (xy)A = x(yA) = y(xA)
矩阵与矩阵的乘法:
两个矩阵的乘法必须满足被乘矩阵的列数与乘矩阵的行数相等,即C’m,n’ = A’m,k’ * B’k,n’,这满足我们所选的线性代数的要求。
矩阵之间的乘法不满足交换律,即AB ≠ BA
- (A*B)*C = A*(B*C)
- A*(B+C) = A*B + A*C
- (B+C)*A = B*A + C*A
- E*A = A*E = A %E为单位阵
3.矩阵的除法运算
矩阵的除法是乘法的逆运算,在MATLAB中共分为左除‘\’与右除‘/’两种。
- A\B表示A的逆乘以B,要求A与B的行数相等
- A/B表示A乘以B的逆,要求A与B的列数相等
- 除非A与B等价,否则A\B ≠ A/B
4.矩阵的幂运算
当矩阵A为方阵时,可进行矩阵的幂运算。其运算符号为‘^’
1 2 3 4 5 6 7 8 9 10 11 12 13 |
>> A = magic(2) A = 1 3 4 2 >> A^2 ans = 13 9 12 16 |
其中,A^2 = A*A
5.矩阵元素的查找
find()函数被用来查找矩阵中的信息,其返回值是要查找值的下标。(注意MATLAB中矩阵元素的下标排列定义方式)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
>> A = magic(3) A = 8 1 6 3 5 7 4 9 2 >> B = find(A > 3) B = 1 3 5 6 7 8 |
6.矩阵元素的排序
sort()函数的作用设计按照升序排列,排列后的矩阵与元矩阵的维数相同
- B = sort(A):对矩阵A进行升序排列,A可以是矩阵或向量
- B = sort(A,dim):对A进行升序排列,并将结果返回到给定的维数dim上按照升序排列。 dim = 1时,按照列升序排序;dim = 2时,按照行进行排序
- B = sort(…,mode):对矩阵A进行排序,mode可指定排序方式。 ascend:指定按升序排列; descend:指定按降序排列
7.矩阵的求和
sum()函数与cumsum()函数的作用都是对矩阵的元素求和,不同的是cumsum函数返回值是矩阵
- B = sum(A):对矩阵A的元素求和,返回由矩阵A各列元素的和所组成的向量
- B = sum(A,dim):返回矩阵A在给定维度dim上的元素和。 dim = 1时,计算各列元素的和;dim = 2时,计算各行元素的和
- B = cumsum(A)
- B = cumsum(A,dim)
8.矩阵元素的求积
prod()与cumprod()的作用是对矩阵的元素求积。
- B = prod(A):对矩阵A的元素求积,返回由矩阵A各列元素的积所组成的向量
- B = prod(A,dim):返回矩阵A在给定维度dim上的元素积。 dim = 1时,计算各列元素的积;dim = 2时,计算各行元素的积
- B = cumprod(A)
- B = cumprod(A,dim)
9.矩阵元素的差分
diff()函数的作用是计算矩阵的差分
- Y = diff(X):计算矩阵X各列元素的差分
- Y = diff(X,n):计算矩阵X各列元素的n阶差分
- Y = diff(X,n,dim):计算矩阵X在给定维度dim上的n阶差分。 dim = 1时,计算各列元素的差分;dim = 2时,计算各行元素的差分
二、矩阵运算
1.矩阵分析
求向量范数(norm):
- N = norm(x,p):对任意大于1的p值,返回向量x的p阶范数
- N = norm(x):返回向量的2阶范数,相当于N = norm(x,2)
- N = norm(x,inf):返回向量的正无穷阶范数
- N = norm(x,-inf):返回向量的负无穷阶范数
求矩阵范数(norm):
- N = norm(A):计算矩阵的2阶范数,也就是最大奇异值
- N = norm(A,p):根据参数p的值不同,求不同阶数的范数值
当矩阵维度比较大时,会导致计算矩阵范数的时间比较长,并且当一个近似的范数值满足要求时,可以考虑用normest()来估计2阶范数值
- N = normest(S):估计矩阵S的二阶范数值
- N = normest(S,tol):使用tol作为允许的相对误差
矩阵的秩(rank):
矩阵A中线性无关的列向量的个数成为矩阵的列秩,线性无关的行向量成为行秩。利用rank()函数计算矩阵的秩
- rank(A):用默认允许误差计算矩阵的秩
- rank(A,tol):给定允许误差计算矩阵的秩
1 2 3 4 5 6 |
>> A = magic(3); >> r = rank(A) r = 3 |
矩阵的行列式(det):
1 2 3 4 |
>> A = [1 2 3;4 5 6;7 8 9]; >> r_1 = det(A); >> disp(['A的行列式的值 = ',num2str(r_1)]) A的行列式的值 = -9.5162e-16 |
矩阵的迹(trace):
矩阵的迹定义为矩阵的对角元素之和
1 2 3 4 |
>> A = [1 2 3;4 5 6;7 8 9]; >> t = trace(A); >> disp(['A的迹 = ',num2str(t)]) A的迹 = 15 |
矩阵的化零矩阵(null):
- Z = null(A):返回矩阵A的一个化零矩阵。若化零矩阵不存在则返回空矩阵
- Z = null(A,’r’):返回有理数形式的化零矩阵
矩阵的正交空间(orth):
矩阵A的正交空间Q具有Q’*Q = I的性质,并且Q的列矢量构成的线性空间和矩阵A的列矢量构成的线性空间相同,且正交空间Q与矩阵A具有相同的秩
1 2 3 4 5 6 7 8 |
>> A = [1 2 3;4 5 6;7 8 9]; >> Q = orth(A) Q = -0.2148 0.8872 -0.5206 0.2496 -0.8263 -0.3879 |
矩阵的约化行阶梯形式(rref):
矩阵的约化行阶梯形式是高斯-约旦消去法解法性方程组的结果
- R = rref(A):返回矩阵A的约化行阶梯形式R
- [R,jb] = rref(A):返回矩阵A的约化行阶梯形式R,并返回1*r的向量jb,r为A的秩; A(:,jb)是矩阵A的列矢量构成的线性空间;R(1:r,jb)是r*r的单位矩阵
- [R,jb] = rref(A,tol):以tol为允许的相对误差计算矩阵A的秩
1 2 3 4 5 6 7 |
>> R = rref(A) R = 1 0 -1 0 1 2 0 0 0 |
矩阵空间之间的夹角(snbspace):
矩阵空间之间的夹角代表两个矩阵线性相关的程度。
若夹角小,则相关度高;反之相关度就低
- theta = subspace(A,B):返回矩阵A与B之间的夹角
2.矩阵分解
矩阵分解就是把一个矩阵分解成几个‘较简单’的矩阵连乘的形式
对称正定矩阵的Cholesky分解
Cholesky分解在MATLAB中用函数chol()实现
- R = chol(X):X为对称正定矩阵,R是上三角阵,使得X = R’ * R。若R不是正定矩阵,则返回错误信息
- [R,p] = chol(X):返回两个参数,且不会返回错误信息。 当X是正定矩阵时,返回的上三角函数R满足X = R’ * R,且p = 0; 当X是非正定矩阵时,返回值p是正整数,R是上三角矩阵,其阶数为p-1,且满足X(1 : p-1, 1 : p-1) = R’ * R
若线性方程组Ax = B,其中A可以做Cholesky分解,使得A = R’ * R,这样线性方程组就可以改写成R’ * R * x = B,再根据左除运算符‘\‘可以快速处理三角矩阵,因此可得出
x = R\(R’\B)
若A为n*n的方阵,则chol(A)的计算复杂程度是O(n^3);而使用左除运算的计算复杂程度只有O(n^2)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
>> A = pascal(3) A = 1 1 1 1 2 3 1 3 6 >> R = chol(A) R = 1 1 1 0 1 2 0 0 1 >> R'*R ans = 1 1 1 1 2 3 1 3 6 |
一般方程的高斯消去法分解
高斯消去法分解又称LU分解,他可以将任意一个方阵A分解成一个下三角矩阵L和一个上三角矩阵U的乘积,即A = L·U。
- [L,U] = lu(X);X为一个方阵,L为’心理‘的下三角阵,U为上三角阵,满足关系X = L·U
- [L,U,P] = lu(X):P为置换矩阵,满足关系P·X = L·U
- Y = lu(X):把上三角阵与下三角阵合并在矩阵Y中给出,即Y = L+U-I,置换矩阵P的信息丢失
若线性方程组Ax = b,若矩阵A可以做LU分解,使得A = L·U,则线性方程组可以改写成L·U·x = b,则可以解出
x = U\(L\b)
利用LU分解来计算行列式的值和矩阵的逆,其命令形式如下:
- det(A) = det(L) * det(U)
- inv(A) = inv(U) * inv(L)
矩形矩阵的正交分解
矩形矩阵的正交分解又称为QR分解。QR分解把一个m*n的矩阵A分解成一个正交矩阵Q和一个上三角矩阵R的乘积,即A = Q · R
- [Q,R] = qr(A):其中矩阵R与矩阵A具有相同大小的上三角矩阵,Q为正交矩阵,他们满足A = Q · R。该调用方式适用于满矩阵和稀疏矩阵
- [Q,R] = qr(A,0):为‘经济’方式的QR分解。设矩阵A是一个m×n的矩阵,若m>n,则只计算前n列元素,R为n×n的矩阵;若m≤n,则与[Q,R] = qr(A)效果一致。该调用方式适用于满矩阵和稀疏矩阵
- [Q,R,E] = qr(A):R是上三角矩阵,Q为正交矩阵,E为置换矩阵。满足A · E = Q · R,程序选择一个合适的矩阵E使得abs(diag(R))降序排列。该调用方式适合于满矩阵
- [Q,R,E] = qr(A,0):‘经济’方式的QR分解,其中E是一个置换矩阵。他们满足A(:,E) = Q · R。该调用方式适合于满矩阵
- R = qr(A,0):以‘经济’方式返回上三角矩阵R
- [C,R] = qr(A,B):矩阵B必须与矩阵A具有相同的行数,矩阵R是上三角矩阵,C = Q’ · B
舒尔分解
舒尔分解的定义式为
A = U · S · U’
其中A必须是方阵,U是一个酉矩阵,S是一个块对角化矩阵,有对角线上的1×1和2×2块组成。特征值可以由矩阵S的对角块给出,二矩阵U给出比特征向量更多的数值特征。此外,对缺陷矩阵也可以进行舒尔分解。MATLAB中用函数schur()来进行舒尔分解
[U,S] = schur(A):返回酉矩阵U和块对角矩阵S
- S = schur(A):仅返回块对角矩阵S
- schur(A,’real’):返回的实特征值放在对角线上,而把复特征值放在对角线上的2×2块中
- schur(A,’complex’):返回的矩阵S是上三角矩阵,并且如果矩阵A有复特征值,则矩阵S是复矩阵
另外,函数rsf2csf()可以把实数形式的舒尔矩阵转换成复数形成的舒尔矩阵。
转载请注明:燕骏博客 » MATLAB自学笔记(八):矩阵元素运算与矩阵运算
赞赏作者微信赞赏支付宝赞赏