Extreme Optimization > Mathematics Library for .NET > User's Guide > Current Page > Constructing Vectors

Extreme Optimization Mathematics Library for .NET

Constructing Vectors

Vector objects can be constructed in a number of ways. The Vector class is an abstract base class and cannot be instantiated directly. Instead, create instances of one of its derived classes.

General vectors

GeneralVector represents a vector with arbitrary components.

Passing a single integer to the constructor creates a GeneralVector with all its components zero. This example creates a vector of length 5:

GeneralVector v1 = new GeneralVector(5);
C#VB.NET 

A second constructor takes a variable number of Double arguments, which specify the components of the new vector. The values are copied into the vector's private data storage.

GeneralVector v2 = new GeneralVector(1, 2, 3, 4, 5);
C#VB.NET 

The third variant of the constructor takes a Double array containing the components. A second boolean parameter, useExistingArray, may be provided. This specifies whether to use the component array directly for data storage (useExistingArray = true), or to copy the data to a private storage (useExistingArray = false). The default is false.

double[] components =  {1, 2, 3, 4, 5};
GeneralVector v3 = new GeneralVector(components);
C#VB.NET 

An optional boolean parameter,useExistingArray, specifies whether the existing component array is to be used (true), or whether the components are copied. If the former is chosen (useExistingArray = true), then changing the components changes the values in the original array, and vice versa:

GeneralVector v4 = new GeneralVector(components, false);
Console.WriteLine("v4 = {0}", v4);
components[3] = 1;
Console.WriteLine("v4 = {0}", v4);
C#VB.NET 

A fifth constructor takes a Double array containing the components and an integer containing the length of the desired vector as arguments. If the length of the components array is larger than the specified length of the new vector, the remaining elements are ignored. The last two options can also be combined.

GeneralVector v5 = new GeneralVector(4, components);
GeneralVector v6 = new GeneralVector(4, components, false);
C#VB.NET 

Band vectors

Band vectors are vectors whose components are zero outside a contiguous range of components. The presence of the zero components makes it possible to optimize many calculations. They get their name from the fact that the rows and columns of a band matrix are of this format. Band vectors are implemented by the BandVector class.

The range of non-zero components must be specified at the time of creation. Only components within this range can be modified. Any attempt to set a component outside this range results in a ComponentReadOnlyException.

The simplest constructor takes three integer parameters. The first parameter is the length of the vector. The second and third parameters specify the index of the first and last non-zero component of the vector. This example creates a vector of the form [0 x x x 0 0]:

BandVector v1 = new BandVector(6, 1, 3);
C#VB.NET 

All components are initially set to zero, but only the components within the specified range can be modified.

A second constructor takes a Double array as its fourth parameter. This array specifies the non-zero components of the band vector. The second parameter is the length of the new vector. The index of the first and last component are the 3rd and 4th paramters. The components are copied from the component array starting with the first element. The following constructs a band vector with value [0 1 2 3 0 0]:

double[] components = {1, 2, 3};
BandVector v2 = new BandVector(6, 1, 3, components);
C#VB.NET 

Notice that the components array does not contain any zero elements.

A third constructor has an additional Boolean parameter, useExistingArray, that specifies whether to use the component array directly for data storage (useExistingArray = true), or to copy the data to a private storage (useExistingArray = false). In the former case, any changes to the original array cause the components of the vector to change as well. The following example illustrates what happens:

BandVector v3 = new BandVector(6, 1, 3, components, true);
Console.WriteLine("v3 = {0}", v3);
components[1] = 1;
Console.WriteLine("v3 = {0}", v3);
C#VB.NET 

Changing the value of the second element of Components changes the second non-zero component of v3, which is the third element overall.

Band vectors are created as the rows or columns of triangular matrices. Details can be found in the section on triantgular matrices.

Constant vectors

A constant vector is a vector whose components all have the same, constant value. Once created, none of the components can be changed. They are used mainly to represent unit diagonals (all 1's) or sub- or superdiagonals (all 0's) of triangular matrices.

Constant vectors are implemented by the ConstantVector class and have only one constructor with two parameters. The first parameter specifies the length of the vector. The second parameter specifies the constant value. The following constructs a ConstantVector that represents the vector [2 2 2 2]:

Vector v1 = new ConstantVector(4, 2.0);
C#VB.NET 

As mentioned earlier, constant vectors are also returned as diagonals of triangular matrices.

Other vector types

The VectorView class was designed to represent a vector whose components are a subset of the components of another vector. Vector views can only be created using the GetSubvector method. See the next section for more information.

The remaining vector types were designed specifically to represent rows, columns, or diagonals of matrices. These classes do not have public constructors. Use the GetRow, GetColumn or GetDiagonal method of the matrix class to create instances of these. See the section on accessing matrix rows and columns for details.

Overview
Introduction
Features
Documentation
QuickStart Samples
Sample Applications
Downloads
Get it now!
Download trial version
How to Buy
Search

"The Extreme Optimization Statistics Library for .NET is a major boon for those doing statistical work in .NET. I strongly recommend this product."
- Marc Brooks

"I have made it my mission to institutionalize the value of good API design.  I strongly believe that this is key to making developers more productive and happy on our platform. It is clear that you value good API design in your work, and take to heart developer productivity and synergy with the .NET framework."
- Brad Abrams,
Lead Program Manager, Microsoft.

This is a partial list of companies who are using our libraries:
ABB Robotics
Allstate
Applied Materials
Arcam
Astra Schedule
Babson College
Canadian Council on Learning
Canyon Associates
Caxton Associates
CECity
Constellation Energy
CreditSights
DeepOcean
Duke University
Dynamotive
Elecsoft
Engelhard Corporation
Epcor
Equipoise Software
Galileo International
GAM UK
Gammex
GlaxoSmithKline
Global Matrix
The Hartford
Infinera Corporation
Intel
JDS Uniphase
LaBranche & Co.
Learning & Skills Council
Jacobs Consultancy
Litman Gregory
Lucas Systems
Malvern Instruments
Medrio
Merck & Co.
Mintera.
Monitor Software
MorningStar
NanoString Technologies
Paletta Invent
Parametric Portfolio Associates
Prosanos
RATA Associates
RiskShield
Ramboll
Standard & Poor's
Strategic Analysis Corporation
Univ. of Alicante
Univ. of South Carolina
vielife
Xerox
US Army