满秩分解是怎么把矩阵分解成了两个满秩的矩阵

满秩分解是怎么把矩阵分解成了两个满秩的矩阵

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

简单说就是

  1. 高斯消元 → 找出主元列
  2. 把原矩阵的主元列抄下来 → F
  3. 每一列用 F 表示 → 系数拼成 G
相关推荐
Bobolink_2 天前
TikTok矩阵账号如何批量养号?工作室级运营方案分享
矩阵·内容运营·跨境电商·tik tok·账号运营
H178535090962 天前
SolidWorks第四部分_直接实体建模特征9_替换面原理
线性代数·算法·机器学习·3d建模·solidworks
AI_yangxi2 天前
短视频矩阵系统专业公司
大数据·人工智能·矩阵
昇腾CANN2 天前
【cann-samples系列】GroupedMatmul MX量化矩阵乘的深度性能优化实践
线性代数·性能优化·矩阵·昇腾·cann
青山木2 天前
Hot 100 --- 矩阵置零
线性代数·算法·leetcode·矩阵·哈希算法
Jasmine_llq2 天前
《B4264 [GESP202503 四级] 二阶矩阵》
线性代数·算法·矩阵·二维矩阵遍历枚举所有2×2矩阵·交叉乘积等式条件判断·输入输出快读加速·长整型防溢出计数统计
阿泽·黑核3 天前
05 keyflow 扩展设计方案:矩阵键盘/组合键/事件队列/中断驱动
线性代数·矩阵·计算机外设·嵌入式·agent·vibe coding
工头阿乐3 天前
相机坐标系标定与外参矩阵求解
数码相机·线性代数·矩阵
金色熊族4 天前
QTransform使用心得(二)--仿射变换、非仿射变换、矩阵
qt·线性代数·矩阵