基于Householder反射的约化对称矩阵为三对角形式的算法详解
我将为你详细讲解如何使用Householder反射(Householder reflections)将一个实对称矩阵约化为三对角形式(tridiagonal form)。这一过程是计算对称矩阵特征值问题中关键的一步,因为三对角矩阵的特征值可以通过高效算法(如QR算法、分治法等)求得,从而避免直接处理稠密矩阵。
算法背景与目标
对于一个给定的 \(n \times n\) 实对称矩阵 \(A\),我们希望找到一个正交矩阵 \(Q\)(即 \(Q^T = Q^{-1}\)),使得:
\[T = Q^T A Q \]
是一个三对角矩阵(即只有主对角线、上一次对角线和下一次对角线可能有非零元素,其余均为零)。这一变换称为“正交相似变换”,它保持矩阵的特征值不变,且能极大地简化后续特征值计算。
核心思想:逐步零化非三对角元素
设 \(A^{(0)} = A\)。算法通过 \(n-2\) 步完成,每一步(第 \(k\) 步)消除矩阵中第 \(k\) 行和列中位于三对角带以外的元素。具体来说,在每一步,我们构造一个Householder反射矩阵 \(P_k\),将其作用于当前矩阵的左乘和右乘,以零化特定行和列中的元素,同时保持对称性。
详细步骤(逐步推导)
步骤1:理解Householder反射
一个Householder反射矩阵 \(P\) 可以定义为:
\[P = I - 2 \frac{v v^T}{v^T v} \]
其中 \(v\) 是一个非零向量。\(P\) 是正交且对称的(\(P^T = P = P^{-1}\))。它的作用是:给定一个向量 \(x\),通过选择适当的 \(v\),可以使得 \(P x\) 平行于某个坐标轴(即除了第一个分量外,其余分量都变为零)。在对称矩阵三对角化中,我们利用这个性质来零化矩阵特定列中的多个元素。
步骤2:第 \(k\) 步的子问题
在第 \(k\) 步(\(k = 1, 2, \dots, n-2\)),我们处理当前矩阵 \(A^{(k-1)}\)。记其右下角(第 \(k+1\) 行到第 \(n\) 行,第 \(k+1\) 列到第 \(n\) 列)的子矩阵为 \(A_{22}^{(k-1)}\)。我们需要构造一个Householder反射 \(P_k'\)(作用于较小的子空间 \(\mathbb{R}^{n-k}\)),使得当它作用于 \(A_{22}^{(k-1)}\) 的第一列时,将该列中从第二个元素开始的部分都化为零。
然后,我们将 \(P_k'\) 扩展为全空间 \(\mathbb{R}^n\) 中的反射矩阵 \(P_k\):
\[P_k = \begin{pmatrix} I_k & 0 \\ 0 & P_k' \end{pmatrix} \]
其中 \(I_k\) 是 \(k \times k\) 单位矩阵。这样,\(P_k\) 保持了前 \(k\) 行和前 \(k\) 列不变。
步骤3:具体计算第 \(k\) 步的Householder向量
设当前矩阵 \(A^{(k-1)}\) 的第 \(k\) 列中,我们需要零化的部分为向量 \(x \in \mathbb{R}^{n-k}\)(对应行/列索引 \(k+1\) 到 \(n\))。即:
\[x = \begin{pmatrix} a_{k+1,k}^{(k-1)} \\ a_{k+2,k}^{(k-1)} \\ \vdots \\ a_{n,k}^{(k-1)} \end{pmatrix} \]
我们希望找到 \(P_k'\) 使得 \(P_k' x = \begin{pmatrix} \sigma \\ 0 \\ \vdots \\ 0 \end{pmatrix}\),其中 \(\sigma = \pm \|x\|_2\)。
构造Householder向量 \(v\)(在子空间中):
- 计算 \(\alpha = -\text{sign}(x_1) \|x\|_2\)(为避免数值误差,通常取与 \(x_1\) 相反的符号)。
- 令 \(u = x - \alpha e_1\),其中 \(e_1 = (1, 0, \dots, 0)^T \in \mathbb{R}^{n-k}\)。
- 归一化:\(v = \frac{u}{\|u\|_2}\)。
则对应的Householder反射为 \(P_k' = I - 2 v v^T\)。
步骤4:应用反射更新矩阵
由于 \(P_k\) 是正交对称的,相似变换为:
\[A^{(k)} = P_k A^{(k-1)} P_k \]
因为 \(P_k\) 是分块对角形式,这个变换实际上只影响右下角的 \((n-k) \times (n-k)\) 子矩阵。具体计算可以分为三步(利用对称性可以减少计算量):
- 计算 \(w = A^{(k-1)} v\)(但只需计算受影响的行/列部分)。
- 然后计算 \(p = w - 2(v^T w) v\)。
- 更新 \(A^{(k)}\) 的相应部分。
实际上,高效的实现是:
- 先计算 \(p = A^{(k-1)} v\)。
- 然后计算 \(K = v^T p\)。
- 最后计算 \(q = p - K v\)。
- 更新子矩阵:\(A^{(k)}\) 的右下角部分变为 \(A^{(k-1)} - 2(v q^T + q v^T) + 4K v v^T\)。
步骤5:保存Householder向量
为了后续可能需要的特征向量计算(比如通过反向累乘变换),我们通常将每一步的Householder向量 \(v\) 保存起来(通常可以存储在矩阵 \(A\) 的下三角部分,因为被零化的位置不再需要)。
步骤6:算法结束
经过 \(n-2\) 步后,矩阵 \(A^{(n-2)}\) 就是一个三对角矩阵 \(T\)。整个变换可以表示为:
\[T = (P_{n-2} \cdots P_2 P_1) A (P_1 P_2 \cdots P_{n-2}) \]
记 \(Q = P_1 P_2 \cdots P_{n-2}\),则 \(T = Q^T A Q\)。
算法复杂度与数值稳定性
- 计算量:大约 \(\frac{4}{3} n^3\) 次浮点运算,比一般稠密矩阵的QR分解(约 \(\frac{8}{3} n^3\))少一半,因为利用了对称性。
- 数值稳定性:Householder反射是数值稳定的,能保证变换后的三对角矩阵 \(T\) 的特征值非常接近原始矩阵 \(A\) 的特征值(在舍入误差范围内)。
总结
通过逐步应用Householder反射,我们可以将任意实对称矩阵正交相似变换为三对角形式,从而为高效求解特征值问题铺平道路。这一过程是许多特征值算法(如QR迭代、分治法、二分法等)的关键预处理步骤,它既保持了对称性,又大幅减少了后续计算量。