2.1.17.6.3 ocmath_lu


Description

Uses partial pivoting, with row interchanges.

Syntax

int ocmath_lu( double * pMatIO, long * pIpiv, int m, int n )

Parameters

pMatIO
[modify] input:pointer to original matrix, of size m by n
output: overwritten by the factors L and U; the unit diagonal
elements of L are not stored.
pIpiv
[output] pointer to the pivot indices of size min(m, n) by 1.
Row i of the original matrix is interchanged
with row pIpiv[i - 1] for i = 1,2, ..., min(m, n).
m
[input] row number of matrix
n
[input] column number of matrix

Return

= OE_NOERROR(0): successful exit
= -1: m or n is less than 1
= NE_SINGULAR: u(<value>, <value>) is exactly zero. The factorization has been completed but the factor U is exactly singular, and division by zero will occur if it is subsequently used to solve a system of linear equations or to invert A.
= NE_ALLOC_FAIL: Memory allocation failed.
= NE_BAD_PARAM: On entry, parameter had an illegal value.
= NE_INTERNAL_ERROR: An internal error has occurred in this function. Check the function call and any array sizes. If the call is correct then please consult NAG for assistance.

Examples

EX1

void ocmath_lu_ex1()
{
    //assume Matrix1(datatype: double) contains data
    Matrix    matIO("MBook1");
    matrix<long> matIPIV;
    int m = matIO.GetNumRows();
    int n = matIO.GetNumCols();
    matIPIV.SetSize(min(m,n), 1);
    ocmath_lu(matIO, matIPIV, m, n);
}

Remark

Forms the LU factorization of a real m by n matrix A as A = PLU, where P is a permutation matrix, L is lower triangular with unit diagonal elements (lower trapezoidal if m > n) and U is upper triangular (upper trapezoidal if m < n).
Usually A is square(m = n), and both L and U are triangular.
The function uses partial pivoting, with row interchanges.

See Also

Header to Include

origin.h

Reference

nag_dgetrf(f07adc)nag_dgetrf(f07adc), Nag Manual