matrix

Variants: matrix, matrixc, matrixcf, matrixf

Public Functions

int matrix_print(double * _x, unsigned int _r, unsigned int _c)
int matrix_add(double * _x, double * _y, double * _z, unsigned int _r, unsigned int _c)
int matrix_sub(double * _x, double * _y, double * _z, unsigned int _r, unsigned int _c)
int matrix_pmul(double * _x, double * _y, double * _z, unsigned int _r, unsigned int _c)
int matrix_pdiv(double * _x, double * _y, double * _z, unsigned int _r, unsigned int _c)
int matrix_mul(double * _x, unsigned int _rx, unsigned int _cx, double * _y, unsigned int _ry, unsigned int _cy, double * _z, unsigned int _rz, unsigned int _cz)
int matrix_div(double * _x, double * _y, double * _z, unsigned int _n)
double matrix_det(double * _x, unsigned int _r, unsigned int _c)
int matrix_trans(double * _x, unsigned int _r, unsigned int _c)
int matrix_hermitian(double * _x, unsigned int _r, unsigned int _c)
int matrix_mul_transpose(double * _x, unsigned int _m, unsigned int _n, double * _xxT)
int matrix_transpose_mul(double * _x, unsigned int _m, unsigned int _n, double * _xTx)
int matrix_mul_hermitian(double * _x, unsigned int _m, unsigned int _n, double * _xxH)
int matrix_hermitian_mul(double * _x, unsigned int _m, unsigned int _n, double * _xHx)
int matrix_aug(double * _x, unsigned int _rx, unsigned int _cx, double * _y, unsigned int _ry, unsigned int _cy, double * _z, unsigned int _rz, unsigned int _cz)
int matrix_inv(double * _x, unsigned int _r, unsigned int _c)
int matrix_eye(double * _x, unsigned int _n)
int matrix_ones(double * _x, unsigned int _r, unsigned int _c)
int matrix_zeros(double * _x, unsigned int _r, unsigned int _c)
int matrix_gjelim(double * _x, unsigned int _r, unsigned int _c)
int matrix_pivot(double * _x, unsigned int _r, unsigned int _c, unsigned int _i, unsigned int _j)
int matrix_swaprows(double * _x, unsigned int _r, unsigned int _c, unsigned int _r1, unsigned int _r2)
int matrix_linsolve(double * _A, unsigned int _n, double * _b, double * _x, void * _opts)
int matrix_cgsolve(double * _A, unsigned int _n, double * _b, double * _x, void * _opts)
int matrix_ludecomp_crout(double * _x, unsigned int _rx, unsigned int _cx, double * _l, double * _u, double * _p)
int matrix_ludecomp_doolittle(double * _x, unsigned int _rx, unsigned int _cx, double * _l, double * _u, double * _p)
int matrix_gramschmidt(double * _A, unsigned int _r, unsigned int _c, double * _v)
int matrix_qrdecomp_gramschmidt(double * _a, unsigned int _m, unsigned int _n, double * _q, double * _r)
int matrix_chol(double * _a, unsigned int _n, double * _l)

Interfaces

int matrix_print(double * _x, unsigned int _r, unsigned int _c)

Print array as matrix to stdout

  • _x : input matrix, shape: (_r, _c)
  • _r : rows in matrix
  • _c : columns in matrix

int matrix_add(double * _x, double * _y, double * _z, unsigned int _r, unsigned int _c)

Perform point-wise addition between two matrices \(\vec{X}\) and \(\vec{Y}\), saving the result in the output matrix \(\vec{Z}\). That is, \(\vec{Z}_{i,j}=\vec{X}_{i,j}+\vec{Y}_{i,j} \), \( \forall_{i \in r} \) and \( \forall_{j \in c} \)

  • _x : input matrix, shape: (_r, _c)
  • _y : input matrix, shape: (_r, _c)
  • _z : output matrix, shape: (_r, _c)
  • _r : number of rows in each matrix
  • _c : number of columns in each matrix

int matrix_sub(double * _x, double * _y, double * _z, unsigned int _r, unsigned int _c)

Perform point-wise subtraction between two matrices \(\vec{X}\) and \(\vec{Y}\), saving the result in the output matrix \(\vec{Z}\) That is, \(\vec{Z}_{i,j}=\vec{X}_{i,j}-\vec{Y}_{i,j} \), \( \forall_{i \in r} \) and \( \forall_{j \in c} \)

  • _x : input matrix, shape: (_r, _c)
  • _y : input matrix, shape: (_r, _c)
  • _z : output matrix, shape: (_r, _c)
  • _r : number of rows in each matrix
  • _c : number of columns in each matrix

int matrix_pmul(double * _x, double * _y, double * _z, unsigned int _r, unsigned int _c)

