← All NMath Code Examples
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
Hermitian positive definite tridiagonal matrices.
Module HermPDTriDiagFactExample
Sub Main()
Construct a positive definite tridiagonal matrix.
Dim Rows As Integer = 5
Dim Cols As Integer = 5
Dim Two As New DoubleComplex(2, 0)
Dim NegOne As New DoubleComplex(-1, 0)
Dim Data1 As New DoubleComplexVector(Cols, Two)
Dim Data2 As New DoubleComplexVector(Cols - 1, NegOne)
Dim A As New DoubleComplexTriDiagMatrix(Rows, Cols)
A.Diagonal()(Slice.All) = Data1
A.Diagonal(1)(Slice.All) = Data2
A.Diagonal(-1)(Slice.All) = Data2
Console.WriteLine()
Console.WriteLine("A = ")
Console.WriteLine(A.ToTabDelimited("G3"))
A = 5x5 [ (2,0) (-1,0) (0,0) (0,0) (0,0)
(-1,0) (2,0) (-1,0) (0,0) (0,0)
(0,0) (-1,0) (2,0) (-1,0) (0,0)
(0,0) (0,0) (-1,0) (2,0) (-1,0)
(0,0) ( 0,0) (0,0) (-1,0) (2,0) ]
Construct a positive definite tridiagonal factorization class.
Dim Fact As New DoubleHermPDTriDiagFact(A)
Check to see if A is positive definite.
Dim IsPDString As String
If Fact.IsPositiveDefinite Then
IsPDString = "A is positive definite"
Else
IsPDString = "A is NOT positive definite"
End If
Console.WriteLine(IsPDString)
Retrieve information about the matrix A.
Dim Det As DoubleComplex = Fact.Determinant()
In order to get condition number, factor with estimateCondition = True
Fact.Factor(A, True)
Dim RCond As Double = Fact.ConditionNumber()
Dim AInv As DoubleComplexMatrix = Fact.Inverse()
Console.WriteLine()
Console.Write("Determinant of A = ")
Console.WriteLine(Det)
Console.WriteLine()
Console.Write("Reciprocal condition number = ")
Console.WriteLine(RCond)
Console.WriteLine()
Console.WriteLine("A inverse = ")
Console.WriteLine(AInv.ToTabDelimited("F3"))
Use the factorization to solve some linear systems Ax = y.
Dim Rng As New RandGenUniform(-1, 1)
Rng.Reset(&H124)
Dim Y0 As New DoubleComplexVector(Fact.Cols, Rng)
Dim Y1 As New DoubleComplexVector(Fact.Cols, Rng)
Dim X0 As DoubleComplexVector = Fact.Solve(Y0)
Dim X1 As DoubleComplexVector = Fact.Solve(Y1)
Console.Write("Solution to Ax = y0 is ")
Console.WriteLine(X0.ToString("G3"))
Console.WriteLine()
Console.Write("y0 - Ax0 = ")
Console.WriteLine((Y0 - MatrixFunctions.Product(A, X0)).ToString("G3"))
Console.WriteLine()
Console.Write("Solution to Ax = y1 is ")
Console.WriteLine(X1.ToString("G3"))
Console.WriteLine()
Console.Write("y1 - Ax1 = ")
Console.WriteLine((Y1 - MatrixFunctions.Product(A, X1)).ToString("G3"))
You can also solve for multiple right-hand sides.
Dim Y As New DoubleComplexMatrix(Y1.Length, 2)
Y.Col(0)(Slice.All) = Y0
Y.Col(1)(Slice.All) = Y1
Dim X As DoubleComplexMatrix = 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 DoubleComplexTriDiagMatrix = A + A
Fact.Factor(B)
X0 = Fact.Solve(Y0)
Console.Write("Solution to Bx = y0 is ")
Console.WriteLine(X0.ToString())
Console.WriteLine()
Console.Write("Press Enter Key")
Console.Read()
End Sub
End Module
End Namespace
← All NMath Code Examples