Imports System Imports CenterSpace.NMath.Core Namespace CenterSpace.NMath.Examples.VisualBasic A .NET example in Visual Basic demonstrating the features of the factorization classes for symmetric matrices. Module SymFactExample Sub Main() Construct a symmetric matrix as the product of the transpose of a matrix with itself. Dim Rows As Integer = 5 Dim Cols As Integer = 5 Dim Rng As New RandGenUniform(-1, 1) Rng.Reset(&H124) Dim A As New DoubleMatrix(Rows, Cols, Rng) Dim ATA As DoubleMatrix = NMathFunctions.TransposeProduct(A, A) Dim S As New DoubleSymmetricMatrix(ATA) Console.WriteLine() Console.WriteLine("S =") Console.WriteLine(S.ToTabDelimited("G3")) S = 0.791 -0.366 -0.31 0.183 0.863 -0.366 0.224 0.177 -0.312 -0.214 -0.31 0.177 0.49 -0.411 -0.48 0.183 -0.312 -0.411 2.03 -0.0979 0.863 -0.214 -0.48 -0.0979 2.01 Construct a symmetric factorization class. Dim Fact As New DoubleSymFact(S) Check to see if S is singular. Dim IsSingularString As String If Fact.IsSingular Then IsSingularString = "S is singular" Else IsSingularString = "S is NOT singular" End If Console.WriteLine(IsSingularString) Retrieve information about the matrix S. Dim Det As Double = Fact.Determinant() In order to get condition number, factor with estimateCondition = True Fact.Factor(S, True) Dim RCond As Double = Fact.ConditionNumber() Dim SInv As DoubleSymmetricMatrix = Fact.Inverse() Console.WriteLine() Console.WriteLine("Determinant of S = " & Det) Console.WriteLine() Console.WriteLine("Reciprocal condition number = " & RCond) Console.WriteLine() Console.WriteLine("S inverse =") Console.WriteLine(SInv.ToTabDelimited("G3")) Use the factorization to solve some linear systems Ax = y. Dim Y0 As New DoubleVector(Fact.Cols, Rng) Dim Y1 As New DoubleVector(Fact.Cols, Rng) Dim X0 As DoubleVector = Fact.Solve(Y0) Dim X1 As DoubleVector = Fact.Solve(Y1) Console.WriteLine("Solution to Ax = y0 is {0}", X0.ToString("G5")) Console.WriteLine() Console.WriteLine("y0 - Ax0 = {0}", (Y0 - MatrixFunctions.Product(S, X0)).ToString("G5")) Console.WriteLine() Console.WriteLine("Solution to Ax = y1 is {0}", X1.ToString("G5")) Console.WriteLine() Console.WriteLine("y1 - Ax1 = {0}", (Y1 - MatrixFunctions.Product(S, X1)).ToString("G5")) You can also solve for multiple right-hand sides. Dim Y As New DoubleMatrix(Y1.Length, 2) Y.Col(0)(Slice.All) = Y0 Y.Col(1)(Slice.All) = Y1 Dim X As DoubleMatrix = Fact.Solve(Y) The first column of X should be x0 the second column should be x1. Console.WriteLine() Console.WriteLine("X =") Console.WriteLine(X.ToTabDelimited("G3")) Factor a different matrix. Dim B As DoubleSymmetricMatrix = DoubleSymmetricMatrix.Multiply(1.2, S) Fact.Factor(B) X0 = Fact.Solve(Y0) Console.WriteLine("Solution to Bx = y0 is {0}", X0.ToString("G5")) Console.WriteLine() Console.WriteLine("Press Enter Key") Console.Read() End Sub End Module End Namespace← All NMath Code Examples