Skyline matrices

An implementation of skyline matrices (general or symmetric) is proposed in Montjoie. Symmetric skyline matrices are not easily modifiable (as RowSparse), you have to provide directly the pattern and values of the non-zero entries. General skyline matrices are easily modifiable (as ArrayRowSparse), with methods AddInteraction/AddInteractionRow. Unitary tests of these classes are present in file src/Program/Unit/skyline_matrix_test.cc.

Basic use

// General skyline matrices
Matrix<double, General, RowSkyLine> A;
int n = 2000;
A.Reallocate(n, n);

// then you can add non-zero entries with AddInteraction(i, j, value)
A.AddInteraction(0, 3, 1.5);

// and AddInteractionRow(i, nb_val, col_number, values);
IVect col_num(3);
Vector<double> values(3);
col_num(0) = 2; col_num(1) = 4; col_num(2) = 5;
values.FillRand();
int nb_val = 3;
A.AddInteractionRow(3, nb_val, col_num, values);

// or with ReallocateRow(i, size_row, first_col_number) and Value
A.ReallocateRow(1, 2, 4); // adding a_14, a_15 terms
A.Value(1, 0) = 2.3; // setting a_14
A.Value(1, 1) = -3.5; // setting a_15

// once the matrix is constructed, you can perform LU factorisation
// (performed without pivoting)
GetLU(A);

// and solves linear systems
SolveLU(A, x, b);

Methods for unsymmetric skyline matrices :

Clear clears the matrix
Reallocate changes the size of the matrix
ReallocateRow changes the size of a row of the matrix
AddInteraction adds a value to entry A(i, j)
AddInteractionRow adds severals value on a row of the matrix
GetRowSize returns the number of non-zero entries contained in a row
GetFirstColNumber returns the column number of the first non-zero entry in the row i
GetMemorySize returns size of the memory used by the object in bytes
Value access to the j-th non-zero entry of the row i
GetM returns the number of rows
GetN returns the number of columns
GetDataSize returns the number of elements effectively stored in the matrix
Fill sets all non-zero entries to a given value
FillRand sets randomly values of all non-zero entries
Zero sets all non-zero entries to zero
WriteText writes the matrix on the disk

Methods for symmetric skyline matrices :

Clear clears the matrix
Reallocate changes the size of the matrix
GetM returns the number of rows
GetN returns the number of columns
GetData returns the pointer to the array containing non-zero entries
GetInd returns the pointer to the array containing beginning indexes for each row
SetData sets directly the two arrays representing the structure
GetMemorySize returns the memory used by the object in bytes
GetDataSize returns the number of elements effectively stored in the matrix
Fill sets all non-zero entries to a given value
FillRand sets randomly values of all non-zero entries
Zero sets all non-zero entries to zero
WriteText writes the matrix on the disk

Functions for skyline matrices :

Copy Basic conversion from any matrix to skyline matrix
MltAdd performs matrix vector products
GetLU LU factorisation without pivoting
SolveLU LU resolution without pivoting
GetCholesky computes the cholesky factorisation of a symmetric skyline matrix
SolveCholesky solves linear system L x = b or LT x = b, once GetCholesky has been called
MltCholesky computes y = L x or t = LT x, once GetCholesky has been called

Diagonal matrices

An implementation of diagonal matrices is proposed in Montjoie. They implement standard methods available for other matrices, and Mlt/MltAdd functions. Here an example how to use these matrices:

Basic use

  int n = 10;
  // you can use the constructor with the number of rows and columns
  Matrix<double, Symmetric, DiagonalRow> A(n, n);

  // or the Reallocate method
  A.Reallocate(2*n, 2*n);

  // non-zero entries are modified with AddInteraction
  A.AddInteraction(0, 0, 2.5);

  // which is equivalent to Get(i, j) +=
  A.Get(1, 1) += 0.7;

  // access operator is used in read-only mode
  cout << A(0, 3) << endl;

  // the matrix can be written on a file
  A.WriteText("A.dat");

Methods for diagonal matrices :

GetMemorySize returns the memory used by the object in bytes
Reallocate reallocates the matrix with m rows
Resize resizes the matrix with m rows
Get returns access to element i, j of the matrix
AddInteraction adds a value to the element i, j of the matrix
Clear clears the matrix
ClearRow clears a row of the matrix
SetData sets the pointer storing the diagonal
Nullify nullifies the pointer storing the diagonal
WriteText writes the matrix in a file or a stream

Clear

Syntax

 void Clear();

This function clears the matrix.

Example :

