LU matrix decomposition

Performs \(LU\) decomposition of square matrix \(A=P*L*U\) (where \(P\) is permutation matrix) and solves matrix equation \(A*X=B\). Function returns the \(sign\) of permutation \(P\) via parameter info.

Parameters:

src1 pointer to input matrix \(A\) stored in row major order. After finish of work src1 contains at least \(U\) part of \(LU\) decomposition which is appropriate for determainant calculation: \(det(A)=sign*\prod_{j=1}^{M}a_{jj}\).
src1_step number of bytes between two consequent rows of matrix \(A\).
m size of square matrix \(A\).
src2 pointer to \(M\times N\) matrix \(B\) which is the right-hand side of system \(A*X=B\). \(B\) stored in row major order. If src2 is null pointer only \(LU\) decomposition will be performed. After finish of work src2 contains solution \(X\) of system \(A*X=B\).
src2_step number of bytes between two consequent rows of matrix \(B\).
n number of right-hand vectors in \(M\times N\) matrix \(B\).
info indicates success of decomposition. If *info is equals to zero decomposition failed, othervise *info is equals to \(sign\).
// global functions

int
hal_ni_LU32f(
    float* src1,
    size_t src1_step,
    int m,
    float* src2,
    size_t src2_step,
    int n,
    int* info
    );

int
hal_ni_LU64f(
    double* src1,
    size_t src1_step,
    int m,
    double* src2,
    size_t src2_step,
    int n,
    int* info
    );