|
|
◆ zgbtrf()
| void zgbtrf |
( |
int |
m, |
|
|
int |
n, |
|
|
int |
kl, |
|
|
int |
ku, |
|
|
int |
ldab, |
|
|
doublecomplex |
ab[], |
|
|
int |
ipiv[], |
|
|
int * |
info |
|
) |
| |
LU factorization of a complex band matrix
- Purpose
- This routine computes an LU factorization of a complex m x n band matrix A using partial pivoting with row interchanges.
This is the blocked version of the algorithm calling Level 3 BLAS.
- Parameters
-
| [in] | m | Number of rows of the matrix A. (m >= 0) (If m = 0, returns without computation) |
| [in] | n | Number of columns of the matrix A. (n >= 0) (If n = 0, returns without computation) |
| [in] | kl | Number of sub-diagonals within the band of A. (kl >= 0) |
| [in] | ku | Number of super-diagonals within the band of A. (ku >= 0) |
| [in] | ldab | Leading dimension of the two dimensional array ab[][]. (ldab >= 2kl + ku + 1) |
| [in,out] | ab[][] | Array ab[lab][ldab] (lab >= n)
[in] The matrix A in band matrix form, in rows kl+1 to 2kl+ku+1; rows 1 to kl of the array need not be set.
[out] Details of the factorization: U is stored as an upper triangular band matrix with kl+ku super-diagonals 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. |
| [out] | ipiv[] | Array ipiv[lipiv] (lipiv >= min(m, n))
Pivot indices; for 1 <= i <= min(m, n), row i of the matrix was interchanged with row ipiv[i-1]. |
| [out] | info | = 0: Successful exit
= -1: The argument m had an illegal value (m < 0)
= -2: The argument n had an illegal value (n < 0)
= -3: The argument kl had an illegal value (kl < 0)
= -4: The argument ku had an illegal value (ku < 0)
= -5: The argument ldab had an illegal value (ldab < 2kl+ku+1)
= i > 0: The i-th diagonal element of the factor U 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. |
- Further Details
- The band matrix form is illustrated by the following example, when m = n = 6, kl = 2, ku = 1:
On entry:
* * * + + +
* * + + + +
* a12 a23 a34 a45 a56
a11 a22 a33 a44 a55 a66
a21 a32 a43 a54 a65 *
a31 a42 a53 a64 * *
On exit:
* * * u14 u25 u36
* * u13 u24 u35 u46
* u12 u23 u34 u45 u56
u11 u22 u33 u44 u55 u66
m21 m32 m43 m54 m65 *
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.
- Reference
- LAPACK
|