满秩分解是怎么把矩阵分解成了两个满秩的矩阵
flyfish
英文名字 Full rank factorization、full-rank decomposition、rank factorization
前置知识
什么是主元
在做行初等变换(只允许"换行、倍乘行、行加行")的过程中, 把矩阵一步步变成"行阶梯形"(row echelon form),长这样:
第1列有第一个非零 → 这里是主元
↓
* * * * * *
0 0 * * * * ← 第3列出现第一个非零 → 这里是主元
0 0 0 0 * * ← 第5列出现第一个非零 → 这里是主元
0 0 0 0 0 0
规则是:
从左到右、从上到下扫描
每碰到本列第一次出现的非零元素 ,它就是这个列的 主元(pivot)
主元所在的位置叫 主元位置(pivot position)
主元所在的列叫 主元列(pivot column)
主元个数 = 矩阵的秩!
4×5 的矩阵 A
A=12303134252572901122 A = \begin{bmatrix} \color{red}1 & 2 & 3 & 0 & 3 \\ 1 & 3 & 4 & 2 & 5 \\ 2 & 5 & 7 & 2 & 9 \\ 0 & 1 & 1 & 2 & 2 \end{bmatrix} A= 11202351347102223592
开始高斯消元(我把每一步的主元用红颜色标出来)
第1步:第1列消成下面都是0,只有第1行第1列是1 → 这是第一个主元
12303011220112601122 \begin{bmatrix} \color{red}{1} & 2 & 3 & 0 & 3 \\ 0 & 1 & 1 & 2 & 2 \\ 0 & 1 & 1 & 2 & 6 \\ 0 & 1 & 1 & 2 & 2 \end{bmatrix} 10002111311102223262
第2步:第2列从第2行开始看,第2行第2列是1 → 这是第二个主元
12303011220000400000 \begin{bmatrix} \color{red}{1} & 2 & 3 & 0 & 3 \\ 0 & \color{red}{1} & 1 & 2 & 2 \\ 0 & 0 & 0 & 0 & 4 \\ 0 & 0 & 0 & 0 & 0 \end{bmatrix} 10002100310002003240
第3步:第3、4列从第3行开始看全是0,跳过去
第5列第3行出现4(非零)→ 这是第三个主元
101−40011200000100000 \begin{bmatrix} \color{red}{1} & 0 & 1 & -4 & 0 \\ 0 & \color{red}{1} & 1 & 2 & 0 \\ 0 & 0 & 0 & 0 & \color{red}{1} \\ 0 & 0 & 0 & 0 & 0 \end{bmatrix} 100001001100−42000010
最终主元位置是:(1,1)、(2,2)、(3,5) → 3个主元 → 秩=3
主元列就是:第1列、第2列、第5列
什么是满秩分解
设 AAA 是一个 m×nm \times nm×n 矩阵,rank(A)=rrank(A) = rrank(A)=r(r≤min(m,n)r \leq \min(m,n)r≤min(m,n))。
如果能够找到一个 m×rm \times rm×r 矩阵 FFF 和一个 r×nr \times nr×n 矩阵 GGG,使得
A=FG A = F G A=FG
并且 FFF 是列满秩的rank(F)=rrank(F)=rrank(F)=r,GGG 是行满秩的rank(G)=rrank(G)=rrank(G)=r,
那么称 A=FGA = F GA=FG 为 A 的一个满秩分解(full-rank factorization)。
举例子 秩=1 的矩阵的满秩分解
原始矩阵(3×4,秩 = 1)
A=1234246836912 A = \begin{bmatrix} 1 & 2 & 3 & 4 \\ 2 & 4 & 6 & 8 \\ 3 & 6 & 9 & 12 \end{bmatrix} A= 1232463694812
第一部分:完整高斯---若尔当消元(最简行阶梯形)Gauss-Jordan Elimination 高斯 - 若尔当消元法是线性代数中高斯消元法的一种扩展方法
第 0 步(原始)
R1: 1 2 3 4
R2: 2 4 6 8
R3: 3 6 9 12
第 1 步:用 R1 消第 1 列
R2 ← R2 − 2×R1
2−2×1=0, 4−2×2=0, 6−2×3=0, 8−2×4=0 → 整行变成 0 0 0 0
R3 ← R3 − 3×R1
3−3×1=0, 6−3×2=0, 9−3×3=0, 12−3×4=0 → 整行也变成 0 0 0 0
得到:
123400000000 \begin{bmatrix} 1 & 2 & 3 & 4 \\ 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 \end{bmatrix} 100200300400
第 2 步:已经是最简行阶梯形了!
主元只有一个:第 1 行第 1 列的 1
主元位置:(1,1)
主元个数 = 1
主元列 = 第 1 列
→ 秩 r = 1
第二部分:构造满秩分解
步骤 1:把主元列从原始矩阵里完整抄下来做 F
主元列只有第 1 列,所以直接把原始矩阵的第 1 列原封不动地抄下来:
F=123(这是 3×1 矩阵,列满秩,秩=1) F = \begin{bmatrix} \color{red}{1} \\ \color{red}{2} \\ \color{red}{3} \end{bmatrix} \qquad \text{(这是 3×1 矩阵,列满秩,秩=1)} F= 123 (这是 3×1 矩阵,列满秩,秩=1)
原矩阵 A 是:
A=第1行→1234第2行→2468第3行→36912 A = \begin{bmatrix} \text{第1行} & \to & 1 & 2 & 3 & 4 \\ \text{第2行} & \to & 2 & 4 & 6 & 8 \\ \text{第3行} & \to & 3 & 6 & 9 & 12 \end{bmatrix} A= 第1行第2行第3行→→→1232463694812
也就是:
第1列是:1(第1行)、2(第2行)、3(第3行)→ 拼起来就是 123\begin{bmatrix} 1 \\ 2 \\ 3 \end{bmatrix} 123
第2列是:2、4、6 → 246\begin{bmatrix} 2 \\ 4 \\ 6 \end{bmatrix} 246
第3列是:3、6、9 → 369\begin{bmatrix} 3 \\ 6 \\ 9 \end{bmatrix} 369
第4列是:4、8、12 → 4812\begin{bmatrix} 4 \\ 8 \\ 12 \end{bmatrix} 4812
做高斯消元后发现:只有第1列有主元(其他列都能被第1列消掉),所以主元列就是第1列。
于是:
F 直接从原矩阵 A 中把第1列完整地抄下来:
F=A 的第1列=↑12←这是第2行的那个数字3↓=123 F = \text{A 的第1列} = \begin{bmatrix} \uparrow & & & \\ 1 & & & \\ 2 & \leftarrow & \text{这是第2行的那个数字} \\ 3 & & & \\ \downarrow & & & \end{bmatrix} = \begin{bmatrix} 1 \\ 2 \\ 3 \end{bmatrix} F=A 的第1列= ↑123↓←这是第2行的那个数字 = 123
步骤 2:把 A 的每一列都用 F 表示,求系数
设 F 的这一列叫 f = 1, 2, 3ᵀ
现在一列一列算:
第 1 列 1,2,3ᵀ = 1 × f → 系数是 1
第 2 列 2,4,6ᵀ = 2 × f → 系数是 2
第 3 列 3,6,9ᵀ = 3 × f → 系数是 3
第 4 列 4,8,12ᵀ = 4 × f → 系数是 4
把这 4 个系数横着排成一行,得到 G:
G=1234(这是 1×4 矩阵,行满秩,秩=1) G = \begin{bmatrix} 1 & 2 & 3 & 4 \end{bmatrix} \qquad \text{(这是 1×4 矩阵,行满秩,秩=1)} G=1234(这是 1×4 矩阵,行满秩,秩=1)
结果
1234246836912\]=\[123\]⏟F (3×1) \[1234\]⏟G (1×4) { \\begin{bmatrix} 1 \& 2 \& 3 \& 4 \\\\ 2 \& 4 \& 6 \& 8 \\\\ 3 \& 6 \& 9 \& 12 \\end{bmatrix} =\\underbrace{ \\begin{bmatrix} 1 \\\\ 2 \\\\ 3 \\end{bmatrix} }_{F\\;(3\\times1)} \\; \\underbrace{ \\begin{bmatrix} 1 \& 2 \& 3 \& 4 \\end{bmatrix} }_{G\\;(1\\times4)} } 1232463694812 =F(3×1) 123 G(1×4) \[1234
举例子 秩=2 的矩阵的满秩分解
A=13152641200113×4 A = \begin{bmatrix} 1 & 3 & 1 & 5 \\ 2 & 6 & 4 & 12 \\ 0 & 0 & 1 & 1 \end{bmatrix} \qquad 3 \times 4 A= 1203601415121 3×4
高斯---若尔当消元(最简行阶梯形)
第一阶段:向前消元(得到行阶梯形)
第1步:处理第1列(让第1列下面变成0)
当前矩阵:
1315264120011 \begin{bmatrix} 1 & 3 & 1 & 5 \\ 2 & 6 & 4 & 12 \\ 0 & 0 & 1 & 1 \end{bmatrix} 1203601415121
用第1行消第2行:第2行 ← 第2行 − 2×第1行
2 − 2×1 = 0
6 − 2×3 = 0
4 − 2×1 = 2
12 − 2×5 = 2
得到:
131500220011 \begin{bmatrix} 1 & 3 & 1 & 5 \\ 0 & 0 & 2 & 2 \\ 0 & 0 & 1 & 1 \end{bmatrix} 100300121521
第1列已经只有第1行非零,第1个主元就是 (1,1) 位置的 1(已确定)
第2步:处理第2列(从第2行开始看)
现在看第2列从第2行开始往下:全是 0,没有非零数字可以做主元 → 第2列没有主元,跳过!
第3步:处理第3列(从第2行开始看)
第3列从第2行开始看:
第2行是 2,第3行是 1,都非零。
我们把第2行和第3行交换,让数值大的放上面(也可以不换,但我们换一下更整齐):
交换第2行和第3行:
131500110022 \begin{bmatrix} 1 & 3 & 1 & 5 \\ 0 & 0 & \color{red}{1} & 1 \\ 0 & 0 & 2 & 2 \end{bmatrix} 100300112512
现在第2行第3列是 1 → 这就是第2个主元!位置 (2,3)
用第2行消第3行:第3行 ← 第3行 − 2×第2行
2 − 2×1 = 0
2 − 2×1 = 0
得到行阶梯形:
131500110000 \begin{bmatrix} 1 & 3 & 1 & 5 \\ 0 & 0 & \color{red}{1} & 1 \\ 0 & 0 & 0 & 0 \end{bmatrix} 100300110510
到这里已经有两个主元了:
第1个主元:位置 (1,1) → 主元列是第1列
第2个主元:位置 (2,3) → 主元列是第3列
所以 rank(A) = 2 ,主元列是:第1列 和 第3列
第二阶段:向后消元(得到最简行阶梯形,更清楚)
用第2行把第1行上面的主元消干净:
第1行 ← 第1行 − 1×第2行
第1行第3列:1 − 1×1 = 0
第1行第4列:5 − 1×1 = 4
得到最简行阶梯形(reduced row echelon form):
130400110000 \begin{bmatrix} 1 & 3 & 0 & 4 \\ 0 & 0 & 1 & 1 \\ 0 & 0 & 0 & 0 \end{bmatrix} 100300010410
主元位置非常明显:
(1,1) → 1(第1列主元)
(2,3) → 1(第3列主元)
现在开始构造满秩分解
步骤1:取出原矩阵的主元列,组成 F
主元列是第1列和第3列,从原始矩阵 A(不是消元后的!)直接抄下来:
原始 A:
1315264120011 \begin{bmatrix} \color{red}{1} & 3 & \color{red}{1} & 5 \\ \color{red}{2} & 6 & \color{red}{4} & 12 \\ \color{red}{0} & 0 & \color{red}{1} & 1 \end{bmatrix} 1203601415121
所以:
F=112401(3×2 矩阵,列满秩) F = \begin{bmatrix} 1 & 1 \\ 2 & 4 \\ 0 & 1 \end{bmatrix} \qquad (3\times 2\ \text{矩阵,列满秩}) F= 120141 (3×2 矩阵,列满秩)
步骤2:把 A 的每一列用 F 的列线性表示,求出系数
我们要解 4 次方程:F x = aⱼ(j=1,2,3,4)
或者直接手算:
设 F 的第1列为 f₁ = 1,2,0ᵀ,f₂ = 1,4,1ᵀ
- 第1列 1,2,0ᵀ = 1×f₁ + 0×f₂ → 系数 1, 0
- 第2列 3,6,0ᵀ = 3×f₁ + 0×f₂ → 系数 3, 0
- 第3列 1,4,1ᵀ = 0×f₁ + 1×f₂ → 系数 0, 1
- 第4列 5,12,1ᵀ
设 x f₁ + y f₂ = 5,12,1ᵀ
方程组:
x + y = 5
2x + 4y = 12 → x + 2y = 6
0x + y = 1 → y = 1
代入得 x + 1 = 5 → x = 4
所以系数 4, 1
也可以直接观察:第4列 = 4×第1列 + 1×第3列 = 4×1,2,0 + 1×1,4,1 = 4+1, 8+4, 0+1 = 5,12,1
所以 G 的列分别是:1,0ᵀ, 3,0ᵀ, 0,1ᵀ, 4,1ᵀ
写成行矩阵:
G=13040011(2×4 矩阵,行满秩) G = \begin{bmatrix} 1 & 3 & 0 & 4 \\ 0 & 0 & 1 & 1 \end{bmatrix} \qquad (2\times 4\ \text{矩阵,行满秩}) G=10300141(2×4 矩阵,行满秩)
结果
A=1315264120011→高斯消元130400110000(主元在第1、3列)⇓A=112401⏟F = 原矩阵第1、3列 13040011⏟G = 系数矩阵 { \begin{aligned} A &= \begin{bmatrix} 1 & 3 & 1 & 5 \\ 2 & 6 & 4 & 12 \\ 0 & 0 & 1 & 1 \end{bmatrix} \\ &\xrightarrow{\text{高斯消元}} \begin{bmatrix} 1 & 3 & 0 & 4 \\ 0 & 0 & 1 & 1 \\ 0 & 0 & 0 & 0 \end{bmatrix} \quad \text{(主元在第1、3列)} \\ &\Downarrow \\ A &= \underbrace{ \begin{bmatrix} 1 & 1 \\ 2 & 4 \\ 0 & 1 \end{bmatrix} }{\text{F = 原矩阵第1、3列}} \; \underbrace{ \begin{bmatrix} 1 & 3 & 0 & 4 \\ 0 & 0 & 1 & 1 \end{bmatrix} }{\text{G = 系数矩阵}} \end{aligned} } AA= 1203601415121 高斯消元 100300010410 (主元在第1、3列)⇓=F = 原矩阵第1、3列 120141 G = 系数矩阵 10300141
简单说就是
- 高斯消元 → 找出主元列
- 把原矩阵的主元列抄下来 → F
- 每一列用 F 表示 → 系数拼成 G