Jacobi 旋转
Jacobi 旋转方法是一种用于对角化对称矩阵的经典迭代算法。它特别适合中小尺寸的矩阵,并以简单、稳健著称。该方法通过一系列正交变换(旋转)系统地消去非对角元,最终收敛到一个对角矩阵,其对角元即为原矩阵的本征值。
Jacobi 方法每次针对矩阵中最大的非对角元,施加一次旋转将其消为零。这一过程反复迭代,直到所有非对角元都足够小,从而得到一个对角矩阵。原矩阵的本征值就位于对角线上,而本征矢则由过程中施加的所有旋转矩阵的乘积给出。
原理
对于对称矩阵 ,目标是找到一个正交矩阵 ,使得:
其中 是由 的本征值构成的对角矩阵, 的各列是相应的本征矢。
Jacobi 方法通过对 施加一系列正交变换(旋转)来实现这一目标。每次旋转针对一个特定的非对角元 ,并将其消为零。
旋转矩阵
Jacobi 旋转矩阵 是一个正交矩阵,它与单位矩阵只有四个矩阵元不同:
其中, 和 位于第 、 行与第 、 列的交点处。选取角度 使非对角元 被消为零。
算法
找出最大的非对角元:
- 在矩阵 中找出(绝对值)最大的非对角元 。
计算旋转角 :
- 选取角度 使其满足:
- 由此计算 和 。
构造旋转矩阵 :
- 用 和 构造旋转矩阵 。
施加旋转:
- 按如下方式更新矩阵 :
- 该变换将 和 消为零。
累积变换:
- 按如下方式更新本征矢矩阵 :
- 这样累积各次旋转,形成最终的本征矢矩阵。
重复直至收敛:
- 重复上述过程,直到所有非对角元都小于指定的容差 。
示例
考虑对称矩阵 :
第 1 步:初始化
从矩阵 和一个用于累积旋转的单位矩阵 开始:
第 2 步:找出最大的非对角元
中最大的非对角元是 。
第 3 步:计算旋转参数
对于 平面内的旋转:
计算角度 :
代入数值:
使用单精度运算:
计算 和 :
第 4 步:施加旋转
构造旋转矩阵 :
更新 和 :
旋转之后:
第 5 步:对其他非对角元重复上述过程
对下一个最大的非对角元重复这一过程,直到所有非对角元都足够小(例如低于容差 )。
第 6 步:最终的对角化矩阵
收敛后,对角化后的矩阵 为:
相应的本征矢矩阵 为:
优点
- 简单:算法易于实现。
- 稳健:对于对称矩阵保证收敛。
- 精确:能给出高精度的本征值和本征矢。
局限性
- 收敛慢:对于大矩阵,该方法需要很多次迭代。
- 大矩阵效率低:不适用于非常大的矩阵或稀疏矩阵。
- 计算代价:每次旋转都需要更新整个矩阵,对于大体系代价可能很高。