cblas_?tbsv
Solves a system of linear equations whose coefficients are in a triangular band matrix.
Syntax

void cblas_stbsv (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const CBLAS_TRANSPOSE trans, const CBLAS_DIAG diag, const MKL_INT n, const MKL_INT k, const float *a, const MKL_INT lda, float *x, const MKL_INT incx);
void cblas_dtbsv (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const CBLAS_TRANSPOSE trans, const CBLAS_DIAG diag, const MKL_INT n, const MKL_INT k, const double *a, const MKL_INT lda, double *x, const MKL_INT incx);
void cblas_ctbsv (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const CBLAS_TRANSPOSE trans, const CBLAS_DIAG diag, const MKL_INT n, const MKL_INT k, const void *a, const MKL_INT lda, void *x, const MKL_INT incx);
void cblas_ztbsv (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const CBLAS_TRANSPOSE trans, const CBLAS_DIAG diag, const MKL_INT n, const MKL_INT k, const void *a, const MKL_INT lda, void *x, const MKL_INT incx);
Include Files
 mkl.h
Description
The ?tbsv routines solve one of the following systems of equations:
A*x = b, or A'*x = b, or conjg(A')*x = b,
where:
b and x are nelement vectors,
A is an nbyn unit, or nonunit, upper or lower triangular band matrix, with (k + 1) diagonals.
The routine does not test for singularity or nearsingularity.
Such tests must be performed before calling this routine.
Input Parameters
 Layout

Specifies whether twodimensional array storage is rowmajor (CblasRowMajor) or columnmajor (CblasColMajor).
 uplo

Specifies whether the matrix A is an upper or lower triangular matrix:
if uplo = CblasUpper the matrix is upper triangular;
if uplo = CblasLower, the matrix is low triangular.
 trans

Specifies the system of equations:
if trans=CblasNoTrans, then A*x = b;
if trans=CblasTrans, then A'*x = b;
if trans=CblasConjTrans, then conjg(A')*x = b.
 diag

Specifies whether the matrix A is unit triangular:
if diag = CblasUnit then the matrix is unit triangular;
if diag = CblasNonUnit, then the matrix is not unit triangular.
 n

Specifies the order of the matrix A. The value of n must be at least zero.
 k

On entry with uplo = CblasUpper, k specifies the number of superdiagonals of the matrix A. On entry with uplo = CblasLower, k specifies the number of subdiagonals of the matrix A.
The value of k must satisfy 0≤k.
 a

Array, size lda*n.
Layout = CblasColMajor:
Before entry with uplo = CblasUpper, the leading (k + 1) by n part of the array a must contain the upper triangular band part of the matrix of coefficients, supplied columnbycolumn, with the leading diagonal of the matrix in row k of the array, the first superdiagonal starting at position 1 in row (k  1), and so on. The top left k by k triangle of the array a is not referenced.
The following program segment transfers an upper triangular band matrix from conventional full matrix storage (matrix, with leading dimension ldm) to band storage (a, with leading dimension lda):
for (j = 0; j < n; j++) { m = k  j; for (i = max( 0, j  k); i <= j; i++) { a[(m+i) + j*lda] = matrix[i + j*ldm]; } }
Before entry with uplo = CblasLower, the leading (k + 1) by n part of the array a must contain the lower triangular band part of the matrix of coefficients, supplied columnbycolumn, with the leading diagonal of the matrix in row 0 of the array, the first subdiagonal starting at position 0 in row 1, and so on. The bottom right k by k triangle of the array a is not referenced.
The following program segment transfers a lower triangular band matrix from conventional full matrix storage (matrix, with leading dimension ldm) to band storage (a, with leading dimension lda):
for (j = 0; j < n; j++) { m = j; for (i = j; i < min(n, j + k + 1); i++) { a[(m+i) + j*lda] = matrix[i + j*ldm]; } }
When diag = CblasUnit, the elements of the array a corresponding to the diagonal elements of the matrix are not referenced, but are assumed to be unity.
Layout = CblasRowMajor:
Before entry with uplo = CblasUpper, the leading (k + 1)byn part of array a must contain the upper triangular band part of the matrix of coefficients. The matrix must be supplied rowbyrow, with the leading diagonal of the matrix in column 0 of the array, the first superdiagonal starting at position 0 in column 1, and so on. The bottom right kbyk triangle of array a is not referenced.
The following program segment transfers the upper triangular part of a Hermitian band matrix from rowmajor full matrix storage (matrix with leading dimension ldm) to rowmajor band storage (a, with leading dimension lda):
for (i = 0; i < n; i++) { m = i; for (j = i; j < MIN(n, i+k+1); j++) { a[(m+j) + i*lda] = matrix[j + i*ldm]; } }
Before entry with uplo = CblasLower, the leading (k + 1)byn part of array a must contain the lower triangular band part of the matrix of coefficients, supplied rowbyrow, with the leading diagonal of the matrix in column k of the array, the first subdiagonal starting at position 1 in column k1, and so on. The top left kbyk triangle of array a is not referenced.
The following program segment transfers the lower triangular part of a Hermitian rowmajor band matrix from rowmajor full matrix storage (matrix, with leading dimension ldm) to rowmajor band storage (a, with leading dimension lda):
for (i = 0; i < n; i++) { m = k  i; for (j = max(0, ik); j <= i; j++) { a[(m+j) + i*lda] = matrix[j + i*ldm]; } }
 lda

Specifies the leading dimension of a as declared in the calling (sub)program. The value of lda must be at least (k + 1).
 x

Array, size at least (1 + (n  1)*abs(incx)). Before entry, the incremented array x must contain the nelement righthand side vector b.
 incx

Specifies the increment for the elements of x.
The value of incx must not be zero.
Output Parameters
 x

Overwritten with the solution vector x.