实对称矩阵特征值求解算法:Jacobi行循环法

时间:2025-03-11 13:20:42

做过程故障诊断,需要计算含小于100个变量的数据的主成分,下面这个代码还是合适的,特此备份。经测试,当矩阵A阶数n=100时,耗费时间在0.2s左右。

 

int jacobi_loop(double** A, double** V, double* eigsv, double epsl, int maxt, int n){
 /************************************************************************
 * 作者:     taoshaohui from Qingdao University of Science & Technology, 2010/08/17
 * 函数名称: jacobi_loop                                                        
 * 函数功能: Jacobi行循环法求取n阶实对称矩阵A的所有特征值和特征向量V(:,i) 
 * 输入参数: 

      A:    n阶实对称矩阵, 算法结束后其第j个对角线元素为A的第j个特征值

      n:    A的阶数
      V:    n阶单位矩阵, 算法结束后其第j列存储对应第j个特征值的特征向量
     eigsv:按从大到小顺序排列的特征值向量
     epsl: 迭代收敛标准, 当A所有非对角线元素绝对值皆小于epsl时算法成功
     maxt: 算法最大迭代次数

 * 输出参数: V, eigsv
 * 返回值  : 整数success, 0迭代未收敛/1迭代成功
 * 注意    : 本程序中,2×2Givens旋转矩阵为: [cn, sn; -sn, cn]
 * 文献    : 《矩阵计算》, G. H. Golub & C. F. Van Loan, 2002, 袁亚湘 译, P 494.