// default constructor
Matrix<double, General, RowSkyLine> A;

// then you can allocate the matrix with Reallocate
A.Reallocate(n, n);

// for general matrices, you can allocate each row separately
for (int i = 0; i < n; i++)
  A.ReallocateRow(i, 4, max(0, i-2));

// the matrix is erased
A.Clear();

Location :

GeneralSkyLineMatrix.hxx
GeneralSkyLineMatrix.cxx
SymmetricSkyLineMatrix.hxx
SymmetricSkyLineMatrix.cxx

Reallocate

Syntax

 void Reallocate(int m, int n);

This function initializes the matrix with m rows and n columns.

Example :

// default constructor
Matrix<double, General, RowSkyLine> A;

// then you can allocate the matrix with Reallocate
A.Reallocate(n, n);

// for general matrices, you can reallocate each row separately
for (int i = 0; i < n; i++)
  A.ReallocateRow(i, 4, max(0, i-2));

// the matrix is erased
A.Clear();

Location :

GeneralSkyLineMatrix.hxx
GeneralSkyLineMatrix.cxx
SymmetricSkyLineMatrix.hxx
SymmetricSkyLineMatrix.cxx

ReallocateRow

Syntax

 void ReallocateRow(int irow, int size_row, int first_index);

This function sets the row irow with size_row elements, the column number of the first element being equal to first_index.

Example :

// default constructor
Matrix<double, General, RowSkyLine> A;

// for example, if you want to construct the following pattern :
// A = | x x 0 0 0 |
//     | x x x x 0 |
//     | 0 x x 0 0 |
//     | 0 0 0 x x |
//     | 0 x x x 0 |
A.Reallocate(5, 5);
A.ReallocateRow(0, 2, 0);
A.ReallocateRow(1, 4, 0);
A.ReallocateRow(2, 2, 1);
A.ReallocateRow(3, 2, 3);
A.ReallocateRow(4, 3, 1);

Location :

GeneralSkyLineMatrix.hxx
GeneralSkyLineMatrix.cxx

AddInteraction

Syntax

 void AddInteraction(int i, int j, const T& val);

This function adds the value val to the non-zero entry located at row i and column j. If the non-zero entry does not exist at this place, the profile is increased in order to contain this non-zero entry.

Example :

// default constructor
Matrix<double, General, RowSkyLine> A;

// for example, if you want to construct the following pattern :
// A = | x x 0 0 0 |
//     | x x x x 0 |
//     | 0 x x 0 0 |
//     | 0 0 0 x x |
//     | 0 x x x 0 |
A.Reallocate(5, 5);
A.ReallocateRow(0, 2, 0);
A.ReallocateRow(1, 4, 0);
A.ReallocateRow(2, 2, 1);
A.ReallocateRow(3, 2, 3);
A.ReallocateRow(4, 3, 1);

// once the pattern has been defined, you can set non-zero entries to zero
A.Zero();

// and use AddInteraction to add values
A.AddInteraction(0, 1, 2.4);
A.AddInteraction(2, 2, 0.8);

Location :

GeneralSkyLineMatrix.hxx
GeneralSkyLineMatrix.cxx
SymmetricSkyLineMatrix.hxx
SymmetricSkyLineMatrix.cxx

AddInteractionRow

Syntax

 void AddInteractionRow(int i, int n, const IVect& col_num, const Vector<T>& val);

This function adds n values val to the non-zero entries located at row i and columns col_num. If a non-zero entry does not exist, the profile is increased in order to contain this non-zero entry.

Example :

// default constructor
Matrix<double, General, RowSkyLine> A;

// for example, if you want to construct the following pattern :
// A = | x x 0 0 0 |
//     | x x x x 0 |
//     | 0 x x 0 0 |
//     | 0 0 0 x x |
//     | 0 x x x 0 |
A.Reallocate(5, 5);
A.ReallocateRow(0, 2, 0);
A.ReallocateRow(1, 4, 0);
A.ReallocateRow(2, 2, 1);
A.ReallocateRow(3, 2, 3);
A.ReallocateRow(4, 3, 1);

// once the pattern has been defined, you can set non-zero entries to zero
A.Zero();

// and use AddInteraction to add values
A.AddInteraction(0, 1, 2.4);
A.AddInteraction(2, 2, 0.8);

// AddInteractionRow to add several values at the same time
IVect col_num(3);
Vector<double> val(3);
col_num(0) = 0; val(0) = 0.9;
col_num(1) = 1; val(1) = -2.4;
col_num(2) = 3; val(2) = 1.7;
A.AddInteractionRow(1, 3, col_num, val);

