VB LU Factorization Example

← All NMath Code Examples

 

Imports System

Imports CenterSpace.NMath.Core
Imports Range = CenterSpace.NMath.Core.Range

Namespace CenterSpace.NMath.Examples.VisualBasic

  A .NET example in Visual Basic showing how to use the LU factorization class to solve linear systems,
  and to compute matrix inverses, condition numbers and determinants.
  Module LUFactorizationExampple

    Sub Main()

      Dim A As New DoubleMatrix("3x3 [2 1 1  4 1 0 -2 2 1]")
      Dim lu As New DoubleLUFact(A)

      Console.WriteLine()

      Check to see if the input matrix is singular.
      If (lu.IsSingular) Then
        Console.WriteLine("Sorry, A is singular.")
        Return
      End If

      A is not singular, so we can look at the LU components.
      Console.WriteLine("L...")
      Console.WriteLine(lu.L.ToTabDelimited())

      Console.WriteLine("U...")
      Console.WriteLine(lu.U.ToTabDelimited())

      And the permutation matrix P.
      Console.WriteLine("P...")
      Console.WriteLine(lu.P.ToTabDelimited())

      We can also compute the determinant and condition number.
      Console.WriteLine("Determinant of A = {0}", lu.Determinant())

      We can choose to estimate the condition number (quick), or
      compute it directly (accurate). For small matrices these
      are usually the same.
      Dim estCond As Double = lu.ConditionNumber(NormType.InfinityNorm, True)
      Dim computedCond As Double = lu.ConditionNumber(NormType.OneNorm, False)
      Console.WriteLine("Estimated condition number, infinity-norm = {0}", estCond.ToString("F3"))
      Console.WriteLine("Computed condition number, 1-norm = {0}", computedCond.ToString("F3"))

      Finally, we can compute the inverse of A.
      Console.WriteLine()
      Console.WriteLine("A inverse =")
      Console.WriteLine(lu.Inverse().ToTabDelimited())
      Console.WriteLine()

      We can use the LU factorization to solve for one right-hand side.
      Dim v As New DoubleVector("[8 11 3]")
      Dim u As DoubleVector = lu.Solve(v)
      Console.WriteLine("The solution, u, Au=v is...")
      Console.WriteLine(u)
      Console.WriteLine()

      Or we can solve for multiple right hand sides.
      Dim B As New DoubleMatrix(3, 3)

      Set all the columns of B to be the vector v.
      Dim i As Integer
      For i = 0 To 2
        B.Col(i)(Range.All) = v
      Next

      Now solve for AX=B. The columns of A should have the same values as
      the vector u from above.
      Dim X As DoubleMatrix = lu.Solve(B)
      Console.WriteLine("The solution, X, to AX=B is...")
      Console.WriteLine(X.ToTabDelimited())

      Console.WriteLine()
      Console.WriteLine("Press Enter Key")
      Console.Read()

    End Sub

  End Module

End Namespace

← All NMath Code Examples
Top