引言:从一个问题说起
假设你是一个机器人工程师。你刚刚通过传感器测量,得到了物体在三维空间中的位置数据,但这些数据是在机器人自己的坐标系下测量的。你需要把这些数据转换到世界坐标系中。
或者,你是一个计算机视觉工程师。你从摄像机标定中得到了一个 \(3 \times 4\) 的投影矩阵 \(P\),你想知道摄像机的内参(焦距、主点位置)和外参(旋转、平移)。
这些问题看似不同,却有一个共同的数学内核:矩阵分解。
在本文中,我们将从最基础的概念开始,一步一步地理解 RQ 分解——一种将矩阵分解为上三角矩阵和正交矩阵乘积的方法。我们会看到它是如何从向量空间的基本概念自然演化而来的,以及它在工程实践中的强大应用。 ## 第一章:向量——从有方向和大小的量说起
1.1 向量的直观理解
想象一下,你在地图上标记了两个地点:从家到公司的位置偏移。这个偏移可以用一个向量来表示:
\[ \mathbf{v} = (3 \text{ km}, 4 \text{ km}) \]
这个向量有两个分量:向东 3 公里,向北 4 公里。向量有大小(5 公里)和方向(东北方向)。
在数学中,我们把向量写成列的形式:
\[ \mathbf{v} = \begin{pmatrix} 3 \\ 4 \end{pmatrix} \]
1.2 向量的基本运算
向量的加法和数乘是向量空间的基础运算。
向量加法:把两个向量的分量分别相加
\[ \mathbf{u} + \mathbf{v} = \begin{pmatrix} u_1 \\ u_2 \end{pmatrix} + \begin{pmatrix} v_1 \\ v_2 \end{pmatrix} = \begin{pmatrix} u_1 + v_1 \\ u_2 + v_2 \end{pmatrix} \]
这在物理上对应位移的合成——先走 \(\mathbf{u}\) 再走 \(\mathbf{v}\),等同于走 \(\mathbf{u} + \mathbf{v}\)。
数乘:用标量乘以向量的每个分量
\[ k \cdot \mathbf{v} = k \begin{pmatrix} v_1 \\ v_2 \end{pmatrix} = \begin{pmatrix} k v_1 \\ k v_2 \end{pmatrix} \]
这表示向量的缩放——放大或缩小一个向量。
1.3 线性相关与线性无关
现在考虑一个核心问题:给定一组向量,它们是否「独立」?
假设你有三个向量 \(\mathbf{v}_1, \mathbf{v}_2, \mathbf{v}_3\)。如果存在不全为零的系数 \(c_1, c_2, c_3\) 使得:
\[ c_1 \mathbf{v}_1 + c_2 \mathbf{v}_2 + c_3 \mathbf{v}_3 = \mathbf{0} \] 假设 \(c_3\)不为\(0\),那么 \[ \mathbf{v}_3 = -\frac{c_1}{c_3}\mathbf{v}_1 - \frac{c_2}{c_3}\mathbf{v}_2 \]
那么这组向量是线性相关的。这意味着其中一个向量可以由其他向量「构造」出来——它没有提供新的信息。
反之,如果这个等式只有在所有系数都为零时才成立,那么这组向量是线性无关的。每个向量都提供了独立的信息。
直观理解:在二维平面中,最多只能有两个线性无关的向量。如果有第三个,它一定能被前两个表示出来。
1.4 基与维数——描述空间的「坐标系统」
有了线性无关的概念,我们就可以定义基和维数。
基的定义:一个向量空间 \(V\) 的一组基 \(\{\mathbf{v}_1, \mathbf{v}_2, \dots, \mathbf{v}_n \}\) 满足:
- 这组向量线性无关;
- 它们张成整个空间 \(V\)(任何向量都可以表示为它们的线性组合)。
维数:基中向量的个数,记作 \(\dim(V)\)。
在二维平面中,最常用的基是标准基:
\[ \mathbf{e}_1 = \begin{pmatrix} 1 \\ 0 \end{pmatrix}, \quad \mathbf{e}_2 = \begin{pmatrix} 0 \\ 1 \end{pmatrix} \]
任何二维向量都可以表示为:
\[ \mathbf{v} = x \mathbf{e}_1 + y \mathbf{e}_2 = \begin{pmatrix} x \\ y \end{pmatrix} \]
这里的 \((x, y)\) 就是向量 \(\mathbf{v}\) 在标准基下的坐标。
第二章:矩阵——从向量到变换
2.1 矩阵的本质
一个 \(m \times n\) 的矩阵可以看作 \(n\) 个 \(m\) 维列向量的集合:
\[ A = \begin{pmatrix} \mathbf{a}_1 & \mathbf{a}_2 & \cdots & \mathbf{a}_n \end{pmatrix} = \begin{pmatrix} a_{11} & a_{12} & \cdots & a_{1n} \\ a_{21} & a_{22} & \cdots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} & a_{m2} & \cdots & a_{mn} \end{pmatrix} \]
其中 \(\mathbf{a}_j = \begin{pmatrix} a_{1j} \\ a_{2j} \\ \vdots \\ a_{mj} \end{pmatrix}\) 是第 \(j\) 个列向量。
矩阵也代表线性变换。给定一个矩阵 \(A\) 和向量 \(\mathbf{x}\),乘积 \(A\mathbf{x}\) 给出了 \(\mathbf{x}\) 经过 \(A\) 变换后的结果。
2.2 矩阵乘法的几何意义
矩阵乘法 \(C = AB\) 表示复合变换:
\[ C\mathbf{x} = A(B\mathbf{x}) \]
即先做 \(B\) 变换,再做 \(A\) 变换。
例如,旋转矩阵 \(R_\theta\) 和缩放矩阵 \(S\) 相乘,先缩放再旋转:
\[ R_\theta S \begin{pmatrix} x \\ y \end{pmatrix} \]
2.3 矩阵的秩——「有效信息量」
秩衡量矩阵包含的「独立信息」有多少。
\[ \operatorname{rank}(A) = \dim(\operatorname{col}(A)) = \text{列空间的维数} \]
如果一个 \(3 \times 3\) 矩阵的秩为 3,说明它的三个列向量线性无关,它们张成了整个三维空间。
如果秩为 2,说明这些列向量都在同一个平面内,只「有效利用」了二维空间。
满秩矩阵:\(\operatorname{rank}(A) = \min(m, n)\)。满秩矩阵的逆矩阵存在。
第三章:内积与正交性——理解「垂直」
3.1 为什么要引入内积?
仅有向量加法和数乘,我们只能讨论向量的线性关系。要讨论长度、角度、距离,我们需要内积。
点积(标准内积):
\[ \mathbf{u} \cdot \mathbf{v} = u_1 v_1 + u_2 v_2 + \cdots + u_n v_n = \mathbf{u}^T \mathbf{v} \]
3.2 由内积导出的概念
向量长度(范数):
\[ \|\mathbf{v}\| = \sqrt{\mathbf{v} \cdot \mathbf{v}} = \sqrt{v_1^2 + v_2^2 + \cdots + v_n^2} \]
柯西-施瓦茨不等式:
\[ |\mathbf{u} \cdot \mathbf{v}| \leq \|\mathbf{u}\| \|\mathbf{v}\| \]
这个不等式告诉我们:两个向量的点积的绝对值,不会超过它们长度的乘积。
向量夹角:
\[ \cos \theta = \frac{\mathbf{u} \cdot \mathbf{v}}{\|\mathbf{u}\| \|\mathbf{v}\|} \]
3.3 正交性——垂直的概念
如果两个向量的点积为零,它们就是正交的:
\[ \mathbf{u} \perp \mathbf{v} \iff \mathbf{u} \cdot \mathbf{v} = 0 \]
正交向量组的性质:如果一组向量两两正交且非零,那么它们一定是线性无关的。
证明:设 \(c_1 \mathbf{v}_1 + c_2 \mathbf{v}_2 + \cdots + c_k \mathbf{v}_k = \mathbf{0}\),两边与 \(\mathbf{v}_i\) 做点积:
\[ c_i (\mathbf{v}_i \cdot \mathbf{v}_i) = 0 \implies c_i = 0 \]
3.4 标准正交基
标准正交基是一组既两两正交又都是单位向量的基:
\[ \mathbf{q}_i \cdot \mathbf{q}_j = \delta_{ij} = \begin{cases} 1 & i = j \\ 0 & i \neq j \end{cases} \]
标准正交基的坐标公式:
对于任意向量 \(\mathbf{v}\):
\[ \mathbf{v} = (\mathbf{v} \cdot \mathbf{q}_1) \mathbf{q}_1 + (\mathbf{v} \cdot \mathbf{q}_2) \mathbf{q}_2 + \cdots + (\mathbf{v} \cdot \mathbf{q}_n) \mathbf{q}_n \]
坐标就是 \(\mathbf{v}\) 与各基向量的点积!
第四章:格拉姆-施密特正交化——如何构造标准正交基
4.1 问题的提出
给定一组线性无关的向量 \(\{\mathbf{v}_1, \mathbf{v}_2, \dots, \mathbf{v}_n\}\),如何构造它们张成空间的标准正交基 \(\{\mathbf{q}_1, \mathbf{q}_2, \dots, \mathbf{q}_n\}\)?
1907 年,Jørgen Gram 和 Erhard Schmidt 独立提出了解决方法,这就是格拉姆-施密特正交化过程。
4.2 过程的直觉解释
想象你在建房子。你有 \(\{\mathbf{v}_1, \mathbf{v}_2, \mathbf{v}_3\}\) 三根柱子,你想让它们两两垂直(正交),并且长度都是 1(单位化)。
第一步:取第一根柱子 \(\mathbf{v}_{1}\),把它弄短到长度 1:
\[ \mathbf{q}_1 = \frac{\mathbf{v}_1}{\|\mathbf{v}_1\|} \]
第二步:第二根柱子 \(\mathbf{v}_{2}\) 肯定和 \(\mathbf{q}_{1}\) 不垂直。从 \(\mathbf{v}_{2}\) 中减去它在 \(\mathbf{q}_{1}\) 方向上的分量,剩下的部分就垂直于 \(\mathbf{q}_{1}\):
\[ \mathbf{u}_2 = \mathbf{v}_2 - (\mathbf{v}_2 \cdot \mathbf{q}_1) \mathbf{q}_1 \]
然后单位化:
\[ \mathbf{q}_2 = \frac{\mathbf{u}_2}{\|\mathbf{u}_2\|} \]
第三步:第三根柱子 \(\mathbf{v}_{3}\) 既有 \(\mathbf{q}_{1}\) 方向的分量,也有 \(\mathbf{q}_{2}\) 方向的分量。把这两部分都减掉:
\[ \mathbf{u}_3 = \mathbf{v}_3 - (\mathbf{v}_3 \cdot \mathbf{q}_1) \mathbf{q}_1 - (\mathbf{v}_3 \cdot \mathbf{q}_2) \mathbf{q}_2 \]
单位化得到 \(\mathbf{q}_{3}\)。
4.3 一般公式
正交化步骤:
\[ \begin{aligned} \mathbf{u}_1 &= \mathbf{v}_1 \\ \mathbf{u}_2 &= \mathbf{v}_2 - \operatorname{proj}_{\mathbf{u}_1} \mathbf{v}_2 = \mathbf{v}_2 - \frac{\mathbf{u}_1 \cdot \mathbf{v}_2}{\|\mathbf{u}_1\|^2} \mathbf{u}_1 \\ \mathbf{u}_3 &= \mathbf{v}_3 - \operatorname{proj}_{\mathbf{u}_1} \mathbf{v}_3 - \operatorname{proj}_{\mathbf{u}_2} \mathbf{v}_3 \\ &\;\;\vdots \\ \mathbf{u}_k &= \mathbf{v}_k - \sum_{i=1}^{k-1} \operatorname{proj}_{\mathbf{u}_i} \mathbf{v}_k \end{aligned} \]
单位化步骤:
\[ \mathbf{q}_k = \frac{\mathbf{u}_k}{\|\mathbf{u}_k\|} \]
4.4 正交化的矩阵表示
将上述过程用矩阵表示,我们得到一个惊人的结果。
设矩阵 \(A = [\mathbf{a}_1 \ \mathbf{a}_2 \ \cdots \ \mathbf{a}_n]\),经过格拉姆-施密特正交化后:
\[ \begin{aligned} \mathbf{a}_1 &= r_{11} \mathbf{q}_1 \\ \mathbf{a}_2 &= r_{12} \mathbf{q}_1 + r_{22} \mathbf{q}_2 \\ \mathbf{a}_3 &= r_{13} \mathbf{q}_1 + r_{23} \mathbf{q}_2 + r_{33} \mathbf{q}_3 \\ &\vdots \end{aligned} \]
用矩阵形式写出:
\[ A = QR \]
其中:
\(Q = [\mathbf{q}_1 \ \mathbf{q}_2 \ \cdots \ \mathbf{q}_n]\) 是正交矩阵(列标准正交);
\(R\) 是上三角矩阵。
这就是著名的 QR 分解!格拉姆-施密特过程给出了 QR 分解的一种计算方法。
第五章:正交矩阵——保持长度和角度的变换
5.1 正交矩阵的定义
如果一个方阵 \(Q\) 满足:
$ Q^T Q = Q Q^T = I $
那么 \(Q\) 是正交矩阵。这意味着 \(Q^{-1} = Q^T\)。
由于 \(Q\) 的列是标准正交的(根据定义),我们有:
列向量两两正交:\(\mathbf{v}_i^T \mathbf{v}_j = 0\)(当 \(i \neq j\));
列向量长度都是 1:\(\mathbf{v}_i^T \mathbf{v}_i = 1\)。
5.2 正交矩阵的性质
保范性:
\[\|Q\mathbf{x}\| = \|\mathbf{x}\|\]
证明:\(\|Q\mathbf{x}\|^2 = (Q\mathbf{x})^T (Q\mathbf{x}) = \mathbf{x}^T Q^T Q \mathbf{x} = \mathbf{x}^T \mathbf{x} = \|\mathbf{x}\|^2\)
保内积性:
\[ (Q\mathbf{u}) \cdot (Q\mathbf{v}) = \mathbf{u} \cdot \mathbf{v} \]
这意味着正交变换不改变向量的长度和夹角。
5.3 正交变换的几何意义
在二维平面中,正交矩阵只可能是:
旋转:\(R_\theta = \begin{pmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{pmatrix}\)(行列式为 +1);
反射:\(F = \begin{pmatrix} \cos 2\theta & \sin 2\theta \\ \sin 2\theta & -\cos 2\theta \end{pmatrix}\)(行列式为 -1)。
在三维空间中,正交变换是旋转、反射或两者的组合。
5.4 为什么正交矩阵如此重要?
数值稳定性!正交矩阵的逆就是它的转置,不需要额外的计算。而且由于保范性,正交变换不会放大误差。
这正是 QR 分解和 RQ 分解的核心优势——它们将问题分解为数值稳定的正交部分和简单的三角部分。
第六章:矩阵分解的演化——从 LU 到 QR
6.1 分解的思想
把复杂问题分解为简单问题的组合,这是数学的核心思想之一。
LU 分解:\(A = LU\),其中 \(L\) 是下三角矩阵,\(U\) 是上三角矩阵。这对应高斯消元法——通过行变换把矩阵变成上三角。
但 LU 分解有局限:不是所有矩阵都有 LU 分解(要求所有顺序主子式非零)。
6.2 QR 分解的突破
QR 分解说:任何矩阵都可以分解为 \(A = QR\),其中 \(Q\) 是正交矩阵,\(R\) 是上三角矩阵。
这怎么可能?让我们看看几何意义。
几何视角:QR 分解将 \(A\) 的列向量表示为标准正交基 \(\{ \mathbf{q}_1, \dots, \mathbf{q}_n \}\) 的线性组合,系数矩阵 \(R\) 记录了这些坐标。
\[ \begin{aligned} \mathbf{a}_1 &= r_{11} \mathbf{q}_1 \\ \mathbf{a}_2 &= r_{12} \mathbf{q}_1 + r_{22} \mathbf{q}_2 \\ \mathbf{a}_3 &= r_{13} \mathbf{q}_1 + r_{23} \mathbf{q}_2 + r_{33} \mathbf{q}_3 \\ &\vdots \end{aligned} \]
6.3 QR 分解的三种计算方法
方法一:格拉姆-施密特 - 直观易懂; - 数值稳定性较差(需要使用修正版本)。
方法二:Householder 变换 - 数值最稳定; - 适合一般矩阵。
方法三:Givens 旋转 - 适合稀疏矩阵; - 可以精确零化特定元素。
第七章:RQ 分解——QR 的「反向」版本
7.1 RQ 分解的定义
RQ 分解将矩阵分解为:
\[ A = RQ \]
其中: - \(R\) 是 \(m \times n\) 的上三角矩阵; - \(Q\) 是 \(n \times n\) 的正交矩阵。
与 QR 分解 (\(A = QR\)) 相比,因子的顺序颠倒了。
7.2 顺序颠倒意味着什么?
QR 分解:\(A = QR\) 表示「先正交基 \(Q\),再上三角 \(R\)」。
RQ 分解:\(A = RQ\) 表示「先上三角 \(R\),再正交基 \(Q\)」。
虽然只是顺序不同,但几何意义和应用场景大不相同。
7.3 RQ 分解的计算方法
方法一:从右向左的格拉姆-施密特
对 \(A\) 的列向量从右到左进行正交化,而不是从左到右。
方法二:Givens 旋转
从矩阵的右下角开始,逐个零化下三角元素,累积旋转矩阵得到 \(Q\)。
方法三:从 QR 分解转换
对 \(A^T\) 做 QR 分解:\(A^T = \tilde{Q} \tilde{R}\),则 \(A = \tilde{R}^T \tilde{Q}^T\)。
重要提醒:虽然转换法在数学上正确,但会引入额外的数值误差。工程实践中建议直接使用 Givens 旋转或 Householder 变体。
7.4 存在性与唯一性
存在性:如果 \(A \in \mathbb{R}^{m \times n}\) 列满秩(\(\text{rank}(A) = n\)),则 RQ 分解存在。
唯一性:如果要求 \(R\) 的对角元都为正,则 RQ 分解唯一。
第八章:工程实战——RQ 分解的核心应用
8.1 计算机视觉:摄像机标定
这是 RQ 分解最重要的应用场景。
在摄像机标定中,我们有一个 \(3 \times 4\) 的投影矩阵 \(P\),它将三维世界坐标映射到二维图像坐标:
\[ \lambda \begin{pmatrix} x \\ y \\ 1 \end{pmatrix} = P \begin{pmatrix} X \\ Y \\ Z \\ 1 \end{pmatrix} \]
投影矩阵可以分解为:
\[ P = K \begin{bmatrix} R & \mathbf{t} \end{bmatrix} \]
其中: - \(K\) 是 \(3 \times 3\) 的内参矩阵; - \(R\) 是 \(3 \times 3\) 的旋转矩阵; - \(\mathbf{t}\) 是平移向量。
关键发现:如果我们只考虑 \(P\) 的 \(3 \times 3\) 部分 \(M = K R_{\text{rot}}\),这恰好是一个 RQ 分解的形式!
\[ M = K R_{\text{rot}} = RQ \]
其中 \(K\) 是上三角矩阵(内参),\(Q\) 是正交矩阵(旋转)。
内参矩阵 \(K\) 的解释:
\[ K = \begin{pmatrix} f_x & s & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{pmatrix} \]
- \(f_x, f_y\):焦距(像素单位);
- \(c_x, c_y\):主点坐标(图像中心);
- \(s\):倾斜因子(通常为 0)。
8.2 机器人学:齐次变换分解
在机器人学中,刚体变换用 \(4 \times 4\) 的齐次矩阵表示:
\[ T = \begin{pmatrix} R & \mathbf{t} \\ \mathbf{0}^T & 1 \end{pmatrix} \]
RQ 分解可以帮助从测量数据中提取旋转和平移分量。
8.3 数值线性代数
对于病态方程组 \(A\mathbf{x} = \mathbf{b}\),使用 RQ 分解可以提高数值稳定性:
- \(A = RQ\);
- 求解 \(R\mathbf{y} = Q^T \mathbf{b}\)(良态问题);
- 得到 \(\mathbf{x} = Q\mathbf{y}\)。
第九章:高级视角——从有限维到无限维
9.1 投影定理
在希尔伯特空间(完备的内积空间)中,投影定理告诉我们:
对于任意向量 \(\mathbf{x}\) 和闭子空间 \(M\),存在唯一的分解:
\[\mathbf{x} = \mathbf{x}_0 + \mathbf{x}_1\]
其中 \(\mathbf{x}_0 \in M\)(投影),\(\mathbf{x}_1 \in M^\perp\)(正交补)。
这正是格拉姆-施密特过程在无限维空间的推广。
9.2 傅里叶级数——函数空间的「QR 分解」
在函数空间 \(L^2[-\pi, \pi]\) 中,傅里叶级数将函数展开为正交基的线性组合:
\[f(t) = \sum_{n=-\infty}^{\infty} c_n e^{int}\]
- 正交基:\(\{ e^{int} \}\) 在内积 \(\langle f, g \rangle = \int_{-\pi}^{\pi} f(t) \overline{g(t)} dt\) 下正交;
- 系数:\(c_n = \langle f, e^{int} \rangle\)。
这与 QR 分解的结构完全一致!正交基对应 \(Q\),系数对应 \(R\)。
9.3 小波变换——另一种正交分解
小波变换也利用了类似的结构:用一个正交小波基将信号分解。
\[\text{信号} = \sum_{k} c_k \phi(t-k) + \sum_{j,k} d_{jk} \psi_{jk}(t)\]
- \(\phi\):尺度函数(低频部分);
- \(\psi\):小波函数(高频部分);
- 系数 \(c_k, d_{jk}\) 类比于 \(R\) 矩阵。
第十章:代码实现
10.1 RQ 分解的 Python 实现
1 | import numpy as np |
10.2 摄像机标定分解
1 | import numpy as np |
10.3 验证分解的正确性
1 | import numpy as np |
总结:知识体系的脉络
让我们回顾 RQ 分解的知识脉络:
1 | 向量空间 |
核心思想:
- 正交性是理解 RQ 分解的关键;
- 格拉姆-施密特过程揭示了 QR/RQ 分解的几何本质;
- 顺序的颠倒带来了不同的应用场景;
- 数值稳定性是选择分解方法的重要考虑。
RQ 分解看似只是 QR 分解的简单反转,但它在计算机视觉中的摄像机标定有着不可替代的作用。理解其背后的数学原理,不仅能帮助我们正确使用这一工具,更能让我们体会到线性代数在工程实践中的强大威力。
参考文献
- Golub, G. H., & Van Loan, C. F. (2013). Matrix Computations. JHU Press.
- Strang, G. (2006). Linear Algebra and Its Applications. Brooks Cole.
- Hartley, R., & Zisserman, A. (2003). Multiple View Geometry in Computer Vision. Cambridge University Press.
- NumPy 和 SciPy 官方文档中的线性代数模块。