Perform point-wise multiplication between two matrices \(\vec{X}\) and \(\vec{Y}\), saving the result in the output matrix \(\vec{Z}\) That is, \(\vec{Z}_{i,j}=\vec{X}_{i,j} \vec{Y}_{i,j} \), \( \forall_{i \in r} \) and \( \forall_{j \in c} \)

  • _x : input matrix, shape: (_r, _c)
  • _y : input matrix, shape: (_r, _c)
  • _z : output matrix, shape: (_r, _c)
  • _r : number of rows in each matrix
  • _c : number of columns in each matrix

int matrix_pdiv(double * _x, double * _y, double * _z, unsigned int _r, unsigned int _c)

Perform point-wise division between two matrices \(\vec{X}\) and \(\vec{Y}\), saving the result in the output matrix \(\vec{Z}\) That is, \(\vec{Z}_{i,j}=\vec{X}_{i,j}/\vec{Y}_{i,j} \), \( \forall_{i \in r} \) and \( \forall_{j \in c} \)

  • _x : input matrix, shape: (_r, _c)
  • _y : input matrix, shape: (_r, _c)
  • _z : output matrix, shape: (_r, _c)
  • _r : number of rows in each matrix
  • _c : number of columns in each matrix

int matrix_mul(double * _x, unsigned int _rx, unsigned int _cx, double * _y, unsigned int _ry, unsigned int _cy, double * _z, unsigned int _rz, unsigned int _cz)

Multiply two matrices \(\vec{X}\) and \(\vec{Y}\), storing the result in \(\vec{Z}\). NOTE: _rz = _rx, _cz = _cy, and _cx = _ry

  • _x : input matrix, shape: (_rx, _cx)
  • _rx : number of rows in _x
  • _cx : number of columns in _x
  • _y : input matrix, shape: (_ry, _cy)
  • _ry : number of rows in _y
  • _cy : number of columns in _y
  • _z : output matrix, shape: (_rz, _cz)
  • _rz : number of rows in _z
  • _cz : number of columns in _z

int matrix_div(double * _x, double * _y, double * _z, unsigned int _n)

Solve \(\vec{X} = \vec{Y} \vec{Z}\) for \(\vec{Z}\) for square matrices of size \(n\)

  • _x : input matrix, shape: (_n, _n)
  • _y : input matrix, shape: (_n, _n)
  • _z : output matrix, shape: (_n, _n)
  • _n : number of rows and columns in each matrix

double matrix_det(double * _x, unsigned int _r, unsigned int _c)

Compute the determinant of a square matrix \(\vec{X}\)

  • _x : input matrix, shape: (_r, _c)
  • _r : rows
  • _c : columns

int matrix_trans(double * _x, unsigned int _r, unsigned int _c)

Compute the in-place transpose of the matrix \(\vec{X}\)

  • _x : input matrix, shape: (_r, _c)
  • _r : rows
  • _c : columns

int matrix_hermitian(double * _x, unsigned int _r, unsigned int _c)

Compute the in-place Hermitian transpose of the matrix \(\vec{X}\)

  • _x : input matrix, shape: (_r, _c)
  • _r : rows
  • _c : columns

int matrix_mul_transpose(double * _x, unsigned int _m, unsigned int _n, double * _xxT)

Compute \(\vec{X}\vec{X}^T\) on a \(m \times n\) matrix. The result is a \(m \times m\) matrix.

  • _x : input matrix, shape: (_m, _n)
  • _m : input rows
  • _n : input columns
  • _xxT : output matrix, shape: (_m, _m)

int matrix_transpose_mul(double * _x, unsigned int _m, unsigned int _n, double * _xTx)

Compute \(\vec{X}^T\vec{X}\) on a \(m \times n\) matrix. The result is a \(n \times n\) matrix.

  • _x : input matrix, shape: (_m, _n)
  • _m : input rows
  • _n : input columns
  • _xTx : output matrix, shape: (_n, _n)

int matrix_mul_hermitian(double * _x, unsigned int _m, unsigned int _n, double * _xxH)

Compute \(\vec{X}\vec{X}^H\) on a \(m \times n\) matrix. The result is a \(m \times m\) matrix.

  • _x : input matrix, shape: (_m, _n)
  • _m : input rows
  • _n : input columns
  • _xxH : output matrix, shape: (_m, _m)

int matrix_hermitian_mul(double * _x, unsigned int _m, unsigned int _n, double * _xHx)

Compute \(\vec{X}^H\vec{X}\) on a \(m \times n\) matrix. The result is a \(n \times n\) matrix.

  • _x : input matrix, shape: (_m, _n)
  • _m : input rows
  • _n : input columns
  • _xHx : output matrix, shape: (_n, _n)

int matrix_aug(double * _x, unsigned int _rx, unsigned int _cx, double * _y, unsigned int _ry, unsigned int _cy, double * _z, unsigned int _rz, unsigned int _cz)

