Imports System Imports CenterSpace.NMath.Core Namespace CenterSpace.NMath.Examples.VisualBasic A .NET example in Visual Basic demonstrating the features of the symmetric matrix classes. Module SymmetricMatrixExample Sub Main() Dim Order As Integer = 6 Set up a symmetric matrix S as the transpose product of a general matrix with itself (which is symmetric). Dim Rng As New RandGenUniform(-2, 2) Rng.Reset(&H124) Dim A As New FloatMatrix(Order, Order, Rng) Dim S As New FloatSymmetricMatrix(NMathFunctions.TransposeProduct(A, A)) Console.WriteLine() Console.WriteLine("S =") Console.WriteLine(S.ToTabDelimited("G3")) S = 3.3 0.529 -1.24 0.262 2.76 1.44 0.529 2.39 -0.864 0.315 1.59 -0.543 -1.24 -0.864 5.55 4.65 -2.57 -0.0683 0.262 0.315 4.65 8.96 -4.57 -1.7 2.76 1.59 -2.57 -4.57 11.3 5.73 1.44 -0.543 -0.0683 -1.7 5.73 4.4 Indexer accessor works just like it does for general matrices. Console.WriteLine("S[2,2] = " & S(2, 2)) Console.WriteLine("S[3,0] = " & S(3, 0)) You can set the values of elements in a symmetric matrix using the indexer. Note that setting the element in row i and column j implicitly sets the element in column j and row i to the same value S(2, 1) = 100 Console.WriteLine("S[2,1] = " & S(2, 1)) Console.WriteLine("S[1,2] = " & S(1, 2)) Console.WriteLine() Scalar addition/subtractions/multiplication and matrix addition/subtraction are supported. Dim Scalar As Single = -0.123F Dim C2 As FloatSymmetricMatrix = Scalar * S Scalar = 3.0 Dim C As FloatSymmetricMatrix = Scalar - S Dim D As FloatSymmetricMatrix = C2 + S Console.WriteLine("D =") Console.WriteLine(D.ToTabDelimited("G3")) Matrix/vector products too. Rng = New RandGenUniform(-1, 1) Rng.Reset(&H124) Dim X As FloatVector = New FloatVector(S.Cols, Rng) vector of random deviates Dim Y As FloatVector = MatrixFunctions.Product(S, X) Console.WriteLine("Sx = {0}", Y.ToString()) You can transform the elements of a symmetric matrix object by using the Transform() method. C2.Transform(NMathFunctions.FloatPowFunc, 2) Square every element of C2 Console.WriteLine() Console.WriteLine("C2^2 =") Console.WriteLine(C2.ToTabDelimited("G9")) You can also solve linear systems. Dim X2 As FloatVector = MatrixFunctions.Solve(S, Y) x and x2 should be about the same. Lets look at the l2 norm of their difference. Dim Residual As FloatVector = FloatVector.Subtract(X, X2) Dim ResidualL2Norm As Single = Math.Sqrt(NMathFunctions.Dot(Residual, Residual)) Console.Write("||x - x2|| = ") Console.WriteLine(ResidualL2Norm) Compute condition number. Dim RCond As Single = MatrixFunctions.ConditionNumber(S) 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