Skip to content

Instantly share code, notes, and snippets.

@rms80
Created May 23, 2017 19:26
Show Gist options
  • Save rms80/d5a654be7a98af7e4370c50f545c63e7 to your computer and use it in GitHub Desktop.
Save rms80/d5a654be7a98af7e4370c50f545c63e7 to your computer and use it in GitHub Desktop.
eigensolver test matrices
// make wilkinson matrix
int N = 7;
double[] matrix = new double[] {
3, 1, 0, 0, 0, 0, 0,
1, 2, 1, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0,
0, 0, 1, 0, 1, 0, 0,
0, 0, 0, 1, 1, 1, 0,
0, 0, 0, 0, 1, 2, 1,
0, 0, 0, 0, 0, 1, 3
};
// make lehmer matrix
// eigenvalues: 0.2078, 0.4078, 0.8482, 2.5362
//int N = 4;
//double[] matrix = new double[] {
// 1.0000, 0.5000, 0.3333, 0.2500,
// 0.5000, 1.0000, 0.6667, 0.5000,
// 0.3333, 0.6667, 1.0000, 0.7500,
// 0.2500, 0.5000, 0.7500, 1.0000
//};
// make rosser matrix http://blogs.mathworks.com/cleve/2014/01/06/the-rosser-matrix/
// eigenvalues: 1.0e+03 *
//-1.020049018429998
// 0.000000000000000
// 0.000098048640722
// 1.000000000000000
// 1.000000000000000
// 1.019901951359278
// 1.020000000000000
// 1.020049018429997
//int N = 8;
//double[] matrix = new double[] {
// 611, 196, -192, 407, -8, -52, -49, 29,
// 196, 899, 113, -192, -71, -43, -8, -44,
// -192, 113, 899, 196, 61, 49, 8, 52,
// 407, -192, 196, 611, 8, 44, 59, -23,
// -8, -71, 61, 8, 411, -599, 208, 208,
// -52, -43, 49, 44, -599, 411, 208, 208,
// -49, -8, 8 , 59 , 208, 208, 99, -911,
// 29, -44, 52, -23, 208, 208, -911, 99 };
SymmetricEigenSolver solver = new SymmetricEigenSolver(N, 10000);
solver.Solve(matrix, SymmetricEigenSolver.SortType.Increasing);
double[] eigenvalues = solver.GetEigenvalues();
double[] eigenvectors = solver.GetEigenvectors();
System.Console.WriteLine("Matrix: ");
for ( int r = 0; r < N; ++r ) {
System.Console.Write("[{0}]: ", r);
for (int c = 0; c < N; ++c)
System.Console.Write("{0} ", matrix[r * N + c]);
System.Console.WriteLine();
}
System.Console.WriteLine("Eigenvalues: ");
for ( int r = 0; r < N; ++r )
System.Console.Write("{0:F5} ", eigenvalues[r]);
System.Console.WriteLine();
System.Console.WriteLine("Eigenvectors: ");
for ( int r = 0; r < N; ++r ) {
System.Console.Write("[{0}]: ", r);
for (int c = 0; c < N; ++c)
System.Console.Write("{0:F5} ", eigenvectors[r * N + c]);
System.Console.WriteLine();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment