Auxiliary Functions

Helper routines for matrix operations, norms, and transformations.

Matrix Norms

lange - General matrix norm

Computes matrix norms: - One: Maximum absolute column sum \(\max_j \sum_i |a_{ij}|\) - Inf: Maximum absolute row sum \(\max_i \sum_j |a_{ij}|\) - Fro: Frobenius norm \(\sqrt{\sum_{i,j} |a_{ij}|^2}\) - Max: Maximum absolute element \(\max_{i,j} |a_{ij}|\)

lansy / lanhe - Symmetric/Hermitian matrix norm

lantr - Triangular matrix norm

lansb / lanhb - Symmetric/Hermitian band matrix norm

langt - Tridiagonal matrix norm

lanhs - Hessenberg matrix norm

lanst - Symmetric tridiagonal norm

lanhp / lansp - Packed symmetric/Hermitian norm

Condition Number Estimation

gecon - General matrix condition number

Estimates \(\kappa_1(A)\) or \(\kappa_\infty(A)\) using LU factorization.

pocon - Positive definite condition number

Uses Cholesky factorization.

sycon / hecon - Symmetric/Hermitian condition number

Uses Bunch-Kaufman factorization.

trcon - Triangular condition number

pbcon - Band positive definite condition number

gbcon - General band condition number

gtcon - Tridiagonal condition number

ptcon - Symmetric positive definite tridiagonal

Equilibration and Scaling

geequ - General matrix equilibration

Computes row and column scaling factors to equilibrate matrix.

poequ - Positive definite equilibration

syequb / heequb - Symmetric/Hermitian equilibration with Bunch-Kaufman

gbequ - General band equilibration

pbequ - Positive definite band equilibration

lascl - Scale matrix by scalar

Multiplies matrix by \(cfrom/cto\) with overflow protection.

Matrix Initialization and Copying

laset - Initialize matrix

Sets matrix elements to constants: - Diagonal to β - Off-diagonal to α

lacpy - Copy matrix or submatrix

Copies selected triangle or full matrix.

laswp - Row permutation

Applies row interchanges (from pivoting).

Matrix Addition

geadd - General matrix addition

Computes \(B = \alpha A + \beta B\).

Householder Transformations

larfg - Generate Householder reflector

Generates elementary reflector H such that: \(H \begin{bmatrix} \alpha \\ x \end{bmatrix} = \begin{bmatrix} \beta \\ 0 \end{bmatrix}\)

larf - Apply Householder reflector

Applies \(H\) to matrix from left or right.

larfb - Apply block of Householder reflectors

More efficient than repeated larf calls.

larft - Form triangular factor of block reflector

Computes T for efficient block application.

larfx - Apply optimized small reflector

Specialized for small vectors (≤ 10 elements).

Givens Rotations

lartg - Generate Givens rotation

Computes rotation that zeros second element: \(\begin{bmatrix} c & s \\ -\bar{s} & c \end{bmatrix} \begin{bmatrix} f \\ g \end{bmatrix} = \begin{bmatrix} r \\ 0 \end{bmatrix}\)

lartgp - Generate Givens with positive diagonal

lartgs - Generate Givens for SVD

lasr - Apply sequence of Givens rotations

rot - Apply single Givens rotation (BLAS-like)

Matrix Multiplication (Triangular)

lauum - U^H U or L L^H multiplication

Computes \(U^H U\) or \(L L^H\) for triangular matrix. Used in computing matrix inverse from Cholesky factorization.

Special Matrix Operations

lagge - Generate random general matrix

lagsy / laghe - Generate random symmetric/Hermitian

lagtr - Random triangular matrix

latms - Generate test matrices with specified properties

lapy2 - \(\sqrt{x^2 + y^2}\) with overflow protection

lapy3 - \(\sqrt{x^2 + y^2 + z^2}\) with overflow protection

lamch - Machine parameters (epsilon, safe minimum, etc.)

lamc3 - Force storage of a + b (compiler optimization barrier)

ladiv - Complex division with overflow protection

Permutations and Sorting

lapmt - Column permutation

lapmr - Row permutation

lasrt - Sort numbers

lasorte - Sort eigenvalues with eigenvectors

Workspace Queries

Most LAPACK routines support workspace queries: - Call with lwork = -1 or lrwork = -1 - Optimal workspace size returned in first element of work array - Enables dynamic workspace allocation

Example:

// Query optimal workspace
int64_t lwork = -1;
double work_query;
lapack::geqrf(m, n, A, lda, tau, &work_query, lwork);

lwork = (int64_t)work_query;
std::vector<double> work(lwork);

// Actual computation
lapack::geqrf(m, n, A, lda, tau, work.data(), lwork);

Error Checking and Diagnostics

ilaenv - Environment parameters

Returns algorithm-specific parameters (block sizes, etc.).

xerbla - Error handler

Called when invalid parameter detected (not typically called directly by users).

See Also