DecompositionOperations<TReal, TComplex>.BandLUDecompose Method

Definition

Namespace: Extreme.Mathematics.LinearAlgebra.Implementation
Assembly: Extreme.Numerics (in Extreme.Numerics.dll) Version: 8.1.23

Overload List

BandLUDecompose(Int32, Int32, Int32, Int32, Array2D<TReal>, Array1D<Int32>, Int32)

Computes an LU factorization of a real m-by-n band matrix A using partial pivoting with row interchanges.

BandLUDecompose(Int32, Int32, Int32, Int32, Array2D<TComplex>, Array1D<Int32>, Int32)

Computes an LU factorization of a complex m-by-n band matrix A using partial pivoting with row interchanges.

BandLUDecompose(Int32, Int32, Int32, Int32, Array2D<TReal>, Array1D<Int32>, Int32)

Computes an LU factorization of a real m-by-n band matrix A using partial pivoting with row interchanges.

C#
public abstract void BandLUDecompose(
	int m,
	int n,
	int kl,
	int ku,
	Array2D<TReal> ab,
	Array1D<int> ipiv,
	out int info
)

Parameters

m  Int32
            The number of rows of the matrix A.  M >= 0.
            
n  Int32
            The number of columns of the matrix A.  N >= 0.
            
kl  Int32
            The number of subdiagonals within the band of A.  KL >= 0.
            
ku  Int32
            The number of superdiagonals within the band of A.  KU >= 0.
            
ab  Array2D<TReal>
            AB is TReal array, dimension (LDAB,N)
            On entry, the matrix A in band storage, in rows KL+1 to
            2*KL+KU+1; rows 1 to KL of the array need not be set.
            The j-th column of A is stored in the j-th column of the
            array AB as follows:
            AB(kl+ku+1+i-j,j) = A(i,j) for max(1,j-ku)<=i<=min(m,j+kl)
            On exit, details of the factorization: U is stored as an
            upper triangular band matrix with KL+KU superdiagonals in
            rows 1 to KL+KU+1, and the multipliers used during the
            factorization are stored in rows KL+KU+2 to 2*KL+KU+1.
            See below for further details.
            
            The leading dimension of the array AB.  LDAB >= 2*KL+KU+1.
            
ipiv  Array1D<Int32>
            Dimension (min(M,N))
            The pivot indices; for 1 <= i <= min(M,N), row i of the
            matrix was interchanged with row IPIV(i).
            
info  Int32
            = 0: successful exit
            < 0: if INFO = -i, the i-th argument had an illegal value
            > 0: if INFO = +i, U(i,i) is exactly zero. The factorization
                 has been completed, but the factor U is exactly
                 singular, and division by zero will occur if it is used
                 to solve a system of equations.
            

Remarks

            This is the blocked version of the algorithm, calling Level 3 BLAS.
            

Further Details:

            The band storage scheme is illustrated by the following example, when
            M = N = 6, KL = 2, KU = 1:
            On entry:                       On exit:
                *    *    *    +    +    +       *    *    *   u14  u25  u36
                *    *    +    +    +    +       *    *   u13  u24  u35  u46
                *   a12  a23  a34  a45  a56      *   u12  u23  u34  u45  u56
               a11  a22  a33  a44  a55  a66     u11  u22  u33  u44  u55  u66
               a21  a32  a43  a54  a65   *      m21  m32  m43  m54  m65   *
               a31  a42  a53  a64   *    *      m31  m42  m53  m64   *    *
            Array elements marked * are not used by the routine; elements marked
            + need not be set on entry, but are required by the routine to store
            elements of U because of fill-in resulting from the row interchanges.
            

This method corresponds to the LAPACK routine ?GBTRF.

BandLUDecompose(Int32, Int32, Int32, Int32, Array2D<TComplex>, Array1D<Int32>, Int32)

Computes an LU factorization of a complex m-by-n band matrix A using partial pivoting with row interchanges.

C#
public abstract void BandLUDecompose(
	int m,
	int n,
	int kl,
	int ku,
	Array2D<TComplex> ab,
	Array1D<int> ipiv,
	out int info
)

Parameters

m  Int32
            The number of rows of the matrix A.  M >= 0.
            
n  Int32
            The number of columns of the matrix A.  N >= 0.
            
kl  Int32
            The number of subdiagonals within the band of A.  KL >= 0.
            
ku  Int32
            The number of superdiagonals within the band of A.  KU >= 0.
            
ab  Array2D<TComplex>
            AB is TComplex array, dimension (LDAB,N)
            On entry, the matrix A in band storage, in rows KL+1 to
            2*KL+KU+1; rows 1 to KL of the array need not be set.
            The j-th column of A is stored in the j-th column of the
            array AB as follows:
            AB(kl+ku+1+i-j,j) = A(i,j) for max(1,j-ku)<=i<=min(m,j+kl)
            On exit, details of the factorization: U is stored as an
            upper triangular band matrix with KL+KU superdiagonals in
            rows 1 to KL+KU+1, and the multipliers used during the
            factorization are stored in rows KL+KU+2 to 2*KL+KU+1.
            See below for further details.
            
            The leading dimension of the array AB.  LDAB >= 2*KL+KU+1.
            
ipiv  Array1D<Int32>
            Dimension (min(M,N))
            The pivot indices; for 1 <= i <= min(M,N), row i of the
            matrix was interchanged with row IPIV(i).
            
info  Int32
            = 0: successful exit
            < 0: if INFO = -i, the i-th argument had an illegal value
            > 0: if INFO = +i, U(i,i) is exactly zero. The factorization
                 has been completed, but the factor U is exactly
                 singular, and division by zero will occur if it is used
                 to solve a system of equations.
            

Remarks

            This is the blocked version of the algorithm, calling Level 3 BLAS.
            

Further Details:

            The band storage scheme is illustrated by the following example, when
            M = N = 6, KL = 2, KU = 1:
            On entry:                       On exit:
                *    *    *    +    +    +       *    *    *   u14  u25  u36
                *    *    +    +    +    +       *    *   u13  u24  u35  u46
                *   a12  a23  a34  a45  a56      *   u12  u23  u34  u45  u56
               a11  a22  a33  a44  a55  a66     u11  u22  u33  u44  u55  u66
               a21  a32  a43  a54  a65   *      m21  m32  m43  m54  m65   *
               a31  a42  a53  a64   *    *      m31  m42  m53  m64   *    *
            Array elements marked * are not used by the routine; elements marked
            + need not be set on entry, but are required by the routine to store
            elements of U because of fill-in resulting from the row interchanges.
            

Authors: Univ. of Tennessee, Univ. of California Berkeley, Univ. of Colorado Denver, NAG Ltd.

Date: November 2011

See Also