QR 分解
QR 分解是对角化一般矩阵(包括对称矩阵和非对称矩阵)最高效、应用最广泛的方法之一。QR 算法通过迭代地把矩阵 分解为正交矩阵 与上三角矩阵 的乘积来工作。反复进行这种分解,并将矩阵重构为 ,矩阵就会收敛到对角或三角形式,从中即可提取本征值。本征矢则由各个 矩阵的累积乘积给出。
数学基础
对于矩阵 ,其 QR 分解为:
其中:
- 是正交矩阵(),
- 是上三角矩阵。
QR 算法迭代地应用这一分解,使 收敛到对角或三角形式:
- 从 开始。
- 对于每次迭代 :
- 计算 QR 分解:。
- 重构矩阵:。
- 重复直到 收敛为对角矩阵或三角矩阵。
的本征值位于最终矩阵 的对角线上,本征矢则由所有 矩阵的乘积给出。
算法
初始化:
- 从矩阵 开始。
QR 分解:
- 将 分解为 和 :
重构:
- 按如下方式重构矩阵 :
累积变换:
- 按如下方式更新本征矢矩阵 :
- 初始化 (单位矩阵)。
检查收敛:
- 重复上述过程,直到 足够接近对角或三角形式(即非对角元低于指定的容差)。
提取本征值和本征矢:
- 本征值是最终 的对角元。
- 本征矢是最终 的各列。
示例
作为示例,我们用单精度运算对一个实对称矩阵进行 QR 分解。
第 1 步:初始化
从矩阵 开始:
第 2 步:第一次 QR 迭代
第 2.1 步:计算 和
用 Gram-Schmidt 过程对 进行 QR 分解。
的第一列: 将 的第一列归一化:
因此:
的第二列: 将 的第二列相对于 正交化:
计算 :
将 归一化:
因此:
的第三列: 将 的第三列相对于 和 正交化:
计算 :
将 归一化:
因此:
构造 和 :
第 2.2 步:更新
计算 :
第 3 步:第二次 QR 迭代
第 3.1 步:计算 和
对更新后的 进行 QR 分解。
的第一列: 将 的第一列归一化:
因此:
的第二列: 将 的第二列相对于 正交化:
计算 :
将 归一化:
因此:
的第三列: 将 的第三列相对于 和 正交化:
计算 :
将 归一化:
因此:
构造 和 :
第 3.2 步:更新
计算 :
第 4 步:检查收敛
检查所有非对角元是否都低于容差 。在本例中,非对角元已经为零,因此矩阵 已被对角化。
收敛后,对角化后的矩阵 为:
最终结果
用单精度 QR 分解计算得到的 的本征值为:
要点
单精度的 QR 分解方法得到的本征值接近真实值,但可能因舍入误差而略有偏差。若需要更高的精度,建议使用双精度运算,或采用更严格的收敛判据进行更多次迭代。
优点
- 高效:QR 算法对大矩阵非常高效。
- 通用:它既适用于对称矩阵,也适用于非对称矩阵。
- 稳定:该算法数值稳定且稳健。
局限性
- 计算代价:对于非常大的矩阵,QR 分解这一步的计算代价可能很高。
- 非对称矩阵收敛慢:对于非对称矩阵,该算法可能需要很多次迭代。