type t val make : ?guess:('a, 'b) Matrix.t -> ?n_states:int -> ?n_iter:int -> ?threshold:float -> 'a Vector.t -> (('a, 'b) Matrix.t -> ('a, 'b) Matrix.t) -> ('a, 'b) Matrix.t * 'b Vector.t (** Performs a Davidson diagonalization. Example: let eigenvectors, eigenvalues = Davidson.make diagonal mat_prod - [diagonal] contains the diagonal of the matrix to diagonalize - [mat_prod] is a function performing a matrix multiplication of the matrix to diagonalize with the matrix containing the current set of vectors *)