QR分解的列主元(Column Pivoting)改进及其在秩亏最小二乘问题中的应用
题目描述
本题目讨论在QR分解中引入列主元(Column Pivoting)技术,以改进其在求解秩亏(即矩阵列秩小于列数)最小二乘问题时的数值稳定性和可靠性。给定一个矩阵 \(A \in \mathbb{R}^{m \times n}\)(通常 \(m \ge n\)),但在秩亏情况下,其列秩 \(r < n\),我们需要求解最小二乘问题 \(\min_{x} \| Ax - b \|_2^2\)。当A列不满秩时,解不唯一,存在无数个解,通常我们寻找其中范数最小的解(最小范数解)或利用某种正则化。标准的QR分解在数值上可能对秩亏损敏感,而带列主元的QR分解(QRP)能更稳定地处理秩亏损,并给出一个数值秩的估计。我们将详细讲解带列主元的QR分解(QRP)算法,并阐述如何利用其结果求解秩亏最小二乘问题。
逐步讲解
步骤1: 问题分析与动机
标准QR分解(例如通过Householder变换)将矩阵A分解为 \(A = QR\),其中Q正交,R是上三角矩阵。当A列满秩时,R的对角元非零,最小二乘解可通过回代求得。但当A秩亏时,R的某些对角元在数值上会非常接近于零(由于舍入误差,可能不会精确为零)。如果不加处理,回代过程会不稳定,且难以判断矩阵的真实数值秩。
列主元QR分解(QRP)的核心思想:在每一次进行Householder变换(或Givens旋转)之前,对剩余的列进行列交换,使得当前列中具有最大2-范数的列被交换到当前处理的位置。这等价于在分解过程中引入一个列置换矩阵P,使得 \(A P = Q R\),其中R的对角元 \(r_{ii}\) 的绝对值是非递增的。这样,数值秩可以通过检查R的对角元是否大于某个阈值(与机器精度相关)来判断。大的对角元对应重要的列(即线性无关性强的方向),小的对角元对应线性相关(或数值上接近相关)的列。
步骤2: 带列主元的QR分解(QRP)算法细节
假设 \(A \in \mathbb{R}^{m \times n}, m \ge n\)。算法目标是计算正交矩阵Q,上三角矩阵R,以及置换矩阵P,使得 \(A P = Q R\)。P通常表示为一列置换向量的形式。
算法流程:
-
初始化:令 \(R^{(0)} = A\),\(Q = I_{m \times m}\)(或存储Householder向量),置换向量 \(p = [1, 2, ..., n]\)。
-
对 k = 1 到 n 循环(实际上通常到min(m, n),这里假设n ≤ m):
a. 列选主元:在当前处理的子矩阵(即R的第k行到第m行,第k列到第n列)中,寻找具有最大2-范数的列。即计算 \(j_k = \arg\max_{j = k, ..., n} \| R(k:m, j) \|_2\)。
b. 列交换:如果 \(j_k \neq k\),则交换R的第k列与第j_k列,并相应地在置换向量p中交换索引 \(p[k]\) 和 \(p[j_k]\)。
c. Householder变换:对当前列 \(R(k:m, k)\) 构造一个Householder反射器 \(H_k\),使得 \(H_k R(k:m, k) = [r_{kk}; 0; ...; 0]\),其中 \(r_{kk}\) 是变换后的新对角元(非负)。注意,这个反射器只作用于行k到m。
d. 更新矩阵:将 \(H_k\) 同时应用于R的剩余列和右侧(如果需要,可同时累积Q):
\(R(k:m, k:n) = H_k \cdot R(k:m, k:n)\)
同时,若需显式生成Q,则更新Q: \(Q(:, k:m) = Q(:, k:m) \cdot H_k^T\)(因为Householder反射器对称且正交,其逆为其自身)。
e. 令 \(R_{kk} = r_{kk}\)。 -
结果:分解完成。我们得到 \(A P = Q R\),其中 \(P\) 是根据置换向量p生成的置换矩阵(即 \(P = I_n(:, p)\)),R是上三角矩阵,其对角元绝对值非递增。
数值秩判定:在QRP分解后,R的对角元 \(|r_{11}| \ge |r_{22}| \ge ... \ge |r_{nn}|\)。给定一个容差 \(\tau\)(通常基于机器精度和矩阵范数,例如 \(\tau = \text{macheps} \cdot \|A\|\) 或更常用的 \(\tau = \text{macheps} \cdot |r_{11}|\)),我们找到最大的 \(r\) 使得 \(|r_{rr}| > \tau\),而 \(|r_{r+1,r+1}| \le \tau\)(或显著下降)。这个 \(r\) 即为数值秩的估计。
步骤3: 利用QRP分解求解秩亏最小二乘问题
给定问题 \(\min_x \|Ax - b\|_2\),其中A秩亏(数值秩为r < n)。利用QRP分解 \(A P = Q R\),原问题转化为:
\[\min_x \| (Q R P^T) x - b \|_2 = \min_x \| R (P^T x) - Q^T b \|_2 \]
令 \(y = P^T x\),\(c = Q^T b\),则问题变为 \(\min_y \| R y - c \|_2\)。
由于R是上三角且其对角元绝对值递减,我们可以将R分块为:
\[R = \begin{bmatrix} R_{11} & R_{12} \\ 0 & R_{22} \end{bmatrix} \]
其中 \(R_{11}\) 是 \(r \times r\) 的非奇异上三角矩阵(其对角元均大于容差τ),\(R_{22}\) 是一个很小的块(在理想精确算术下应为零,数值上其范数很小)。类似地,将y和c也相应分块: \(y = \begin{bmatrix} y_1 \\ y_2 \end{bmatrix}\), \(c = \begin{bmatrix} c_1 \\ c_2 \end{bmatrix}\),其中 \(y_1, c_1 \in \mathbb{R}^r\)。
则残差平方为:
\[\| R y - c \|_2^2 = \left\| \begin{bmatrix} R_{11} y_1 + R_{12} y_2 - c_1 \\ R_{22} y_2 - c_2 \end{bmatrix} \right\|_2^2 \]
由于 \(R_{22}\) 很小,为了最小化残差,通常的做法是将 \(R_{22}\) 视为零矩阵,并忽略对应的方程(因为它们对应于数值零空间,对残差贡献很小但会导致解不稳定)。这被称为截断QR解法。
具体求解步骤:
-
令 \(y_2 = 0\)。这相当于在数值秩r处截断,忽略掉与微小奇异值(对应 \(R_{22}\))相关的解分量,从而得到一个稳定、低秩的近似解。
-
求解 \(R_{11} y_1 = c_1 - R_{12} y_2 = c_1\)(因为 \(y_2 = 0\))。这是一个 \(r \times r\) 的上三角方程组,可通过回代法稳定求解,得到 \(y_1\)。
-
则 \(y = \begin{bmatrix} y_1 \\ 0 \end{bmatrix}\)。
-
最后,恢复原变量: \(x = P y\)。
这样得到的解 \(x\) 是原问题的一个最小二乘解,且是在截断意义下范数较小的解(因为我们将 \(y_2\) 设为零,相当于在零空间分量上选择了零向量,从而得到最小范数解的一种近似)。如果 \(R_{22}\) 严格为零(精确秩亏),则该解是精确的最小范数最小二乘解。
步骤4: 算法总结与数值注意事项
- 容差选择:数值秩判定的容差τ至关重要。常见选择是 \(\tau = \text{macheps} \cdot |r_{11}| \cdot \max(m, n)\) 或更简单的 \(\tau = \text{macheps} \cdot |r_{11}| \cdot n\),其中macheps是机器精度。更稳健的方法可能考虑矩阵的范数估计。
- 与SVD比较:SVD是处理秩亏问题最稳定的方法,但计算成本更高。QRP是一种更经济的替代,它在许多情况下能提供足够好的数值秩估计和稳定的解。
- 列主元开销:列选主元需要每次计算列的范数,但可以通过递推更新列范数来减少计算量(每次Householder变换后,受影响列的范数平方减去变换中消去的元素的平方),从而保持 \(O(mn^2)\) 的复杂度,与标准QR分解同量级,只是常数稍大。
结论
带列主元的QR分解(QRP)通过引入列交换,使R的对角元非递增,从而能稳定地估计矩阵的数值秩,并提供一个截断的解法来求解秩亏最小二乘问题。该方法结合了数值稳定性和相对较低的计算成本,是处理病态或秩亏最小二乘问题的实用工具。