Visible to Intel only — GUID: GUID-E0C00886-6E12-4E84-941F-555E7F14FEDE
Visible to Intel only — GUID: GUID-E0C00886-6E12-4E84-941F-555E7F14FEDE
?dttrfb
Computes the factorization of a diagonally dominant tridiagonal matrix.
void sdttrfb (const MKL_INT * n , float * dl , float * d , const float * du , MKL_INT * info );
void ddttrfb (const MKL_INT * n , double * dl , double * d , const double * du , MKL_INT * info );
void cdttrfb (const MKL_INT * n , MKL_Complex8 * dl , MKL_Complex8 * d , const MKL_Complex8 * du , MKL_INT * info );
void zdttrfb_ (const MKL_INT * n , MKL_Complex16 * dl , MKL_Complex16 * d , const MKL_Complex16 * du , MKL_INT * info );
- mkl.h
The ?dttrfb routine computes the factorization of a real or complex tridiagonal matrix A with the BABE (Burning At Both Ends) algorithm without pivoting. The factorization has the form
A = L1*U*L2
where
L1 and L2 are unit lower bidiagonal with k and n - k - 1 subdiagonal elements, respectively, where k = n/2, and
U is an upper bidiagonal matrix with nonzeroes in only the main diagonal and first superdiagonal.
n |
The order of the matrix A; n≥ 0. |
dl, d, du |
Arrays containing elements of A. The array dl of dimension (n - 1) contains the subdiagonal elements of A. The array d of dimension n contains the diagonal elements of A. The array du of dimension (n - 1) contains the superdiagonal elements of A. |
dl |
Overwritten by the (n -1) multipliers that define the matrix L from the LU factorization of A. |
d |
Overwritten by the n diagonal element reciprocals of the upper triangular matrix U from the factorization of A. |
du |
Overwritten by the (n-1) elements of the superdiagonal of U. |
info |
If info = 0, the execution is successful. If info = -i, the i-th parameter had an illegal value. If info = i, uii is 0. The factorization has been completed, but U is exactly singular. Division by zero will occur if you use the factor U for solving a system of linear equations. |
A diagonally dominant tridiagonal system is defined such that |di| > |dli-1| + |dui| for any i:
1 < i < n, and |d1| > |du1|, |dn| > |dln-1|
The underlying BABE algorithm is designed for diagonally dominant systems. Such systems are free from the numerical stability issue unlike the canonical systems that use elimination with partial pivoting (see ?gttrf). The diagonally dominant systems are much faster than the canonical systems.
The current implementation of BABE has a potential accuracy issue on very small or large data close to the underflow or overflow threshold respectively. Scale the matrix before applying the solver in the case of such input data.
Applying the ?dttrfb factorization to non-diagonally dominant systems may lead to an accuracy loss, or false singularity detected due to no pivoting.