Location :

GeneralSkyLineMatrix.hxx
GeneralSkyLineMatrix.cxx
SymmetricSkyLineMatrix.hxx
SymmetricSkyLineMatrix.cxx

GetRowSize

Syntax

 int GetRowSize(int i) const;

This function returns the number of non-zero entries contained in the row i.

Example :

// default constructor
Matrix<double, General, RowSkyLine> A;

// for example, if you want to construct the following pattern :
// A = | x x 0 0 0 |
//     | x x x x 0 |
//     | 0 x x 0 0 |
//     | 0 0 0 x x |
//     | 0 x x x 0 |
A.Reallocate(5, 5);
A.ReallocateRow(0, 2, 0);
A.ReallocateRow(1, 4, 0);
A.ReallocateRow(2, 2, 1);
A.ReallocateRow(3, 2, 3);
A.ReallocateRow(4, 3, 1);

// at any moment, you can know the number of non-zero entries of a row (e.g. row 4)
int nnz_row = A.GetRowSize(4);

Location :

GeneralSkyLineMatrix.hxx
GeneralSkyLineMatrix.cxx

GetFirstColNumber

Syntax

 int GetFirstColNumber(int i) const;

This function returns the column number of the first non-zero entry contained in the row i.

Example :

// default constructor
Matrix<double, General, RowSkyLine> A;

// for example, if you want to construct the following pattern :
// A = | x x 0 0 0 |
//     | x x x x 0 |
//     | 0 x x 0 0 |
//     | 0 0 0 x x |
//     | 0 x x x 0 |
A.Reallocate(5, 5);
A.ReallocateRow(0, 2, 0);
A.ReallocateRow(1, 4, 0);
A.ReallocateRow(2, 2, 1);
A.ReallocateRow(3, 2, 3);
A.ReallocateRow(4, 3, 1);

// at any moment, you can know the first column number on row i
int first_pos = A.GetFirstColNumber(i);

Location :

GeneralSkyLineMatrix.hxx
GeneralSkyLineMatrix.cxx

Value

Syntax

 T Value(int i, int j) const;
 T& Value(int i, int j);

This function returns the j-th non-zero entry of the row i. This function can be used to modify the non-zero entry.

Example :

// default constructor
Matrix<double, General, RowSkyLine> A;

// for example, if you want to construct the following pattern :
// A = | x x 0 0 0 |
//     | x x x x 0 |
//     | 0 x x 0 0 |
//     | 0 0 0 x x |
//     | 0 x x x 0 |
A.Reallocate(5, 5);
A.ReallocateRow(0, 2, 0);
A.ReallocateRow(1, 4, 0);
A.ReallocateRow(2, 2, 1);
A.ReallocateRow(3, 2, 3);
A.ReallocateRow(4, 3, 1);

// you can set the values with Value
A.Value(0, 0) = 2.3; A.Value(0, 1) = 2.7;
A.Value(1, 0) = 3.8; A.Value(1, 1) = -2.4; A.Value(1, 2) = 1.9; A.Value(1, 3) = -0.6;
A.Value(2, 0) = 4.4; A.Value(2, 1) = -3.7;
A.Value(3, 0) = 0.9; A.Value(3, 1) = 2.5;
A.Value(4, 0) = -3.5; A.Value(4, 1) = 1.2;

Location :

GeneralSkyLineMatrix.hxx
GeneralSkyLineMatrix.cxx

GetM

Syntax

 int GetM() const;

This function returns the number of rows in the matrix

Example :

// default constructor
Matrix<double, General, RowSkyLine> A;

// for example, if you want to construct the following pattern :
// A = | x x 0 0 0 |
//     | x x x x 0 |
//     | 0 x x 0 0 |
//     | 0 0 0 x x |
//     | 0 x x x 0 |
A.Reallocate(5, 5);
A.ReallocateRow(0, 2, 0);
A.ReallocateRow(1, 4, 0);
A.ReallocateRow(2, 2, 1);
A.ReallocateRow(3, 2, 3);
A.ReallocateRow(4, 3, 1);

// at any moment you can retrieve the number of rows
int n = A.GetM();

Location :

GeneralSkyLineMatrix.hxx
GeneralSkyLineMatrix.cxx
SymmetricSkyLineMatrix.hxx
SymmetricSkyLineMatrix.cxx

GetN

Syntax

 int GetN() const;

This function returns the number of columns in the matrix

Example :

// default constructor
Matrix<double, General, RowSkyLine> A;

