#light namespace CenterSpace.NMath.Examples.FSharp open System open CenterSpace.NMath.Core /// <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 = new RandGenUniform(-1.0, 1.0) rng.Reset(0x75) |> ignore let rows = 4 let cols = 4 let A = new FloatMatrix(rows, cols, rng) // Construct an eigenvalue decomposition of A. let mutable decomp = new FloatEigDecomp(A) // Is it good printfn "" printfn "Good? %A" decomp.IsGood // Look at the eigenvalues printfn "" printfn "Eigenvalues = %s" (decomp.EigenValues.ToString()) // Look at the left eigenvectors printfn "" printfn "Left eigenvectors = %s" (decomp.LeftEigenVectors.ToString()) // Look at the right eigenvectors printfn "" printfn "Right eigenvectors = %s" (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) printfn "" printfn "Number of left vectors computed: %A" decomp.NumberOfLeftEigenVectors // 0 printfn "" printfn "Number of right vectors computed: %A" decomp.NumberOfRightEigenVectors // 0 // Is it good? printfn "" printfn "Good? %A" decomp.IsGood // Look at the eigenvalues printfn "" printfn "Eigenvalues = %s" (decomp.EigenValues.ToString()) printfn "" printfn "Press Enter Key" Console.Read() |> ignore← All NMath Code Examples