一、矩阵元素运算
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为方阵时,可进行矩阵的幂运算。其运算符号为‘^’
Python
>> A = magic(2)
A =
1 3
4 2
>> A^2
ans =
13 9
12 16
1
2
3
4
5
6
7
8
9
10
11
12
13
>>A=magic(2)
A=
13
42
>>A^2
ans=
139
1216
其中,A^2 = A*A
5.矩阵元素的查找
find()函数被用来查找矩阵中的信息,其返回值是要查找值的下标。(注意MATLAB中矩阵元素的下标排列定义方式)
Python
>> A = magic(3)
A =
8 1 6
3 5 7
4 9 2
>> B = find(A > 3)
B =
1
3
5
6
7
8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
>>A=magic(3)
A=
816
357
492
>>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):给定允许误差计算矩阵的秩
Python
>> A = magic(3);
>> r = rank(A)
r =
3
1
2
3
4
5
6
>>A=magic(3);
>>r=rank(A)
r=
3
矩阵的行列式(det):
Python
>> A = [1 2 3;4 5 6;7 8 9];
>> r_1 = det(A);
>> disp(['A的行列式的值 = ',num2str(r_1)])
A的行列式的值 = -9.5162e-16
1
2
3
4
>>A=[123;456;789];
>>r_1=det(A);
>>disp(['A的行列式的值 = ',num2str(r_1)])
A的行列式的值=-9.5162e-16
矩阵的迹(trace):
矩阵的迹定义为矩阵的对角元素之和
Python
>> A = [1 2 3;4 5 6;7 8 9];
>> t = trace(A);
>> disp(['A的迹 = ',num2str(t)])
A的迹 = 15
1
2
3
4
>>A=[123;456;789];
>>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具有相同的秩
Python
>> 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
1
2
3
4
5
6
7
8
>>A=[123;456;789];
>>Q=orth(A)
Q=
-0.21480.8872
-0.52060.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的秩
Python
>> R = rref(A)
R =
1 0 -1
0 1 2
0 0 0
1
2
3
4
5
6
7
>>R=rref(A)
R=
10-1
012
000
矩阵空间之间的夹角(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)
Python
>> 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
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=
111
123
136
>>R=chol(A)
R=
111
012
001
>>R'*R
ans=
111
123
136
一般方程的高斯消去法分解
高斯消去法分解又称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()可以把实数形式的舒尔矩阵转换成复数形成的舒尔矩阵。
赞赏作者
微信赞赏
支付宝赞赏
喜欢 (3)or分享 (0)