C# Eig Decomp Example

[TOC]

using System;

using CenterSpace.NMath.Core;
using CenterSpace.NMath.Matrix;

namespace CenterSpace.NMath.Matrix.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.
      RandGenUniform rng = new RandGenUniform(-1, 1);
      rng.Reset(0x75);
      int rows = 4;
      int cols = 4;
      FloatMatrix A = new FloatMatrix(rows, cols, rng);

      // Construct an eigenvalue decomposition of A.
      FloatEigDecomp decomp = new FloatEigDecomp(A);

      // Is it good?
      Console.WriteLine();
      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 = " + decomp.LeftEigenVectors);

      // Look at the right eigenvectors
      Console.WriteLine();
      Console.WriteLine("Right eigenvectors = " + decomp.RightEigenVectors);

      // 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.

      FloatEigDecompServer 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();
    }
  }
}

[TOC]