Householder约化在矩阵三对角化中的应用
题目描述
给定一个n阶实对称矩阵A,目标是寻找一个正交矩阵Q,使得 \(T = Q^T A Q\) 是一个对称三对角矩阵。三对角化是将对称矩阵化为三对角形式的过程,它是许多特征值算法(如QR算法、分治法)的关键预处理步骤。我们需要详细讲解如何使用Householder反射变换(也称为Householder变换)来实现这一约化过程。
解题过程
步骤1: 理解目标与Householder变换
我们的目标是通过正交相似变换,将对称矩阵A转化为对称三对角矩阵T。由于A是对称的,T也必然对称,因此非零元素只出现在主对角线及其上、下一条对角线上。
Householder变换 是一个正交变换,其形式为:
\[P = I - 2 \frac{vv^T}{v^T v} \]
其中 \(v\) 是一个非零向量,\(P\) 是一个对称且正交的矩阵(即 \(P^T = P = P^{-1}\))。它的几何意义是关于某个超平面的反射。在数值计算中,我们通常将 \(v\) 归一化,使得 \(v^T v = 2\) 以简化计算,但为清晰起见,我们保留一般形式。
Householder变换的关键性质是:对于任意向量 \(x\),我们可以选择 \(v\) 使得 \(Px\) 除第一个分量外,其余分量均为零,即 \(Px = \pm \|x\|_2 e_1\),其中 \(e_1\) 是第一个标准基向量。
步骤2: 约化过程概述
设矩阵A为n阶实对称矩阵。约化过程需要进行n-2步迭代(因为最后两行/列自然满足三对角结构)。在第k步(k从1到n-2),我们将A的第k行和第k列中,从第k+2个元素到第n个元素化为零,同时保持对称性。
设当前矩阵为 \(A^{(k-1)}\)(初始时 \(A^{(0)} = A\)),我们关注其右下角的 \((n-k+1) \times (n-k+1)\) 子矩阵。在第k步,我们要将当前矩阵的第k列中,位于行 \(k+2, k+3, ..., n\) 的元素消为零。
步骤3: 第k步的具体计算
假设我们正在处理第k步。考虑当前矩阵 \(A^{(k-1)}\) 的第k列,记向量 \(x\) 为:
\[x = \begin{pmatrix} a_{k+1, k}^{(k-1)} \\ a_{k+2, k}^{(k-1)} \\ \vdots \\ a_{n, k}^{(k-1)} \end{pmatrix} \]
这是第k列中从第 \(k+1\) 行到第 \(n\) 行的部分(注意:由于对称性,\(a_{i,k} = a_{k,i}\))。
我们希望找到一个Householder变换 \(P_k\) 作用于 \(x\),使得 \(P_k x = \begin{pmatrix} \sigma \\ 0 \\ \vdots \\ 0 \end{pmatrix}\),其中 \(\sigma = \pm \|x\|_2\)。
构造 \(P_k\) 对应的向量 \(v_k\):
- 令 \(\alpha = -\text{sign}(x_1) \|x\|_2\),其中 \(x_1\) 是 \(x\) 的第一个分量。这里选择符号为负是为了数值稳定性(避免相消)。
- 令 \(u = x - \alpha e_1\),其中 \(e_1 = (1, 0, ..., 0)^T\) 是长度为 \(n-k\) 的向量。
- 令 \(v_k = u / \|u\|_2\)(或更高效地,令 \(v = u\),并在公式中使用 \(vv^T / (v^T v)\))。
对应的Householder矩阵为:
\[P_k = I - 2 v_k v_k^T \]
但注意,这里的 \(P_k\) 是 \((n-k) \times (n-k)\) 的矩阵。
步骤4: 将变换嵌入到整个矩阵
为了对整个矩阵A进行相似变换,我们需要构造一个n阶正交矩阵 \(Q_k\):
\[Q_k = \begin{pmatrix} I_k & 0 \\ 0 & P_k \end{pmatrix} \]
其中 \(I_k\) 是 \(k \times k\) 的单位矩阵。然后,我们计算:
\[A^{(k)} = Q_k^T A^{(k-1)} Q_k \]
由于 \(Q_k\) 是分块对角形式,这个变换只影响右下角的 \((n-k) \times (n-k)\) 子矩阵。
具体计算时,我们不需要显式构造 \(P_k\) 或 \(Q_k\),而是通过向量 \(v_k\) 直接更新矩阵。
更新过程:
- 计算 \(w = A^{(k-1)} v_k\)(只涉及右下角的子矩阵部分)。
- 然后计算 \(P_k w = w - 2 v_k (v_k^T w)\)。
实际上,更高效的做法是分两步更新:
- 首先,计算 \(p = 2 A^{(k-1)} v_k / (v_k^T v_k)\)(但通常我们标准化 \(v_k\) 使得 \(v_k^T v_k = 2\),则 \(p = A^{(k-1)} v_k\))。
- 然后,计算 \(q = p - (v_k^T p) v_k\)。
- 最后,更新矩阵:\(A^{(k)} = A^{(k-1)} - v_k q^T - q v_k^T\)。
由于对称性,我们只需更新下三角部分(或上三角部分)。
经过这一步,矩阵 \(A^{(k)}\) 的第k列中,行 \(k+2\) 到 \(n\) 的元素变为零;同时,由于对称性,第k行中列 \(k+2\) 到 \(n\) 的元素也变为零。
步骤5: 累积变换矩阵Q(如果需要)
如果我们最终需要正交矩阵Q使得 \(T = Q^T A Q\),则我们需要累积变换:
\[Q = Q_1 Q_2 \cdots Q_{n-2} \]
初始时令 \(Q = I\)(单位矩阵),然后在每一步右乘 \(Q_k\):
\[Q := Q Q_k \]
由于 \(Q_k\) 是分块对角矩阵,这个乘法可以高效完成。
步骤6: 算法完成
经过n-2步后,矩阵A被化为对称三对角矩阵T。最终结果:
\[T = A^{(n-2)} \]
如果累积了Q,则有 \(T = Q^T A Q\)。
总结
Householder约化是一种稳定且高效的方法,将对称矩阵三对角化。其主要思想是通过一系列Householder反射,逐步将矩阵的列和行中的非零元素消去,同时保持对称性。整个过程需要 \(O(n^3)\) 次浮点运算,是许多特征值求解算法的标准预处理步骤。