满秩分解是怎么把矩阵分解成了两个满秩的矩阵
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=[1315264120011]3×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