Developer Reference for Intel® oneAPI Math Kernel Library for C

ID 766684
Date 11/07/2023
Public

A newer version of this document is available. Customers should click here to go to the newest version.

Document Table of Contents

?gbbrd

Reduces a general band matrix to bidiagonal form.

Syntax

lapack_int LAPACKE_sgbbrd( int matrix_layout, char vect, lapack_int m, lapack_int n, lapack_int ncc, lapack_int kl, lapack_int ku, float* ab, lapack_int ldab, float* d, float* e, float* q, lapack_int ldq, float* pt, lapack_int ldpt, float* c, lapack_int ldc );

lapack_int LAPACKE_dgbbrd( int matrix_layout, char vect, lapack_int m, lapack_int n, lapack_int ncc, lapack_int kl, lapack_int ku, double* ab, lapack_int ldab, double* d, double* e, double* q, lapack_int ldq, double* pt, lapack_int ldpt, double* c, lapack_int ldc );

lapack_int LAPACKE_cgbbrd( int matrix_layout, char vect, lapack_int m, lapack_int n, lapack_int ncc, lapack_int kl, lapack_int ku, lapack_complex_float* ab, lapack_int ldab, float* d, float* e, lapack_complex_float* q, lapack_int ldq, lapack_complex_float* pt, lapack_int ldpt, lapack_complex_float* c, lapack_int ldc );

lapack_int LAPACKE_zgbbrd( int matrix_layout, char vect, lapack_int m, lapack_int n, lapack_int ncc, lapack_int kl, lapack_int ku, lapack_complex_double* ab, lapack_int ldab, double* d, double* e, lapack_complex_double* q, lapack_int ldq, lapack_complex_double* pt, lapack_int ldpt, lapack_complex_double* c, lapack_int ldc );

Include Files

  • mkl.h

Description

The routine reduces an m-by-n band matrix A to upper bidiagonal matrix B: A = Q*B*PH. Here the matrices Q and P are orthogonal (for real A) or unitary (for complex A). They are determined as products of Givens rotation matrices, and may be formed explicitly by the routine if required. The routine can also update a matrix C as follows: C = QH*C.

Input Parameters

matrix_layout

Specifies whether matrix storage layout is row major (LAPACK_ROW_MAJOR) or column major (LAPACK_COL_MAJOR).

vect

Must be 'N' or 'Q' or 'P' or 'B'.

If vect = 'N', neither Q nor PH is generated.

If vect = 'Q', the routine generates the matrix Q.

If vect = 'P', the routine generates the matrix PH.

If vect = 'B', the routine generates both Q and PH.

m

The number of rows in the matrix A (m 0).

n

The number of columns in A (n 0).

ncc

The number of columns in C (ncc 0).

kl

The number of sub-diagonals within the band of A (kl 0).

ku

The number of super-diagonals within the band of A (ku 0).

ab, c

Arrays:

ab(size max(1, ldab*n) for column major layout and max(1, ldab*m) for row major layout) contains the matrix A in band storage (see Matrix Storage Schemes).

c(size max(1, ldc*ncc) for column major layout and max(1, ldc*m) for row major layout) contains an m-by-ncc matrix C.

If ncc = 0, the array c is not referenced.

ldab

The leading dimension of the array ab (ldabkl + ku + 1).

ldq

The leading dimension of the output array q.

ldq max(1, m) if vect = 'Q' or 'B', ldq 1 otherwise.

ldpt

The leading dimension of the output array pt.

ldpt max(1, n) if vect = 'P' or 'B', ldpt 1 otherwise.

ldc

The leading dimension of the array c.

ldc max(1, m) if ncc > 0; ldc 1 if ncc = 0.

Output Parameters

ab

Overwritten by values generated during the reduction.

d

Array, size at least max(1, min(m, n)). Contains the diagonal elements of the matrix B.

e

Array, size at least max(1, min(m, n) - 1).

Contains the off-diagonal elements of B.

q, pt

Arrays:

qsize max(1, ldq*m) contains the output m-by-m matrix Q.

psize max(1, ldpt*n) contains the output n-by-n matrix PT.

c

Overwritten by the product QH*C.

c is not referenced if ncc = 0.

Return Values

This function returns a value info.

If info=0, the execution is successful.

If info = -i, the i-th parameter had an illegal value.

Application Notes

The computed matrices Q, B, and P satisfy Q*B*PH = A + E, where ||E||2 = c(n)ε ||A||2, c(n) is a modestly increasing function of n, and ε is the machine precision.

If m = n, the total number of floating-point operations for real flavors is approximately the sum of:

6*n2*(kl + ku) if vect = 'N' and ncc = 0,

3*n2*ncc*(kl + ku - 1)/(kl + ku) if C is updated, and

3*n3*(kl + ku - 1)/(kl + ku) if either Q or PH is generated (double this if both).

To estimate the number of operations for complex flavors, use the same formulas with the coefficients 20 and 10 (instead of 6 and 3).