# Module `Owl_base_linalg_generic`

###### Types and constants
`type ('a, 'b) t = ( 'a, 'b ) Owl_base_dense_ndarray_generic.t`
###### Basic functions
`val inv : ( 'a, 'b ) t -> ( 'a, 'b ) t`

`inv x` calculates the inverse of an invertible square matrix `x` such that `x *@ x = I` wherein `I` is an identity matrix. (If `x` is singular, `inv` will return a useless result.)

`val det : ( 'a, 'b ) t -> 'a`

`det x` computes the determinant of a square matrix `x`.

`val logdet : ( 'a, 'b ) t -> 'a`

Refer to :doc:`owl_dense_matrix_generic`

###### Check matrix types
`val is_tril : ( 'a, 'b ) t -> bool`

`is_tril x` returns `true` if `x` is lower triangular otherwise `false`.

`val is_triu : ( 'a, 'b ) t -> bool`

`is_triu x` returns `true` if `x` is upper triangular otherwise `false`.

`val is_diag : ( 'a, 'b ) t -> bool`

`is_diag x` returns `true` if `x` is diagonal otherwise `false`.

`val is_symmetric : ( 'a, 'b ) t -> bool`

`is_symmetric x` returns `true` if `x` is symmetric otherwise `false`.

`val is_hermitian : ( Stdlib.Complex.t, 'b ) t -> bool`

`is_hermitian x` returns `true` if `x` is hermitian otherwise `false`.

###### Factorisation
`val lu : ( 'a, 'b ) t -> ( 'a, 'b ) t * ( 'a, 'b ) t * int array`

`lu x -> (l, u, ipiv)` calculates LU decomposition of `x`. The pivoting is used by default.

```val qr : ?thin:bool -> ?pivot:bool -> ( 'a, 'b ) t -> ( 'a, 'b ) t * ( 'a, 'b ) t * ( int32, Stdlib.Bigarray.int32_elt ) t```

Refer to :doc:`owl_dense_matrix_generic`

`val lq : ?thin:bool -> ( 'a, 'b ) t -> ( 'a, 'b ) t * ( 'a, 'b ) t`

Refer to :doc:`owl_dense_matrix_generic`

```val svd : ?thin:bool -> ( 'a, 'b ) t -> ( 'a, 'b ) t * ( 'a, 'b ) t * ( 'a, 'b ) t```

Refer to :doc:`owl_dense_matrix_generic`

`val chol : ?upper:bool -> ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_matrix_generic`

###### Linear system of equations
```val linsolve : ?trans:bool -> ?typ:[ `n | `u | `l ] -> ( 'a, 'b ) t -> ( 'a, 'b ) t -> ( 'a, 'b ) t```

Refer to :doc:`owl_dense_matrix_generic`

`val sylvester : ( 'a, 'b ) t -> ( 'a, 'b ) t -> ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_matrix_generic`

`val lyapunov : ( 'a, 'b ) t -> ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_matrix_generic`

```val discrete_lyapunov : ?solver:[ `default | `bilinear | `direct ] -> ( 'a, 'b ) t -> ( 'a, 'b ) t -> ( 'a, 'b ) t```

Refer to :doc:`owl_dense_matrix_generic`

```val care : ?diag_r:bool -> ( float, 'b ) t -> ( float, 'b ) t -> ( float, 'b ) t -> ( float, 'b ) t -> ( float, 'b ) t```

Refer to :doc:`owl_dense_matrix_generic`

```val dare : ?diag_r:bool -> ( float, 'b ) t -> ( float, 'b ) t -> ( float, 'b ) t -> ( float, 'b ) t -> ( float, 'b ) t```

Refer to :doc:`owl_dense_matrix_generic`

###### Non-standard functions
`val linsolve_lu : ( 'a, 'b ) t -> ( 'a, 'b ) t -> ( 'a, 'b ) t`
```val linsolve_gauss : ( float, 'a ) t -> ( float, 'b ) t -> ( float, 'a ) t * ( float, 'b ) t```
```val tridiag_solve_vec : float array -> float array -> float array -> float array -> float array```