Functions for Matrices

In that page, we detail functions that are not related to Lapack

Transpose replaces a matrix by its transpose
TransposeConj replaces a matrix by its conjugate transpose
SetRow modifies a row of the matrix
GetRow extracts a row from the matrix
SetCol modifies a column of the matrix
GetCol extracts a column from the matrix
MaxAbs returns highest absolute value of A
Norm1 returns 1-norm of A
NormInf returns infinity-norm of A
ApplyInversePermutation permutes row and column numbers of a matrix
ScaleMatrix multiplies rows and columns of a matrix by coefficients
ScaleLeftMatrix multiplies rows of a matrix by coefficients

Transpose, TransposeConj

Syntax :

  void Transpose(Matrix&);
  void TransposeConj(Matrix&);

Transpose overwrites a matrix by its transpose, while TransposeConj overwrites a matrix by its conjugate transpose. These functions are only available for dense matrices.

Example :

  
Matrix<double> A(5, 5);
A.Fill();

Transpose(A);

Matrix<complex<double> > B(5, 5);
// you fill B as you want, then overwrites it by conj(transpose(B))
TransposeConj(B);

Location :

Functions_Matrix.cxx

SetRow

Syntax :

  void SetRow(const Vector&, int, Matrix&);

This function modifies a row in the provided matrix. This function is available only for dense matrices.

Example :

  
Matrix<double> A(5, 5);
A.Fill();

// now you construct a row
Vector<double> row(5);
row.FillRand();

// and you put it in A
int irow = 1;
SetRow(row, irow, A);

Location :

Functions.cxx

GetRow

Syntax :

  void GetRow(const Matrix&, int, Vector&);

This function extracts a row from the provided matrix. This function is available only for dense matrices.

Example :

  
Matrix<double> A(5, 5);
A.Fill();

// now you extract the first row
Vector<double> row;
GetRow(A, 0, row);

Location :

Functions.cxx

SetCol

Syntax :

  void SetCol(const Vector&, int, Matrix&);

This function modifies a column in the provided matrix. This function is available only for dense matrices.

Example :

  
Matrix<double> A(5, 5);
A.Fill();

// now you construct a column
Vector<double> col(5);
col.FillRand();

// and you put it in A
int icol = 1;
SetCol(col, icol, A);

Location :

Functions.cxx

GetCol

Syntax :

  void GetCol(const Matrix&, int, Vector&);

This function extracts a column from the provided matrix. This function is available only for dense matrices.

Example :

  
Matrix<double> A(5, 5);
A.Fill();

// now you extract the first column
Vector<double> col;
GetCol(A, 0, col);

Location :

Functions.cxx

MaxAbs

Syntax :

  T MaxAbs(const Matrix<T>&);

This function returns the highest absolute value of a matrix.

Example :

  
Matrix<complex<double> > A(5, 5);
A.Fill();

double module_max = MaxAbs(A);

Location :

Functions_Matrix.cxx

Norm1

Syntax :

  T Norm1(const Matrix<T>&);

This function returns the 1-norm of a matrix.

Example :

  
Matrix<complex<double> > A(5, 5);
A.Fill();

double anorm_one = Norm1(A);

Location :

Functions_Matrix.cxx

NormInf

Syntax :

  T NormInf(const Matrix<T>&);

This function returns the infinite norm of a matrix.

Example :

  
Matrix<complex<double> > A(5, 5);
A.Fill();

double anorm_inf = NormInf(A);

Location :

Functions_Matrix.cxx

ApplyInversePermutation

Syntax :

  void ApplyInversePermutation(Matrix&, const Vector<int>&, const Vector<int>&);

This function permutes a given matrix with the provided new row numbers and column numbers. ApplyInversePermutation(A, row, col) does the same operation as A(row, col) = A in Matlab. This function is only available for RowMajor, ColMajor, ArrayRowSparse, ArrayRowSymSparse, ArrayRowComplexSparse and ArrayRowSymComplexSparse.

Example :

  
// you fill A as you wish
Matrix<double, Symmetric, ArrayRowSymSparse> A(5, 5);
// then new row and column numbers
IVect row(5);
// for symmetric matrix, row and column permutation must be the same
// if you want to keep symmetry
ApplyInversePermutation(A, row, row);

// for unsymmetric matrices, you can specify different permutations
IVect col(5);
Matrix<double, General, ArrayRowSparse> B(5, 5);
ApplyInversePermutation(B, row, col);

Location :

Permutation_ScalingMatrix.cxx

ScaleMatrix

Syntax :

  void ScaleMatrix(Matrix&, const Vector&, const Vector&);

This function multiplies each row and column with a coefficient, i.e. A is replaced by L*A*R where L and R are diagonal matrices and you provide the diagonal when you call ScaleMatrix. This function is only available for ArrayRowSparse, ArrayRowSymSparse, ArrayRowComplexSparse and ArrayRowSymComplexSparse.

Example :

  
// you fill A as you wish
Matrix<double, Symmetric, ArrayRowSymSparse> A(5, 5);
// then scaling vectors
Vector<double> scale(5);
// for symmetric matrix, row and column scaling must be the same
// if you want to keep symmetry
ScaleMatrix(A, scale, scale);

// for unsymmetric matrices, you can specify different scalings
IVect scale_right(5);
Matrix<double, General, ArrayRowSparse> B(5, 5);
ApplyInversePermutation(B, scale, scale_right);

Location :

Permutation_ScalingMatrix.cxx

ScaleLeftMatrix

Syntax :

  void ScaleLeftMatrix(Matrix&, const Vector&);

This function multiplies each row with a coefficient, i.e. A is replaced by L*A where L is diagonal and you provide the diagonal when you call ScaleLeftMatrix. This function is only available for ArrayRowSparse, and ArrayRowComplexSparse.

Example :

  
// you fill A as you wish
Matrix<double, General, ArrayRowSparse> A(5, 5);
// then scaling vector
Vector<double> scale(5);
ScaleLeftMatrix(A, scale);

Location :

Permutation_ScalingMatrix.cxx