// for example, if you want to construct the following pattern :
// A = | x x 0 0 0 |
//     | x x x x 0 |
//     | 0 x x 0 0 |
//     | 0 0 0 x x |
//     | 0 x x x 0 |
A.Reallocate(5, 5);
A.ReallocateRow(0, 2, 0);
A.ReallocateRow(1, 4, 0);
A.ReallocateRow(2, 2, 1);
A.ReallocateRow(3, 2, 3);
A.ReallocateRow(4, 3, 1);

// at any moment you can retrieve the number of columns
int n = A.GetN();

Location :

GeneralSkyLineMatrix.hxx
GeneralSkyLineMatrix.cxx
SymmetricSkyLineMatrix.hxx
SymmetricSkyLineMatrix.cxx

GetMemorySize

Syntax

 size_t GetMemorySize() const;

This function returns the memory used by the object in bytes.

Example :

// default constructor
Matrix<double, General, RowSkyLine> A;

// for example, if you want to construct the following pattern :
// A = | x x 0 0 0 |
//     | x x x x 0 |
//     | 0 x x 0 0 |
//     | 0 0 0 x x |
//     | 0 x x x 0 |
A.Reallocate(5, 5);
A.ReallocateRow(0, 2, 0);
A.ReallocateRow(1, 4, 0);
A.ReallocateRow(2, 2, 1);
A.ReallocateRow(3, 2, 3);
A.ReallocateRow(4, 3, 1);

// at any moment you can retrieve the memory effectively used to store the matrix
size_t num_bytes = A.GetMemorySize();

Location :

GeneralSkyLineMatrix.hxx
GeneralSkyLineMatrix.cxx
SymmetricSkyLineMatrix.hxx
SymmetricSkyLineMatrix.cxx

GetDataSize

Syntax

 int GetDataSize() const;

This function returns the number of non-zero entries stored in the matrix.

Example :

// default constructor
Matrix<double, General, RowSkyLine> A;

// for example, if you want to construct the following pattern :
// A = | x x 0 0 0 |
//     | x x x x 0 |
//     | 0 x x 0 0 |
//     | 0 0 0 x x |
//     | 0 x x x 0 |
A.Reallocate(5, 5);
A.ReallocateRow(0, 2, 0);
A.ReallocateRow(1, 4, 0);
A.ReallocateRow(2, 2, 1);
A.ReallocateRow(3, 2, 3);
A.ReallocateRow(4, 3, 1);

// at any moment you can retrieve the number of elements stored
int nnz = A.GetDataSize();

Location :

GeneralSkyLineMatrix.hxx
GeneralSkyLineMatrix.cxx
SymmetricSkyLineMatrix.hxx
SymmetricSkyLineMatrix.cxx

Fill

Syntax

 void Fill(const T& val);

This function sets all non-zero entries to a same value (val).

Example :

// default constructor
Matrix<double, General, RowSkyLine> A;

// for example, if you want to construct the following pattern :
// A = | x x 0 0 0 |
//     | x x x x 0 |
//     | 0 x x 0 0 |
//     | 0 0 0 x x |
//     | 0 x x x 0 |
A.Reallocate(5, 5);
A.ReallocateRow(0, 2, 0);
A.ReallocateRow(1, 4, 0);
A.ReallocateRow(2, 2, 1);
A.ReallocateRow(3, 2, 3);
A.ReallocateRow(4, 3, 1);

// you can set all non-zero entries to a given value
A.Fill(-0.5);

Location :

GeneralSkyLineMatrix.hxx
GeneralSkyLineMatrix.cxx
SymmetricSkyLineMatrix.hxx
SymmetricSkyLineMatrix.cxx

FillRand

Syntax

 void FillRand();

This function sets all non-zero entries to random values.

Example :

// default constructor
Matrix<double, General, RowSkyLine> A;

// for example, if you want to construct the following pattern :
// A = | x x 0 0 0 |
//     | x x x x 0 |
//     | 0 x x 0 0 |
//     | 0 0 0 x x |
//     | 0 x x x 0 |
A.Reallocate(5, 5);
A.ReallocateRow(0, 2, 0);
A.ReallocateRow(1, 4, 0);
A.ReallocateRow(2, 2, 1);
A.ReallocateRow(3, 2, 3);
A.ReallocateRow(4, 3, 1);

// you can set all non-zero entries to a random values
A.FillRand();

Location :

GeneralSkyLineMatrix.hxx
GeneralSkyLineMatrix.cxx
SymmetricSkyLineMatrix.hxx
SymmetricSkyLineMatrix.cxx

