# `linear_algebra`

This library provides predicates for numeric vectors and matrices, including vector construction and scaling, general vector norms, matrix construction and transformation, matrix-matrix products, row Gram matrices and Gram-centering helpers, offset diagonal helpers, triangular-part extraction, diagonal shifts, lower- and upper-triangular matrix solves, direct row and column lookup, tolerance-aware vector normalization and sign stabilization, generic dense square-system solves, determinants, matrix inversion, thin QR decomposition, QR-backed least-squares solving, tolerance-aware rank estimation, real symmetric eigendecomposition, pseudo-inverse and null-space helpers, covariance helpers, and Cholesky-based linear solves.

Vectors are represented as lists of numbers. Matrices are represented as lists of row lists, where each row is a numeric vector.

Predicates that index into vectors or matrices use one-based indices. Matrix access predicates use one-based row and column indices.

Square-system predicates include `solve_linear_system/3`, `solve_linear_systems/3`, `determinant/2`, and `inverse_matrix/2`. Rectangular-system predicates include `qr_decomposition/3` and `least_squares/3`, `pseudo_inverse/2-3`, and `null_space/2-3`. Row-matrix structural predicates include `gram_matrix/2`, `matrix_row_means/2`, `matrix_column_means/2`, `center_gram_matrix/4`, and `center_gram_vector/4`. Diagonal and triangular helpers include `matrix_diagonal/2-3`, `diagonal_matrix/2-4`, `upper_triangular_part/2-3`, and `lower_triangular_part/2-3`. Norm helpers include `vector_norm/3` and `frobenius_norm/2`. Real symmetric spectral predicates include `symmetric_eigen/3-5`. Tolerance-sensitive numerical predicates include `normalize_vector/2-3`, `first_significant_component/2-3`, `stabilize_vector_sign/2-3`, `matrix_rank/2-3`, `symmetric_eigen/3-5`, `pseudo_inverse/2-3`, and `null_space/2-3`.

The `symmetric_eigen/5` predicate can be used when callers need to control the power-iteration budget explicitly instead of relying on the default iteration bound.

## API documentation

Open the ../../apis/library_index.html#linear_algebra link in a web browser.

## Loading

To load all entities in this library, load the `loader.lgt` file:

    | ?- logtalk_load(linear_algebra(loader)).

## Testing

To test this library predicates, load the `tester.lgt` file:

    | ?- logtalk_load(linear_algebra(tester)).