做过程故障诊断,需要计算含小于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.