Zero

Syntax

 void Zero();

This function sets all non-zero entries to 0.

Example :

// default constructor
Matrix<double, General, RowSkyLine> A;

// for example, if you want to construct the following pattern :
// A = | x x 0 0 0 |
//     | x x x x 0 |
//     | 0 x x 0 0 |
//     | 0 0 0 x x |
//     | 0 x x x 0 |
A.Reallocate(5, 5);
A.ReallocateRow(0, 2, 0);
A.ReallocateRow(1, 4, 0);
A.ReallocateRow(2, 2, 1);
A.ReallocateRow(3, 2, 3);
A.ReallocateRow(4, 3, 1);

// you can set all non-zero entries to 0
A.Zero();

Location :

GeneralSkyLineMatrix.hxx
GeneralSkyLineMatrix.cxx
SymmetricSkyLineMatrix.hxx
SymmetricSkyLineMatrix.cxx

WriteText

Syntax

 void WriteText(const string&);
 void WriteText(ostream&);

This function writes the matrix in a file or an output stream. As usual, the file contains the matrix in the triplet form (i j val) with indexes beginning at 1 (instead of 0).

Example :

// default constructor
Matrix<double, General, RowSkyLine> A;

// for example, if you want to construct the following pattern :
// A = | x x 0 0 0 |
//     | x x x x 0 |
//     | 0 x x 0 0 |
//     | 0 0 0 x x |
//     | 0 x x x 0 |
A.Reallocate(5, 5);
A.ReallocateRow(0, 2, 0);
A.ReallocateRow(1, 4, 0);
A.ReallocateRow(2, 2, 1);
A.ReallocateRow(3, 2, 3);
A.ReallocateRow(4, 3, 1);

// you can set all non-zero entries to 0
A.Zero();

// and write the matrix on the disk
A.WriteText("matrix.dat");

Location :

GeneralSkyLineMatrix.hxx
GeneralSkyLineMatrix.cxx
SymmetricSkyLineMatrix.hxx
SymmetricSkyLineMatrix.cxx

GetData

Syntax

 T* GetData() const

This method returns the pointer storing the values of non-zero entries stored in a symmetric skyline matrix

Example :

// default constructor
Matrix<double, Symmetric, SymColSkyLine> A;

// a basic way to construct a symmetric skyline matrix is
// to construct a sparse matrix, then convert it
Matrix<double, Symmetric, ArrayRowSymSparse> B(n, n);
B.AddInteraction(0, 0, -5.2);
B.AddInteraction(0, 2, 3.4);

Copy(B, A);

// pointer to non-zero entries stored in A :
double* data = A.GetData();

// number of non-zero entries
int nnz = A.GetDataSize();

// if you want to modify directly the values, you can use the pointer data
for (int i = 0; i < nnz; i++)
  data[i] += 2.3;

Location :

SymmetricSkyLineMatrix.hxx
SymmetricSkyLineMatrix.cxx

GetInd

Syntax

 int* GetInd() const

This method returns the pointer storing the first index for each row of a symmetric skyline matrix

Example :

// default constructor
Matrix<double, Symmetric, SymColSkyLine> A;

// a basic way to construct a symmetric skyline matrix is
// to construct a sparse matrix, then convert it
Matrix<double, Symmetric, ArrayRowSymSparse> B(n, n);
B.AddInteraction(0, 0, -5.2);
B.AddInteraction(0, 2, 3.4);

Copy(B, A);

// pointer to non-zero entries stored in A :
double* data = A.GetData();

// pointer to first indexes (for each row)
int* ind = A.GetInd();

// number of non-zero entries
int nnz = A.GetDataSize();

// if you want to modify directly the values, you can use the pointer data
// ind is used to access to the wished row
// in this example, only even rows are modified
for (int i = 0; i < A.GetM(); i++)
  if (i%2 == 0)
    {
      for (int j = ind[i]; j < ind[i+1]; j++)
        data[j] += 2.3;
    }

Location :

SymmetricSkyLineMatrix.hxx
SymmetricSkyLineMatrix.cxx

SetData

Syntax

 void SetData(IVect& ind, Vector<T>& val)

This method fills directly the structure with the arrays ind and val. The first array stores the first index for each row, the second array stores the non-zero entries. On output, the arrays ind and val are empty (they are nullified).

Example :

// default constructor
Matrix<double, Symmetric, SymColSkyLine> A;

