using System; using CenterSpace.NMath.Core; namespace CenterSpace.NMath.Examples.CSharp { /// <summary> /// A .NET example in C# demonstrating the features of the eigenvalue decomposition classes. /// </summary> class EigDecompExample { static void Main( string[] args ) { // A general m x n system with random entries. var rng = new RandGenUniform( -1, 1 ); rng.Reset( 0x75 ); int rows = 4; int cols = 4; var A = new FloatMatrix( rows, cols, rng ); // Construct an eigenvalue decomposition of A. var decomp = new FloatEigDecomp( A ); Console.WriteLine(); // Is it good? Console.WriteLine( "Good? " + decomp.IsGood ); // Look at the eigenvalues Console.WriteLine(); Console.WriteLine( "Eigenvalues = " + decomp.EigenValues ); // Look at the left eigenvectors Console.WriteLine(); Console.WriteLine( "Left eigenvectors = " ); Console.WriteLine( decomp.LeftEigenVectors.ToTabDelimited( "G3" ) ); // Look at the right eigenvectors Console.WriteLine( "Right eigenvectors = " ); Console.WriteLine( decomp.RightEigenVectors.ToTabDelimited( "G3" ) ); // The class FloatEigDecompServer allows more control over the computation. // Suppose that you are only interested in the singular values, not the // vectors. You can configure a DoubleComplexSVDecompServer object to // compute just the singular values. var eigServer = new FloatEigDecompServer(); eigServer.ComputeLeftVectors = false; eigServer.ComputeRightVectors = false; eigServer.Balance = BalanceOption.Permute; decomp = eigServer.Factor( A ); Console.WriteLine(); Console.WriteLine( "Number of left vectors computed: {0}", decomp.NumberOfLeftEigenVectors ); // 0 Console.WriteLine(); Console.WriteLine( "Number of right vectors computed: {0}", decomp.NumberOfRightEigenVectors ); // 0 // Is it good? Console.WriteLine(); Console.WriteLine( "Good? " + decomp.IsGood ); // Look at the eigenvalues Console.WriteLine(); Console.WriteLine( "Eigenvalues = " + decomp.EigenValues ); Console.WriteLine(); Console.WriteLine( "Press Enter Key" ); Console.Read(); } } }← All NMath Code Examples