matrixf

Variants: matrix, matrixc, matrixcf, matrixf

Public Functions

int matrixf_print(float * _x, unsigned int _r, unsigned int _c)
int matrixf_add(float * _x, float * _y, float * _z, unsigned int _r, unsigned int _c)
int matrixf_sub(float * _x, float * _y, float * _z, unsigned int _r, unsigned int _c)
int matrixf_pmul(float * _x, float * _y, float * _z, unsigned int _r, unsigned int _c)
int matrixf_pdiv(float * _x, float * _y, float * _z, unsigned int _r, unsigned int _c)
int matrixf_mul(float * _x, unsigned int _rx, unsigned int _cx, float * _y, unsigned int _ry, unsigned int _cy, float * _z, unsigned int _rz, unsigned int _cz)
int matrixf_div(float * _x, float * _y, float * _z, unsigned int _n)
float matrixf_det(float * _x, unsigned int _r, unsigned int _c)
int matrixf_trans(float * _x, unsigned int _r, unsigned int _c)
int matrixf_hermitian(float * _x, unsigned int _r, unsigned int _c)
int matrixf_mul_transpose(float * _x, unsigned int _m, unsigned int _n, float * _xxT)
int matrixf_transpose_mul(float * _x, unsigned int _m, unsigned int _n, float * _xTx)
int matrixf_mul_hermitian(float * _x, unsigned int _m, unsigned int _n, float * _xxH)
int matrixf_hermitian_mul(float * _x, unsigned int _m, unsigned int _n, float * _xHx)
int matrixf_aug(float * _x, unsigned int _rx, unsigned int _cx, float * _y, unsigned int _ry, unsigned int _cy, float * _z, unsigned int _rz, unsigned int _cz)
int matrixf_inv(float * _x, unsigned int _r, unsigned int _c)
int matrixf_eye(float * _x, unsigned int _n)
int matrixf_ones(float * _x, unsigned int _r, unsigned int _c)
int matrixf_zeros(float * _x, unsigned int _r, unsigned int _c)
int matrixf_gjelim(float * _x, unsigned int _r, unsigned int _c)
int matrixf_pivot(float * _x, unsigned int _r, unsigned int _c, unsigned int _i, unsigned int _j)
int matrixf_swaprows(float * _x, unsigned int _r, unsigned int _c, unsigned int _r1, unsigned int _r2)
int matrixf_linsolve(float * _A, unsigned int _n, float * _b, float * _x, void * _opts)
int matrixf_cgsolve(float * _A, unsigned int _n, float * _b, float * _x, void * _opts)
int matrixf_ludecomp_crout(float * _x, unsigned int _rx, unsigned int _cx, float * _l, float * _u, float * _p)
int matrixf_ludecomp_doolittle(float * _x, unsigned int _rx, unsigned int _cx, float * _l, float * _u, float * _p)
int matrixf_gramschmidt(float * _A, unsigned int _r, unsigned int _c, float * _v)
int matrixf_qrdecomp_gramschmidt(float * _a, unsigned int _m, unsigned int _n, float * _q, float * _r)
int matrixf_chol(float * _a, unsigned int _n, float * _l)

Interfaces

int matrixf_print(float * _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 matrixf_add(float * _x, float * _y, float * _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 matrixf_sub(float * _x, float * _y, float * _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 matrixf_pmul(float * _x, float * _y, float * _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 matrixf_pdiv(float * _x, float * _y, float * _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 matrixf_mul(float * _x, unsigned int _rx, unsigned int _cx, float * _y, unsigned int _ry, unsigned int _cy, float * _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 matrixf_div(float * _x, float * _y, float * _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

float matrixf_det(float * _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 matrixf_trans(float * _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 matrixf_hermitian(float * _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 matrixf_mul_transpose(float * _x, unsigned int _m, unsigned int _n, float * _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 matrixf_transpose_mul(float * _x, unsigned int _m, unsigned int _n, float * _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 matrixf_mul_hermitian(float * _x, unsigned int _m, unsigned int _n, float * _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 matrixf_hermitian_mul(float * _x, unsigned int _m, unsigned int _n, float * _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 matrixf_aug(float * _x, unsigned int _rx, unsigned int _cx, float * _y, unsigned int _ry, unsigned int _cy, float * _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 matrixf_inv(float * _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 matrixf_eye(float * _x, unsigned int _n)

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

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

int matrixf_ones(float * _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 matrixf_zeros(float * _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 matrixf_gjelim(float * _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 matrixf_pivot(float * _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 matrixf_swaprows(float * _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 matrixf_linsolve(float * _A, unsigned int _n, float * _b, float * _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 matrixf_cgsolve(float * _A, unsigned int _n, float * _b, float * _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 matrixf_ludecomp_crout(float * _x, unsigned int _rx, unsigned int _cx, float * _l, float * _u, float * _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 matrixf_ludecomp_doolittle(float * _x, unsigned int _rx, unsigned int _cx, float * _l, float * _u, float * _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 matrixf_gramschmidt(float * _A, unsigned int _r, unsigned int _c, float * _v)

Perform orthnormalization using the Gram-Schmidt algorithm

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

int matrixf_qrdecomp_gramschmidt(float * _a, unsigned int _m, unsigned int _n, float * _q, float * _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 matrixf_chol(float * _a, unsigned int _n, float * _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