I have a matrix object and want to find the eigenvector that corresponds to an eigenvalue of 1. How would I do that? I'm currently solving it with a good ole' for loop, but am wondering whether there are more elegant ways to do it
using MathNet.Numerics.LinearAlgebra;
using MathNet.Numerics.LinearAlgebra.Factorization;
public static Vector<double> FindRelevantEigenvector(Matrix<double> matrix)
{
Evd<double> eigen = matrix.Evd();
var eigenValues = eigen.EigenValues;
var relevantIndex = FindEigenValueOfOneIndex(eigenValues);
if (relevantIndex == eigenValue.Count) return null;
var eigenVectors = eigen.EigenVectors;
return eigenVectors.Row(relevantIndex);
}
private static int FindEigenValueOfOneIndex(Vector<Complex> eigenValues)
{
for (int index = 0; index < eigenValues.Count; index++)
{
if (eigenValues[index] == 1) return index;
}
return eigenValues.Count;
}