module Linear_algebra:sig..end
Core_bench. Please look at Bench.
Some basic linear algebra code, so that basic operations can be done without introducing a dependency on Lacaml/LAPACK. Currently only has the minimum needed to do ordinary least squares.
Matrices are represented via float array array, in row-major order.
module Vec:sig..end
module Mat:sig..end
val qr : ?in_place:bool ->
Mat.t -> Mat.t * Mat.tqr A returns the QR-decomposition of A as a pair (Q,R). A must have
at least as many rows as columns and have full rank.
If in_place (default: false) is true, then A is overwritten with Q.
val triu_solve : Mat.t ->
Vec.t -> Vec.t Core.Std.Or_error.ttriu_solve R b solves R x = b where R is an m x m upper-triangular matrix
and b is an m x 1 column vector.val mul_mv : ?transa:bool ->
Mat.t -> Vec.t -> Vec.tmul_mv A x computes the product A * x (where M is a matrix and x is
a column vector).val ols : ?in_place:bool ->
Mat.t ->
Vec.t -> Vec.t Core.Std.Or_error.tols A b computes the ordinary least-squares solution to A x = b. A must have at
least as many rows as columns and have full rank.
This can be used to compute solutions to non-singular square systems, but is somewhat sub-optimal for that purpose. The algorithm is to factor A = Q * R and solve R x = Q' b where Q' denotes the transpose of Q.
If in_place (default: false) is true, then A will be destroyed.