New Version 6.0!

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

Download now!

QuickStart Samples

Matrix-Vector Operations QuickStart Sample (Visual Basic)

Illustrates how to perform operations that involve both matrices and vectors in Visual Basic.

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

Option Infer On

' The DenseMatrix and DoubleVector classes resides in the 
' Extreme.Mathematics.LinearAlgebra namespace.
Imports Extreme.Mathematics
Imports Extreme.Mathematics.LinearAlgebra

Namespace Extreme.Numerics.QuickStart.VB
    ' Illustrates operations on DenseMatrix objects and combined
    ' operations on DoubleVector and DenseMatrix objects from the
    ' Extreme.Mathematics.LinearAlgebra namespace of the Extreme Optimization
    ' Numerical Libraries for .NET.
    Module MatrixVectorOperations

        Sub Main()
            ' For details on the basic workings of Vector 
            ' objects, including constructing, copying and
            ' cloning vectors, see the BasicVectors QuickStart
            ' Sample.
            '
            ' For details on the basic workings of DenseMatrix
            ' objects, including constructing, copying and
            ' cloning vectors, see the BasicVectors QuickStart
            ' Sample.
            '
            ' Let's create some vectors to work with.
            Dim v1 = Vector.Create(Of Double)(1, 2, 3, 4, 5)
            Dim v2 = Vector.Create(Of Double)(1, -2, 3, -4, 5)
            Console.WriteLine("v1 = {0:F4}", v1)
            Console.WriteLine("v2 = {0:F4}", v2)
            ' These will hold results.
            Dim v As Vector(Of Double)

            ' Also, here are a couple of matrices.
            ' We start out with a 5x5 identity matrix:
            Dim m1 = DenseMatrix(Of Double).GetIdentity(5)
            ' Now we use the GetDiagonal method and combine it
            ' with the SetValue method of the Vector class to
            ' set some of the off-diagonal elements:
            m1.GetDiagonal(1).SetValue(2)
            m1.GetDiagonal(2).SetValue(3)
            m1.GetDiagonal(-1).SetValue(4)
            Console.WriteLine("m1 = {0:F4}", m1)
            ' We define our second matrix by hand:
            Dim m2 = Matrix.Create(5, 5, New Double() _
                {
                1, 2, 3, 4, 5,
                1, 3, 5, 7, 9,
                1, 4, 9, 16, 25,
                1, 8, 27, 64, 125,
                1, -1, 1, -1, 1
                }, MatrixElementOrder.ColumnMajor)
            Console.WriteLine("m2 = {0:F4}", m2)
            ' This one holds the results:
            Dim m As DenseMatrix(Of Double)
            Console.WriteLine()

            '
            ' Matrix arithmetic
            '

            ' The DenseMatrix class defines Shared methods for
            ' addition, subtraction, and multiplication of
            ' matrices. Overloaded operators are available 
            ' in languages that support them.
            ' Addition:
            Console.WriteLine("Matrix arithmetic:")
            m = Matrix.Add(m1, m2)
            Console.WriteLine("m1 + m2 = {0:F4}", m)
            ' Subtraction:
            m = Matrix.Subtract(m1, m2)
            Console.WriteLine("m1 - m2 = {0:F4}", m)
            ' Multiplication is the true matrix product:
            m = Matrix.Multiply(m1, m2)
            Console.WriteLine("m1 * m2 = {0:F4}", m)
            Console.WriteLine()

            '
            ' Matrix-Vector products
            '

            ' The DenseMatrix class defines Shared Add, Subtract, and
            ' Multiply methods for vectors and matrices. 
            ' Overloaded operators are available in languages
            ' that support them.
            Console.WriteLine("Matrix-vector products:")
            v = Matrix.Multiply(m1, v1)
            Console.WriteLine("m1 v1 = {0:F4}", v)
            ' You can also multiply a vector by a matrix on the right.
            ' This is equivalent to multiplying on the left by the 
            ' transpose of the matrix:
            v = Matrix.Multiply(m1, TransposeOperation.Transpose, v1)
            Console.WriteLine("v1 m1 = {0:F4}", v)

            ' Now for some methods of the DoubleVector class that
            ' involve matrices:
            ' Add a product of a matrix and a vector:
            v.AddProductInPlace(m1, v1)
            Console.WriteLine("v + m1 v1 = {0:F4}", v)
            ' Or add a scaled product. Use a negative factor
            ' to subtract:
            v.AddScaledProductInPlace(-2, m1, v2)
            Console.WriteLine("v - 2 m1 v2 = {0:F4}", v)
            ' You can also use static Subtract methods:
            v.SubtractProductInPlace(m1, v1)
            Console.WriteLine("v - m1 v1 = {0:F4}", v)
            Console.WriteLine()

            '
            ' Matrix norms
            '
            Console.WriteLine("Matrix norms")
            ' Matrix norms are not as easily defined as
            ' vector norms. Three matrix norms are available.
            ' 1. The one-norm through the OneNorm property:
            Dim a As Double = m2.OneNorm()
            Console.WriteLine("OneNorm of m2 = {0}", a)
            ' 2. The infinity norm through the 
            '    InfinityNorm property:
            a = m2.InfinityNorm()
            Console.WriteLine("InfinityNorm of m2 = {0}", a)
            ' 3. The Frobenius norm is often used because it
            '    is easy to calculate.
            a = m2.FrobeniusNorm()
            Console.WriteLine("FrobeniusNorm of m2 = {0}", a)
            Console.WriteLine()

            ' The trace of a matrix is the sum of its diagonal
            ' elements. It is returned by the Trace property:
            a = m2.Trace
            Console.WriteLine("Trace(m2) = {0}", a)

            ' The Transpose method returns the transpose of a 
            ' matrix. This transposed matrix shares element storage
            ' with the original matrix. Use the CloneData method
            ' to give the transpose its own data storage.
            m = m2.Transpose()
            Console.WriteLine("Transpose(m2) = {0:F4}", m)

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

    End Module

End Namespace