Augment two matrices \(\vec{X}\) and \(\vec{Y}\), storing the result in \(\vec{Z}\) NOTE: _rz = _rx = _ry, _rx = _ry, and _cz = _cx + _cy

  • _x : input matrix, shape: (_rx, _cx)
  • _rx : number of rows in _x
  • _cx : number of columns in _x
  • _y : input matrix, shape: (_ry, _cy)
  • _ry : number of rows in _y
  • _cy : number of columns in _y
  • _z : output matrix, shape: (_rz, _cz)
  • _rz : number of rows in _z
  • _cz : number of columns in _z

int matrix_inv(double * _x, unsigned int _r, unsigned int _c)

Compute the inverse of a square matrix \(\vec{X}\)

  • _x : input/output matrix, shape: (_r, _c)
  • _r : rows
  • _c : columns

int matrix_eye(double * _x, unsigned int _n)

Generate the identity square matrix of size \(n\)

  • _x : output matrix, shape: (_n, _n)
  • _n : dimensions of _x

int matrix_ones(double * _x, unsigned int _r, unsigned int _c)

Generate the all-ones matrix of size \(n\)

  • _x : output matrix, shape: (_r, _c)
  • _r : rows
  • _c : columns

int matrix_zeros(double * _x, unsigned int _r, unsigned int _c)

Generate the all-zeros matrix of size \(n\)

  • _x : output matrix, shape: (_r, _c)
  • _r : rows
  • _c : columns

int matrix_gjelim(double * _x, unsigned int _r, unsigned int _c)

Perform Gauss-Jordan elimination on matrix \(\vec{X}\)

  • _x : input/output matrix, shape: (_r, _c)
  • _r : rows
  • _c : columns

int matrix_pivot(double * _x, unsigned int _r, unsigned int _c, unsigned int _i, unsigned int _j)

Pivot on element \(\vec{X}_{i,j}\)

  • _x : output matrix, shape: (_r, _c)
  • _r : rows of _x
  • _c : columns of _x
  • _i : pivot row
  • _j : pivot column

int matrix_swaprows(double * _x, unsigned int _r, unsigned int _c, unsigned int _r1, unsigned int _r2)

Swap rows _r1 and _r2 of matrix \(\vec{X}\)

  • _x : input/output matrix, shape: (_r, _c)
  • _r : rows of _x
  • _c : columns of _x
  • _r1 : first row to swap
  • _r2 : second row to swap

int matrix_linsolve(double * _A, unsigned int _n, double * _b, double * _x, void * _opts)

Solve linear system of \(n\) equations: \(\vec{A}\vec{x} = \vec{b}\)

  • _A : system matrix, shape: (_n, _n)
  • _n : system size
  • _b : equality vector, shape: (_n, 1)
  • _x : solution vector, shape: (_n, 1)
  • _opts : options (ignored for now)

int matrix_cgsolve(double * _A, unsigned int _n, double * _b, double * _x, void * _opts)

Solve linear system of equations using conjugate gradient method.

  • _A : symmetric positive definite square matrix
  • _n : system dimension
  • _b : equality, shape: (_n, 1)
  • _x : solution estimate, shape: (_n, 1)
  • _opts : options (ignored for now)

int matrix_ludecomp_crout(double * _x, unsigned int _rx, unsigned int _cx, double * _l, double * _u, double * _p)

Perform L/U/P decomposition using Crout's method

  • _x : input/output matrix, shape: (_rx, _cx)
  • _rx : rows of _x
  • _cx : columns of _x
  • _l : first row to swap
  • _u : first row to swap
  • _p : first row to swap

int matrix_ludecomp_doolittle(double * _x, unsigned int _rx, unsigned int _cx, double * _l, double * _u, double * _p)

Perform L/U/P decomposition, Doolittle's method

  • _x : input/output matrix, shape: (_rx, _cx)
  • _rx : rows of _x
  • _cx : columns of _x
  • _l : first row to swap
  • _u : first row to swap
  • _p : first row to swap

int matrix_gramschmidt(double * _A, unsigned int _r, unsigned int _c, double * _v)

Perform orthnormalization using the Gram-Schmidt algorithm

  • _A : input matrix, shape: (_r, _c)
  • _r : rows
  • _c : columns
  • _v : output matrix

int matrix_qrdecomp_gramschmidt(double * _a, unsigned int _m, unsigned int _n, double * _q, double * _r)

Perform Q/R decomposition using the Gram-Schmidt algorithm such that \( \vec{A} = \vec{Q} \vec{R} \) and \( \vec{Q}^T \vec{Q} = \vec{I}_n \) and \(\vec{R\}\) is a diagonal \(m \times m\) matrix NOTE: all matrices are square

  • _a : input matrix, shape: (_m, _m)
  • _m : rows
  • _n : columns (same as cols)
  • _q : output matrix, shape: (_m, _m)
  • _r : output matrix, shape: (_m, _m)

int matrix_chol(double * _a, unsigned int _n, double * _l)

Compute Cholesky decomposition of a symmetric/Hermitian positive-definite matrix as \( \vec{A} = \vec{L}\vec{L}^T \)

  • _a : input square matrix, shape: (_n, _n)
  • _n : input matrix dimension
  • _l : output lower-triangular matrix