12#include <Eigen/Eigenvalues>
20 int f_v = (verbose_level >= 1);
23 cout <<
"orbiter_eigenvalues" << endl;
28 MatrixXd X = MatrixXd::Random(5,5);
29 MatrixXd A = X + X.transpose();
30 cout <<
"Here is a random symmetric 5x5 matrix, A:" << endl << A << endl << endl;
32 SelfAdjointEigenSolver<MatrixXd> es(A);
33 cout <<
"The eigenvalues of A are:" << endl << es.eigenvalues() << endl;
34 cout <<
"The matrix of eigenvectors, V, is:" << endl << es.eigenvectors() << endl << endl;
36 double lambda = es.eigenvalues()[0];
37 cout <<
"Consider the first eigenvalue, lambda = " << lambda << endl;
38 VectorXd v = es.eigenvectors().col(0);
39 cout <<
"If v is the corresponding eigenvector, then lambda * v = " << endl << lambda * v << endl;
40 cout <<
"... and A * v = " << endl << A * v << endl << endl;
42 MatrixXd D = es.eigenvalues().asDiagonal();
43 MatrixXd V = es.eigenvectors();
44 cout <<
"Finally, V * D * V^(-1) = " << endl << V * D * V.inverse() << endl;
49 MatrixXd X(nb_points, nb_points);
51 for (i = 0; i < nb_points; i++) {
54 for (i = 0; i < nb_points; i++) {
55 for (j = 0; j < nb_points; j++) {
56 X(i, j) = Mtx[i * nb_points + j];
59 SelfAdjointEigenSolver<MatrixXd> es(X);
61 cout <<
"The eigenvalues of X are:" << endl << es.eigenvalues() << endl;
62 cout <<
"The matrix of eigenvectors, V, is:" << endl << es.eigenvectors() << endl << endl;
65 for (i = 0; i < nb_points; i++) {
66 E[i] = es.eigenvalues()[i];
72 cout <<
"orbiter_eigenvalues done" << endl;
void orbiter_eigenvalues(int *Mtx, int nb_points, double *E, int verbose_level)