# Matrix-Vector Operations in Visual Basic QuickStart Sample

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

View this sample in: C# F# IronPython

``````Option Infer On

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

' Illustrates operations on DenseMatrix objects and combined
' operations on DoubleVector and DenseMatrix objects from the
' Extreme.Mathematics.LinearAlgebra namespace of Extreme Numerics.NET.
Module MatrixVectorOperations

Sub Main()
' The license is verified at runtime. We're using
' https://numerics.net/trial-key

' 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.
Console.WriteLine("Matrix arithmetic:")
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:
Console.WriteLine("v + m1 v1 = {0:F4}", v)
' Or add a scaled product. Use a negative factor
' to subtract:
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...")