mkl中dgeev求解矩阵的特征向量和特征值

mkl中的dgeev函数用来求解普通实矩阵左(右)特征向量和特征值。注意:求解的特征向量是以行存储的,求解的特征值是按从大到小的顺序排列的。每一个特征值和相应行的特征向量相对应。

下面是一个C++语言的例子函数。

JOBL='N'表示不求解左特征向量,如果JOBL='V'表示求解左特征向量

JOBR='V'表示求解右特征向量,如果JOBR='N'表示不求解右特征向量

matrix是需要求解的矩阵

matrix_rank是求解矩阵的维数

wr用来存储特征值的实部

wi用来存储特征值的虚部

vl用来存储求解后的左特征向量

vr用来存储求解后的右特征向量

work是求解过程中需要的工作空间,一般大小为4倍的矩阵维数大小

info是标识,求解成功后返回值为0.

 

void PCA::ComputeMatrixEigenVectors(double *matrix,int matrix_rank) { char JOBL='N'; char JOBR='V'; int n=matrix_rank; int lda=matrix_rank; int ldvl=matrix_rank; int ldvr=matrix_rank; double *wr=new double[n]; double *wi=new double[n]; double *vl=new double[ldvl*n]; double *vr=new double[ldvr*n]; int lwork=4*n; int info=0; double *work=new double[lwork]; dgeev(&JOBL,&JOBR,&n,matrix,&lda,wr,wi,vl,&ldvl,vr,&ldvr,work,&lwork,&info); if(info>0) { cout<<"The algorithm failed to compute eigenvalues."<

你可能感兴趣的:(mkl中dgeev求解矩阵的特征向量和特征值)