// a way to construct a symmetric sky-line matrix
// is to construct the arrays ind and val
// for example, if we consider the following matrix
// A = | 2.3  2.2  -1.4  0   0  |
//     | 2.2  4.2    0  2.8  0  |
//     |-1.4   0    3.1 5.2  0  |
//     |  0   2.8   5.2 7.5 1.0 |
//     |  0    0     0  1.0 4.6 |
// ind = (0, 3, 6, 8, 10, 11)
// val = (2.3, 2.2, -1.4, 4.2, 0, 2.8, 3.1, 5.2, 7.5, 1.0, 4.6)
IVect ind(6);
Vector<double> val(11);
ind(0) = 0; ind(1) = 3; ind(2) = 6; ind(3) = 8; ind(4) = 10; ind(5) = 11;

val(0) = 2.3; val(1) = 2.2; val(2) = -1.4; val(3) = 4.2; val(4) = 0;
val(5) = 2.8; val(6) = 3.1; val(7) = 5.2; val(8) = 7.5; val(9) = 1.0; val(10) = 4.6;

A.SetData(ind, val);

// then you can use the matrix
// for example compute the Cholesky factorization
GetCholesky(A);

Location :

SymmetricSkyLineMatrix.hxx
SymmetricSkyLineMatrix.cxx

Copy

Syntax

 void Copy(const Matrix1&, Matrix2&);

This function converts a sparse matrix into a skyline matrix.

Example :

// you can construct a sparse matrix
Matrix<double, General, ArrayRowSparse> Asp;

Asp.Reallocate(5, 5);
Asp.AddInteraction(0, 1, 2.8);
Asp.AddInteraction(1, 3, 0.8);
// ...

// then you can convert this sparse matrix into a skyline matrix A
Matrix<double, General, RowSkyLine> A;

Copy(Asp, A);

// you can release the memory of Asp if you want
Asp.Clear();

Location :

GeneralSkyLineMatrix.hxx
GeneralSkyLineMatrix.cxx
SymmetricSkyLineMatrix.hxx
SymmetricSkyLineMatrix.cxx

MltAdd

Syntax

 void MltAdd(const T& alpha, const Matrix& A, const Vector& X, const T& beta, Vector& Y);

This function performs a matrix vector product with a skyline matrix.

Example :

// you can construct a sparse matrix
Matrix<double, General, ArrayRowSparse> Asp;

Asp.Reallocate(5, 5);
Asp.AddInteraction(0, 1, 2.8);
Asp.AddInteraction(1, 3, 0.8);
// ...

// then you can convert this sparse matrix into a skyline matrix A
Matrix<double, General, RowSkyLine> A;

Copy(Asp, A);

// you can release the memory of Asp if you want
Asp.Clear();

Vector<double> X(n), Y(n);
Y.FillRand(); X.FillRand();

// computes Y = beta Y + alpha A X
MltAdd(alpha, A, X, beta, Y);

Location :

GeneralSkyLineMatrix.hxx
GeneralSkyLineMatrix.cxx
SymmetricSkyLineMatrix.hxx
SymmetricSkyLineMatrix.cxx

GetLU

Syntax

 void GetLU(Matrix& A);

This function replaces a skyline matrix A by its LU factorisation.

Example :

// you can construct a sparse matrix
Matrix<double, General, ArrayRowSparse> Asp;

Asp.Reallocate(5, 5);
Asp.AddInteraction(0, 1, 2.8);
Asp.AddInteraction(1, 3, 0.8);
// ...

// then you can convert this sparse matrix into a skyline matrix A
Matrix<double, General, RowSkyLine> A;

Copy(Asp, A);

// you can release the memory of Asp if you want
Asp.Clear();

// and compute its LU factorisation
GetLU(A);

// then you can compute the solution of A X = B
Vector<double> X(n), B(n);
B.FillRand();

X = B; SolveLU(A, X);

Location :

GeneralSkyLineMatrix.hxx
GeneralSkyLineMatrix.cxx
SymmetricSkyLineMatrix.hxx
SymmetricSkyLineMatrix.cxx

SolveLU

Syntax

 void SolveLU(Matrix& A, Vector& X);
 void SolveLU(SeldonTrans, Matrix& A, Vector& X);

This function computes the solution of A X = B or AT X = B, assuming that A has been replaced by its L and U factors by calling GetLU before.

Example :

// you can construct a sparse matrix
Matrix<double, General, ArrayRowSparse> Asp;

Asp.Reallocate(5, 5);
Asp.AddInteraction(0, 1, 2.8);
Asp.AddInteraction(1, 3, 0.8);
// ...

// then you can convert this sparse matrix into a skyline matrix A
Matrix<double, General, RowSkyLine> A;

