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
' Numerics.NET.LinearAlgebra namespace.
Imports Numerics.NET
Imports Numerics.NET.LinearAlgebra
' Illustrates operations on DenseMatrix objects and combined
' operations on DoubleVector and DenseMatrix objects from the
' Numerics.NET.LinearAlgebra namespace of Numerics.NET.
Module MatrixVectorOperations
Sub Main()
' The license is verified at runtime. We're using
' a 30 day trial key here. For more information, see
' https://numerics.net/trial-key
Numerics.NET.License.Verify("64542-18980-57619-62268")
' 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 = {v1:F4}")
Console.WriteLine($"v2 = {v2:F4}")
' 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 = {m1:F4}")
' We define our second matrix by hand:
Dim m2 = Matrix.CreateFromArray(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 = {m2:F4}")
' 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 = {m:F4}")
' Subtraction:
m = Matrix.Subtract(m1, m2)
Console.WriteLine($"m1 - m2 = {m:F4}")
' Multiplication is the true matrix product:
m = Matrix.Multiply(m1, m2)
Console.WriteLine($"m1 * m2 = {m:F4}")
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 = {v:F4}")
' 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 = {v:F4}")
' 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 = {v:F4}")
' Or add a scaled product. Use a negative factor
' to subtract:
v.AddScaledProductInPlace(-2, m1, v2)
Console.WriteLine($"v - 2 m1 v2 = {v:F4}")
' You can also use static Subtract methods:
v.SubtractProductInPlace(m1, v1)
Console.WriteLine($"v - m1 v1 = {v:F4}")
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 = {a}")
' 2. The infinity norm through the
' InfinityNorm property:
a = m2.InfinityNorm()
Console.WriteLine($"InfinityNorm of m2 = {a}")
' 3. The Frobenius norm is often used because it
' is easy to calculate.
a = m2.FrobeniusNorm()
Console.WriteLine($"FrobeniusNorm of m2 = {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) = {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) = {m:F4}")
Console.Write("Press Enter key to exit...")
Console.ReadLine()
End Sub
End Module