Alex_McAvoy

想要成为渔夫的猎手

Matlab 矩阵进阶

【范数】

定义:$||x||_p=(\sum_{i=1}^n|x_i|^p)^{\frac{1}{p}}$,p 阶范数,记做 $L_p$

根据 x 是矩阵还是向量,分为向量范数、矩阵范数,其中矩阵范数是由向量范数推导过来的,含义相近

对于常用的向量范数有:

  • 当 p=0 时:$L_0=(\sqrt[0]{\sum_{i=1}^n|x_t|^0})=i|x_i\neq 0$,即向量中非 0 个数
  • 当 p=1 时:$L_1=\sum_i|x_i|$,即向量中所有元素的绝对值的和
  • 当 p=2 时:$L_2=\sqrt{\sum_i x_i^2}$,即向量的元素平方和
  • 当 $p=\infty$ 时:$L_\infty=max\{x_i\}$,即向量的元素最大值
  • 当 $p=-\infty$ 时:$L_{-\infty}=min\{x_i\}$,即向量的元素最小值

对于常用的矩阵范数有:

  • 当 p=1 时:$L_1$ 为矩阵中列元素的绝对值的和的最大值,等价于 max(sum(abs(a)))
  • 当 p=2 时:$L_2$ 为矩阵的最大奇异值
  • 当 $p=\infty$ 时:$L_\infty$ 为矩阵的转置的列元素绝对值和的最大值,等价于 max(sum(abs(a')))
  • 当 $p=-\infty$ 时:$L_{-\infty}$为转置矩阵与矩阵乘积取对角后的和的开方,等价于 sqrt(sum(a'*a))

在 matlab 中,利用 norm() 求范数:

  • norm(x,p):返回 x 的 p 阶范数,默认 p=2
1
2
>> norm([1:6],2)
ans = 9.5394

由于矩阵的二阶范数并不好计算,有时会花费过长的时间,当只需给一个近似范数值时,利用 normest() 来计算二阶范数

  • normest(x):计算矩阵 x 的二阶范数
  • normest(x,tol):计算矩阵 x 的二阶范数,相对误差为 tol
1
2
3
>> a=[1,2,3;3,4,5;7,8,9];
>> normest(a)
ans = 16.02158

【矩阵的秩】

行秩:矩阵中线性无关的行向量

列秩:矩阵中线性无关的列向量

在 matlab 中,利用 rank() 来求矩阵的秩

  • rank(A):以默认误差来计算 A 的秩,默认误差为:max(size(a))*eps(norm(a))
  • rank(A,tol):以 tol 指定相对误差来计算 A 的秩
1
2
3
>> a=magic(3);
>> rank(a)
ans = 3

【行列式】

在 matlab 中,利用 det(A) 来求矩阵的行列式

1
2
3
>> a=magic(5);
>> det(a)
ans = 507000

【矩阵的迹】

定义:矩阵对角元素和

在 matlab 中,利用 trace() 来计算矩阵的迹

1
2
3
>> a=magic(5);
>> trace(a)
ans = 65

【矩阵的化零矩阵】

定义:对于非满秩矩阵 A,若存在矩阵 B 使 AB=0,且 BB‘=I,则称矩阵 B 为矩阵 A 的化零矩阵

在 matlab 中,利用 null() 求矩阵的化零矩阵,若不存在返回空矩阵

1
2
3
4
5
6
7
8
9
10
>> a=magic(3);
>> null(a)
ans = 空矩阵: 3×0

>> a=[1,2,3;4,5,6;7,8,9];
>> null(a)
ans =
-0.4082
0.8165
-0.4082

【矩阵的正交空间】

定义:矩阵 A 的正交空间 Q,具有 Q’Q=I 的性质,且 Q 的列向量构成的线性空间与 A 的列向量构成的线性空间相同,同时,Q 与 A 具有相同的秩

在 matlab 中,利用 orth() 来求正交空间

1
2
3
4
5
6
>> a=[1,2,3;4,5,6;7,8,9];
>> orth(a)
ans =
-0.2148 0.8872
-0.5206 0.2496
-0.8263 -0.3879

【约化行阶梯形式】

在 matlab 中,利用 rref() 来将矩阵转为约化行阶梯形式

1
2
3
4
5
6
>> a=[1,2,3;4,5,6;7,8,9];
>> rref(a)
ans =
1 0 -1
0 1 2
0 0 0

【矩阵夹角】

在 matlab 中,利用 subspace() 来求矩阵空间的夹角

1
2
3
4
>> a=[1,2,3;4,5,6;7,8,9];
>> b=magic(3);
>> subspace(a,b)
ans = 6.8286e-16

【矩阵分解】

矩阵分解,是将一个复杂的矩阵分解为几个较简单的矩阵连乘的形式

矩阵分解,是将一个复杂的矩阵分解为几个较简单的矩阵连乘的形式

在 matlab 中,各种调用方式均相似,以对称正定矩阵 Cholesky 分解为例:

  • R=chol(A):返回对称正定矩阵 X 的上三角矩阵 R,使得 R’R=X
函数 作用
cholinc 稀疏矩阵的不完全 Cholesky 分解
lu 矩阵 LU 分解
luinc 稀疏矩阵的不完全 LU 分解
qr QR 分解
svd 奇异值分解
gsvd 一般奇异值分解
schur 舒尔分解
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
>> 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

【特征向量与特征值】

在 matlab 中,利用 eig() 来求矩阵的特征向量

  • d=eig(A):求 A 的特征值向量 d
  • [x,d]=eig(A):求满足 ax=xd 的矩阵 x、d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
>> a=magic(3);
>> eig(a)
ans =
15.0000
4.8990
-4.8990

>> [x,d]=eig(a)
x =
-0.5774 -0.8131 -0.3416
-0.5774 0.4714 -0.4714
-0.5774 0.3416 0.8131
d =
15.0000 0 0
0 4.8990 0
0 0 -4.8990

【稀疏矩阵】

由于稀疏矩阵的特性,其按列存储的方式过于占用存储空间,因此在 matlab 中,以 (行,列) 值 的方式对稀疏矩阵存储

  • sparse(A):生成稀疏矩阵 A,若 A 已经为一个稀疏矩阵,返回 A 本身
  • full(A):将稀疏矩阵 A 转为满矩阵
1
2
3
4
5
6
7
8
9
10
11
>> sparse([1,2,3;0,0,0;0,1,0])
ans =
(1,1) 1
(1,2) 2
(3,2) 1
(1,3) 3
>> full(ans)
ans =
1 2 3
0 0 0
0 1 0
感谢您对我的支持,让我继续努力分享有用的技术与知识点!