Copy(Asp, A);

// you can release the memory of Asp if you want
Asp.Clear();

// and compute its LU factorisation
GetLU(A);

// then you can compute the solution of A X = B
Vector<double> X(n), B(n);
B.FillRand();

X = B; SolveLU(A, X);

Location :

GeneralSkyLineMatrix.hxx
GeneralSkyLineMatrix.cxx
SymmetricSkyLineMatrix.hxx
SymmetricSkyLineMatrix.cxx

GetCholesky

Syntax

 void GetCholesky(Matrix& A);

This function replaces a skyline matrix A by its Cholesky factorisation. It is available only for symmetric skyline matrices.

Example :

// you can construct a sparse matrix
Matrix<double, Symmetric, ArrayRowSymSparse> Asp;

Asp.Reallocate(5, 5);
Asp.AddInteraction(0, 1, 2.8);
Asp.AddInteraction(1, 3, 0.8);
// ...

// then you can convert this sparse matrix into a skyline matrix A
Matrix<double, Symmetric, SymColSkyLine> A;

Copy(Asp, A);

// you can release the memory of Asp if you want
Asp.Clear();

// and compute its Cholesky factorisation
GetCholesky(A);

// then you can compute the solution of L^T X = B for example
Vector<double> X(n), B(n);
B.FillRand();

X = B; SolveCholesky(SeldonTrans, A, X);

// or perform the matrix vector product B = L X
B = X; MltCholesky(SeldonNoTrans, A, B); 

Location :

SymmetricSkyLineMatrix.hxx
SymmetricSkyLineMatrix.cxx

SolveCholesky

Syntax

 void SolveCholesky(Matrix& A, Vector& X);

This function solves the linear system L X = B or LT X = B where A has been replaced by its Cholesky factor L (A = L LT), by calling GetCholesky.

Example :

// you can construct a sparse matrix
Matrix<double, Symmetric, ArrayRowSymSparse> Asp;

Asp.Reallocate(5, 5);
Asp.AddInteraction(0, 1, 2.8);
Asp.AddInteraction(1, 3, 0.8);
// ...

// then you can convert this sparse matrix into a skyline matrix A
Matrix<double, Symmetric, SymColSkyLine> A;

Copy(Asp, A);

// you can release the memory of Asp if you want
Asp.Clear();

// and compute its Cholesky factorisation
GetCholesky(A);

// then you can compute the solution of L^T X = B for example
Vector<double> X(n), B(n);
B.FillRand();

X = B; SolveCholesky(SeldonTrans, A, X);

// or perform the matrix vector product B = L X
B = X; MltCholesky(SeldonNoTrans, A, B); 

Location :

SymmetricSkyLineMatrix.hxx
SymmetricSkyLineMatrix.cxx

MltCholesky

Syntax

 void MltCholesky(Matrix& A, Vector& X);

This function performs the matrix vector product Y = L X or Y = LT X where A has been replaced by its Cholesky factor L (A = L LT), by calling GetCholesky.

Example :

// you can construct a sparse matrix
Matrix<double, Symmetric, ArrayRowSymSparse> Asp;

Asp.Reallocate(5, 5);
Asp.AddInteraction(0, 1, 2.8);
Asp.AddInteraction(1, 3, 0.8);
// ...

// then you can convert this sparse matrix into a skyline matrix A
Matrix<double, Symmetric, SymColSkyLine> A;

Copy(Asp, A);

// you can release the memory of Asp if you want
Asp.Clear();

// and compute its Cholesky factorisation
GetCholesky(A);

// then you can compute the solution of L^T X = B for example
Vector<double> X(n), B(n);
B.FillRand();

X = B; SolveCholesky(SeldonTrans, A, X);

// or perform the matrix vector product B = L X
B = X; MltCholesky(SeldonNoTrans, A, B); 

Location :

SymmetricSkyLineMatrix.hxx
SymmetricSkyLineMatrix.cxx

GetMemorySize

Syntax

 size_t GetMemorySize();

This function returns the memory used by the matrix in bytes.

Example :

// default constructor
Matrix<double, Symmetric, DiagonalRow> A;

// then you can allocate the matrix with Reallocate
A.Reallocate(n, n);

// size used to store A :
cout << A.GetMemorySize() << endl;

Location :

DiagonalMatrix.hxx
DiagonalMatrixInline.cxx

Reallocate

Syntax

 void Reallocate(int, int);

This function modifies the size of the matrix. Previous elements may be lost.

Example :

// default constructor
Matrix<double, Symmetric, DiagonalRow> A;

