0%

线性代数实战:深入理解RQ分解

引言:从一个问题说起

假设你是一个机器人工程师。你刚刚通过传感器测量,得到了物体在三维空间中的位置数据,但这些数据是在机器人自己的坐标系下测量的。你需要把这些数据转换到世界坐标系中。

或者,你是一个计算机视觉工程师。你从摄像机标定中得到了一个 \(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 \}\) 满足:

  1. 这组向量线性无关;
  2. 它们张成整个空间 \(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 分解可以提高数值稳定性:

  1. \(A = RQ\)
  2. 求解 \(R\mathbf{y} = Q^T \mathbf{b}\)(良态问题);
  3. 得到 \(\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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import numpy as np

def rq_decomposition(A, method='givens'):
"""
RQ 分解:A = RQ

Parameters:
-----------
A : ndarray, shape (m, n)
输入矩阵
method : str
'givens':Givens 旋转(推荐)
'householder':Householder 变体

Returns:
--------
R : ndarray
上三角矩阵
Q : ndarray
正交矩阵
"""
m, n = A.shape
R = A.copy().astype(float)
Q = np.eye(n)

if method == 'givens':
# 从右下角开始向左处理
for j in range(n-1, 0, -1):
for i in range(min(m-1, j), 0, -1):
if abs(R[i, j-1]) < 1e-12:
continue

# Givens 旋转参数
r = np.sqrt(R[i-1, j-1]**2 + R[i, j-1]**2)
c = R[i-1, j-1] / r
s = R[i, j-1] / r

# Givens 矩阵
G = np.eye(m)
G[i-1, i-1] = c
G[i-1, i] = s
G[i, i-1] = -s
G[i, i] = c

# 更新
R = G @ R
Q[:j+1, :] = G[:j+1, :j+1] @ Q[:j+1, :]

# 调整 R 的对角元为正
D = np.diag(np.sign(np.diag(R)))
D[D == 0] = 1
R = R @ D
Q = D @ Q

return R, Q

10.2 摄像机标定分解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import numpy as np

def decompose_camera_matrix(P):
"""
分解投影矩阵 P = K[R|t]

Parameters:
-----------
P : ndarray, shape (3, 4)
投影矩阵

Returns:
--------
K : ndarray, shape (3, 3)
内参矩阵
R : ndarray, shape (3, 3)
旋转矩阵
t : ndarray, shape (3,)
平移向量
"""
from scipy.linalg import rq

# RQ 分解
M = P[:, :3]
R_mat, Q = rq(M)

# 调整符号
D = np.diag(np.sign(np.diag(R_mat)))
R_mat = R_mat @ D
Q = D @ Q

# 提取参数
K = R_mat
R_rot = Q[:3, :3]
t = -R_rot @ P[:, 3]

return K, R_rot, t

10.3 验证分解的正确性

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import numpy as np

def verify_rq(A):
"""验证 RQ 分解的正确性"""
R, Q = rq_decomposition(A)

# 验证 A = RQ
error = np.linalg.norm(A - R @ Q)
print(f"A - RQ 的误差: {error:.2e}")

# 验证 Q 是正交矩阵
orthogonality_error = np.linalg.norm(Q @ Q.T - np.eye(len(Q)))
print(f"Q 的正交性误差: {orthogonality_error:.2e}")

# 验证 R 是上三角矩阵
lower_triangle = np.tril(R, k=-1)
triangularity_error = np.linalg.norm(lower_triangle)
print(f"R 的上三角误差: {triangularity_error:.2e}")

总结:知识体系的脉络

让我们回顾 RQ 分解的知识脉络:

1
2
3
4
5
6
7
8
9
10
11
12
13
向量空间

线性相关/无关 → 基与维数

内积 → 正交性

格拉姆-施密特正交化

QR 分解(列向量的正交基表示)

RQ 分解(顺序颠倒的分解)

工程应用(摄像机标定、机器人学等)

核心思想

  1. 正交性是理解 RQ 分解的关键;
  2. 格拉姆-施密特过程揭示了 QR/RQ 分解的几何本质;
  3. 顺序的颠倒带来了不同的应用场景;
  4. 数值稳定性是选择分解方法的重要考虑。

RQ 分解看似只是 QR 分解的简单反转,但它在计算机视觉中的摄像机标定有着不可替代的作用。理解其背后的数学原理,不仅能帮助我们正确使用这一工具,更能让我们体会到线性代数在工程实践中的强大威力。


参考文献

  1. Golub, G. H., & Van Loan, C. F. (2013). Matrix Computations. JHU Press.
  2. Strang, G. (2006). Linear Algebra and Its Applications. Brooks Cole.
  3. Hartley, R., & Zisserman, A. (2003). Multiple View Geometry in Computer Vision. Cambridge University Press.
  4. NumPy 和 SciPy 官方文档中的线性代数模块。