Imports System Imports CenterSpace.NMath.Core Namespace CenterSpace.NMath.Examples.VisualBasic A .NET example in Visual Basic demonstrating the features of the tridiagonal matrix classes. Module TridiagonalMatrixExample Sub Main() Set up the parameters that describe the shape of a tridiagonal matrix. Dim Rows As Integer = 8 Dim Cols As Integer = 8 Set up a tridiagonal matrix B by setting all the diagonals within the matrix bandwidth. Dim B As New FloatComplexTriDiagMatrix(Rows, Cols) Dim Diagonal As FloatComplexVector Dim I As Integer For I = -1 To 1 Diagonal = B.Diagonal(I) Diagonal.Set(Slice.All, New FloatComplex(I + 2)) Next Console.WriteLine() Console.WriteLine("B = ") Console.WriteLine(B.ToTabDelimited("G3")) B = (2,0) (3,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (1,0) (2,0) (3,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (1,0) (2,0) (3,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (1,0) (2,0) (3,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (1,0) (2,0) (3,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (1,0) (2,0) (3,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (1,0) (2,0) (3,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (1,0) (2,0) Indexer accessor works just like it does for general matrices. Console.WriteLine("B[2,2] = " & B(2, 2).ToString()) Console.WriteLine("B[7,0] = " & B(7, 0).ToString()) You can set the values of elements in the main, super, and sub diagonals of a tridiagonal matrix using the indexer. B(2, 1) = New FloatComplex(-100, 99) Console.Write("B[2,1] = ") Console.WriteLine(B(2, 1)) But setting an element that would destroy the tridiagonal structure of the matrix raises a NonModifiableElementException exception. Try B(7, 0) = New FloatComplex(21) Catch E As NonModifiableElementException Console.WriteLine() Console.Write("NonModifiableElementException: ") Console.WriteLine(E.Message) End Try Scalar addition/subtractions/multiplication and matrix addition/subtraction are supported. Dim S As New FloatComplex(-0.123F) Dim T As New FloatComplex(3) Dim C2 As FloatComplexTriDiagMatrix = FloatComplexTriDiagMatrix.Multiply(S, B) Dim C As FloatComplexTriDiagMatrix = FloatComplexTriDiagMatrix.Subtract(T, B) Dim D As FloatComplexTriDiagMatrix = FloatComplexTriDiagMatrix.Add(C2, B) Console.WriteLine() Console.WriteLine("D = ") Console.WriteLine(D.ToTabDelimited("F2")) Matrix/vector products too. Dim Rng As New RandGenUniform(-1, 1) Rng.Reset(&H124) Dim X As New FloatComplexVector(B.Cols, Rng) vector of random deviates Dim Y As FloatComplexVector = MatrixFunctions.Product(B, X) Console.Write("Bx = ") Console.WriteLine(Y.ToString("G3")) You can transform the non-zero elements of a banded matrix object by using the Transform() method on its data vector. T = New FloatComplex(2) C2.DataVector.Transform(NMathFunctions.FloatComplexPowFunc, T) Square every element of C2 Console.WriteLine() Console.WriteLine("C2^2 =") Console.WriteLine(C2.ToTabDelimited("F2")) You can also solve linear systems. Dim X2 As FloatComplexVector = MatrixFunctions.Solve(B, Y) x and x2 should be about the same. Lets look at the l2 norm of their difference. Dim Residual As FloatComplexVector = X - X2 Dim ResidualL2Norm As Single = Math.Sqrt(NMathFunctions.ConjDot(Residual, Residual).Real) Console.Write("||x - x2|| = ") Console.WriteLine(ResidualL2Norm) Compute condition number. Dim RCond As Single = MatrixFunctions.ConditionNumber(B) Console.WriteLine() Console.Write("Reciprocal condition number = ") Console.WriteLine(RCond) Console.WriteLine() Console.WriteLine("Press Enter Key") Console.Read() End Sub End Module End Namespace← All NMath Code Examples