我使用lapack/blas
下载了一些开源,我希望将其更改为基于Eigen
的自动SIMD
代码生成源。
Eigen
库中的任何功能是否与dsyev
中的LAPACK
相同。
dsyve
为了多种目的返回info
值。
但据我所知,eigensolver
库中的Eigen
会返回eigenvalue
或eigenvector
。
在Eigen
库中是否有我想要的功能。
答案 0 :(得分:2)
我认为您想要的是.info()
,以及SelfAdjointEigenSolver
提供的其他API。
tutorial page也说明了如何使用它。
#include <iostream>
#include <Eigen/Dense>
using namespace std;
using namespace Eigen;
int main()
{
Matrix2f A;
A << 1, 2, 2, 3;
cout << "Here is the matrix A:\n" << A << endl;
SelfAdjointEigenSolver<Matrix2f> eigensolver(A);
if (eigensolver.info() != Success) abort();
cout << "The eigenvalues of A are:\n" << eigensolver.eigenvalues() << endl;
cout << "Here's a matrix whose columns are eigenvectors of A \n"
<< "corresponding to these eigenvalues:\n"
<< eigensolver.eigenvectors() << endl;
}
如果您真的想知道dsyev()
报告的NoConvergence
的详细信息,则可能必须使用低级LAPACK API。
此函数返回值信息。
如果info = 0,则执行成功。
如果info = -i,则第i个参数具有非法值。
如果info = i,则算法无法收敛;我表示 中间三对角形式的元素数量没有 收敛到零。