// then you can allocate the matrix with Reallocate
A.Reallocate(n, n);

// you can enforce deallocation with Clear
A.Clear();

Location :

DiagonalMatrix.hxx
DiagonalMatrixInline.cxx

Resize

Syntax

 void Resize(int, int);

This function modifies the size of the matrix. Previous elements are kept.

Example :

// default constructor
Matrix<double, Symmetric, DiagonalRow> A;

// then you can allocate the matrix with Reallocate
A.Reallocate(n, n);

// matrix can be modified with Get
A.Get(0, 0) = 3.0;
A.Get(1, 1) = -1.0;
A.Get(2, 2) = -2.5;

// Resize keeps previous elements
A.Resize(n+1, n+1);

Location :

DiagonalMatrix.hxx
DiagonalMatrixInline.cxx

Get

Syntax

 T& Get(int, int);

This function returns an access to element i, j of the matrix.

Example :

// default constructor
Matrix<double, Symmetric, DiagonalRow> A;

// then you can allocate the matrix with Reallocate
A.Reallocate(n, n);

// matrix can be modified with Get
A.Get(0, 0) = 3.0;
A.Get(1, 1) = -1.0;
A.Get(2, 2) = -2.5;

Location :

DiagonalMatrix.hxx
DiagonalMatrixInline.cxx

AddInteraction

Syntax

 void AddInteraction(int, int, const T&);

This function adds a value to the element i, j of the matrix. If j is different from i, the element is not added since the matrix is diagonal.

Example :

// default constructor
Matrix<double, Symmetric, DiagonalRow> A;

// then you can allocate the matrix with Reallocate
A.Reallocate(n, n);

// matrix can be modified with Get or AddInteraction
A.Get(0, 0) = 3.0;
A.Get(1, 1) = -1.0;
A.Get(2, 2) = -2.5;

A.AddInteraction(1, 1, 2.3);
// element 1, 1 should contain now -1+2.3 = 1.3

Location :

DiagonalMatrix.hxx
DiagonalMatrixInline.cxx

Clear

Syntax

 void Clear();

This function clears the matrix.

Example :

// default constructor
Matrix<double, Symmetric, DiagonalRow> A;

// then you can allocate the matrix with Reallocate
A.Reallocate(n, n);

// the matrix is erased
A.Clear();

Location :

DiagonalMatrix.hxx
DiagonalMatrixInline.cxx

ClearRow

Syntax

 void ClearRow(int);

This function clears a row of the matrix. For a diagonal matrix, it consists of setting the diagonal element to zero.

Example :

// default constructor
Matrix<double, Symmetric, DiagonalRow> A;

// then you can allocate the matrix with Reallocate
A.Reallocate(n, n);

A.AddInteraction(2, 2, 2.4);
A.AddInteraction(2, 2, -0.6);

// you can clear row 2 (the value returns to 0)
A.ClearRow(2);

Location :

DiagonalMatrix.hxx
DiagonalMatrixInline.cxx

SetData

Syntax

 void SetData(int, T*);

This function is a low-level function and should be used carefully, it sets the pointer storing the diagonal.

Example :

Vector<double> diagA(10);
  
// default constructor
Matrix<double, Symmetric, DiagonalRow> A;

// then you can use a pointer stored in another vector
A.SetData(diagA.GetM(), diagA.GetData());  

// to avoid a duplicate delete, Nullify should be called before calling the destructor of A:
A.Nullify();

Location :

DiagonalMatrix.hxx
DiagonalMatrixInline.cxx

Nullify

Syntax

 void Nullify();

This function is a low-level function and should be used carefully, it nullifies the pointer storing the diagonal.

Example :

Vector<double> diagA(10);
  
// default constructor
Matrix<double, Symmetric, DiagonalRow> A;

// then you can use a pointer stored in another vector
A.SetData(diagA.GetM(), diagA.GetData());  

// to avoid a duplicate delete, Nullify should be called before calling the destructor of A:
A.Nullify();

Location :

DiagonalMatrix.hxx
DiagonalMatrixInline.cxx

WriteText

Syntax

   void WriteText(const string&);
   void WriteText(ostream&);

This function writes the matrix to a file or an output stream.

Example :

// a diagonal matrix is constructed
Matrix<double, Symmetric, DiagonalRow> A(n, n);

// and filled
A.Get(2, 2) = 3.0;

// finally, the matrix can be written in a file
A.WriteText("A.dat");

Location :

DiagonalMatrix.hxx
DiagonalMatrixInline.cxx