F# Eig Decomp Example

[TOC]

#light

namespace CenterSpace.NMath.Matrix.Examples.FSharp

open System

open CenterSpace.NMath.Core
open CenterSpace.NMath.Matrix

  /// <summary>
  /// A .NET example in C# demonstrating the features of the eigenvalue decomposition classes.
  /// </summary>
module EigDecompExample =

  // A general m x n system with random entries.
  let rng : RandGenUniform = new RandGenUniform(-1.0, 1.0)
  rng.Reset(0x75) |> ignore
  let rows = 4
  let cols = 4
  let A : FloatMatrix = new FloatMatrix(rows, cols, rng)

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

  // Is it good?
  Console.WriteLine()
  Console.WriteLine("Good? " + decomp.IsGood.ToString())

  // Look at the eigenvalues
  Console.WriteLine()
  Console.WriteLine("Eigenvalues = " + decomp.EigenValues.ToString())

  // Look at the left eigenvectors
  Console.WriteLine()
  Console.WriteLine("Left eigenvectors = " + decomp.LeftEigenVectors.ToString())

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

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

  let 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.ToString())

  // Look at the eigenvalues
  Console.WriteLine()
  Console.WriteLine("Eigenvalues = " + decomp.EigenValues.ToString())

  Console.WriteLine()
  Console.WriteLine("Press Enter Key")
  Console.Read() |> ignore



[TOC]