New Version 7.0!

Try it for free with our fully functional 60-day trial version.

Download now!

Get from Nuget

QuickStart Samples

Triangular Matrices QuickStart Sample (Visual Basic)

Illustrates how to work efficiently with upper or lower triangular or trapezoidal matrices in Visual Basic.

C# code F# code IronPython code Back to QuickStart Samples

Option Infer On

' The TriangularMatrix class resides in the Extreme.Mathematics.LinearAlgebra 
' namespace.
Imports Extreme.Mathematics
Imports Extreme.Mathematics.LinearAlgebra

Namespace Extreme.Numerics.QuickStart.VB
    ' Illustrates the use of the TriangularMatrix class in the 
    ' Extreme.Mathematics.LinearAlgebra namespace of the Extreme Optimization
    ' Numerical Libraries for .NET.
    Module TriangularMatrices

        Sub Main()
            ' Triangular matrices are matrices whose elements
            ' above or below the diagonal are all zero. The
            ' former is called lower triangular, the latter
            ' lower triangular. In addition, triangular matrices
            ' can have all 1's on the diagonal.

            '
            ' Constructing triangular matrices
            '

            ' Constructing triangular matrices is similar to
            ' constructing general matrices. See the
            ' BasicMatrices QuickStart samples for a more
            ' complete discussion.
            '
            ' All constructors take a MatrixTriangle
            ' value as their first parameter. This indicates
            ' whether an upper or lower triangular matrix 
            ' should be created. The following creates a
            ' 5x5 lower triangular matrix:
            Dim t1 = Matrix.CreateLowerTriangular(Of Double)(5, 5)
            ' You can also specify whether the diagonal 
            ' consists of all 1's using a unitDiagonal parameter:
            Dim t2 = Matrix.CreateLowerTriangular(Of Double)(
                5, 5, MatrixDiagonal.UnitDiagonal)
            ' Triangular matrices access and modify only the
            ' elements that are non-zero. If the diagonal
            ' mode is UnitDiagonal, the diagonal elements
            ' are not used, since they are all equal to 1.
            Dim components As Double() = New Double() _
            {
                11, 12, 13, 14, 15,
                21, 22, 23, 24, 25,
                31, 32, 33, 34, 35,
                41, 42, 43, 44, 45,
                51, 52, 53, 54, 55}
            ' The following creates a matrix using the
            ' upper triangular part of the above.
            Dim t3 = Matrix.CreateUpperTriangular(
                5, 5,
                components, MatrixElementOrder.RowMajor)
            Console.WriteLine("t3 = {0:F4}", t3)
            ' Same as above, but unit diagonal:
            Dim t4 = Matrix.CreateUpperTriangular(
                5, 5, components,
                MatrixDiagonal.UnitDiagonal,
                MatrixElementOrder.RowMajor, True)
            Console.WriteLine("t4 = {0:F4}", t4)

            '
            ' Extracting triangular matrices
            '
            ' You may want to use part of a dense matrix
            ' as a triangular matrix. The static 
            ' ExtractUpperTriangleand ExtractLowerTriangle
            ' methods perform this task.
            Dim m = Matrix.Create(5, 5, components, MatrixElementOrder.ColumnMajor)
            Console.WriteLine("m = {0:F4}", m)
            ' Both methods are overloaded. The simplest
            ' returns a triangular matrix of the same dimension:
            Dim t5 As TriangularMatrix(Of Double) =
                Matrix.ExtractLowerTriangle(m)
            Console.WriteLine("t5 = {0:F4}", t5)
            ' You can also specify if the matrix is unit diagonal:
            Dim t6 As TriangularMatrix(Of Double) =
                Matrix.ExtractUpperTriangle(
                    m, MatrixDiagonal.UnitDiagonal)
            Console.WriteLine("t6 = {0:F4}", t6)
            ' Or the dimensions of the matrix if they don't 
            ' match the original:
            Dim t7 As TriangularMatrix(Of Double) =
                Matrix.ExtractUpperTriangle(
                    m, 3, 3, MatrixDiagonal.UnitDiagonal)
            Console.WriteLine("t7 = {0:F4}", t7)
            Console.WriteLine()

            '
            ' TriangularMatrix properties
            '

            ' The IsLowerTriangular and IsUpperTriangular return
            ' a boolean value:
            Console.WriteLine("t4 is lower triangular? - {0}",
                t4.IsLowerTriangular)
            Console.WriteLine("t4 is upper triangular? - {0}",
                t4.IsUpperTriangular)
            ' The IsUnitDiagonal property indicates whether the
            ' matrix has all 1's on its diagonal:
            Console.WriteLine("t3 is unit diagonal? - {0}",
                t3.IsUnitDiagonal)
            Console.WriteLine("t4 is unit diagonal? - {0}",
                t4.IsUnitDiagonal)
            Console.WriteLine()
            ' You can get and set matrix elements:
            t3(1, 3) = 55
            Console.WriteLine("t3(1, 3) = {0}", t3(1, 3))
            ' But trying to set an element that is zero or
            ' is on the diagonal for a unit diagonal matrix
            ' causes an exception to be thrown:
            Try
                t3(3, 1) = 100
            Catch e As ComponentReadOnlyException
                Console.WriteLine("Error accessing element: {0:F4}",
                    e.Message)
            End Try

            '
            ' Row and column views
            '

            ' The GetRowView and GetColumnView methods are
            ' available.
            Dim row = t3.GetRow(1)
            Console.WriteLine("row 1 of t3 = {0:F4}", row)
            Dim column = t4.GetColumn(2, 1, 3)
            Console.WriteLine("column 3 of t4 from row 2 to row 4:")
            Console.WriteLine("  {0:F4}", column)

            Console.Write("Press Enter key to exit...")
            Console.ReadLine()
        End Sub

    End Module

End Namespace