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 tridiagonal matrices. Module TriDiagFactExample Sub Main() Construct a tridiagonal matrix with random entries. Dim Rows As Integer = 5 Dim Cols As Integer = 5 Dim Rng As New RandGenUniform(-1, 1) Rng.Reset(&H124) Dim Data1 As New FloatComplexVector(Cols, Rng) Dim Data2 As New FloatComplexVector(Cols - 1, Rng) Dim Data3 As New FloatComplexVector(Cols - 1, Rng) Dim A As New FloatComplexTriDiagMatrix(Rows, Cols) A.Diagonal()(Slice.All) = Data1 A.Diagonal(1)(Slice.All) = Data2 A.Diagonal(-1)(Slice.All) = Data3 Console.WriteLine() Console.WriteLine("A =") Console.WriteLine(A.ToTabDelimited("F3")) A = (-0.497,0.332) (0.560,0.306) (0.000,0.000) (0.000,0.000) (0.000,0.000) (0.773,0.358) (-0.250,0.576) (0.220,-0.077) (0.000,0.000) (0.000,0.000) (0.000,0.000) (-0.863,0.203) (0.196,0.182) (-0.168,-0.259) (0.000,0.000) (0.000,0.000) (0.000,0.000) (-0.585,0.622) (-0.044,0.074) (-0.924,0.621) (0.000,0.000) (0.000,0.000) (0.000,0.000) (-0.705,0.124) (-0.325,-0.280) Construct a tridiagonal factorization class. Dim Fact As New FloatComplexTriDiagFact(A) Check to see if A is singular. Dim IsSingularString As String If Fact.IsSingular Then IsSingularString = "A is singular" Else IsSingularString = "A is NOT singular" End If Console.WriteLine() Console.WriteLine(IsSingularString) Retrieve information about the matrix A. Dim Det As FloatComplex = Fact.Determinant() In order to get condition number, factor with estimateCondition = True Fact.Factor(A, True) Dim RCond As Single = Fact.ConditionNumber() Dim AInv As FloatComplexMatrix = Fact.Inverse() Console.WriteLine() Console.Write("Determinant of A = " & Det.ToString()) Console.WriteLine() Console.Write("Reciprocal condition number = " & RCond) Console.WriteLine() Console.WriteLine() Console.WriteLine("A inverse =") Console.WriteLine(AInv.ToTabDelimited("F3")) Use the factorization to solve some linear systems Ax = y. Dim Y0 As New FloatComplexVector(Fact.Cols, Rng) Dim Y1 As New FloatComplexVector(Fact.Cols, Rng) Dim X0 As FloatComplexVector = Fact.Solve(Y0) Dim X1 As FloatComplexVector = Fact.Solve(Y1) Console.WriteLine() Console.Write("Solution to Ax = y0 is " & X0.ToString("G5")) Console.WriteLine() Console.Write("y0 - Ax0 = ") Console.WriteLine(FloatComplexVector.Subtract(Y0, MatrixFunctions.Product(A, X0)).ToString("G5")) Console.WriteLine() Console.Write("Solution to Ax = y1 is " & X1.ToString("G5")) Console.WriteLine() Console.Write("y1 - Ax1 = ") Console.WriteLine(FloatComplexVector.Subtract(Y1, MatrixFunctions.Product(A, X1)).ToString("G5")) You can also solve for multiple right-hand sides. Dim Y As New FloatComplexMatrix(Y1.Length, 2) Y.Col(0)(Slice.All) = Y0 Y.Col(1)(Slice.All) = Y1 Dim X As FloatComplexMatrix = 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("G7")) Factor a different matrix. Dim Z As New FloatComplex(1.23F, -0.76F) Dim B As FloatComplexTriDiagMatrix = Z * A Fact.Factor(B) X0 = Fact.Solve(Y0) Console.Write("Solution to Bx = y0 is " & X0.ToString("G5")) Console.WriteLine() Console.WriteLine() Console.WriteLine("Press Enter Key") Console.Read() End Sub End Module End Namespace← All NMath Code Examples