[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]