Class ldlt_ext

Page Contents

Class Documentation

class ldlt_ext

LDLT factorization for LMI.

  • LDL^T square-root-free version

  • Option allow semidefinite

  • A matrix A in R^{m x m} is positive definite iff v’ A v > 0 for all v in R^n.

  • O(p^2) per iteration, independent of N

Public Functions

inline explicit ldlt_ext(size_t N)

Construct a new ldlt ext object.

Parameters

N[in] dimension

ldlt_ext(const ldlt_ext&) = delete
ldlt_ext &operator=(const ldlt_ext&) = delete
ldlt_ext(ldlt_ext&&) = default
inline auto factorize(const Mat &A) -> bool

Perform LDLT Factorization.

If $A$ is positive definite, then $p$ is zero. If it is not, then $p$ is a positive integer, such that $v = R^-1 e_p$ is a certificate vector to make $v’*A[:p,:p]*v < 0$

Parameters

A[in] Symmetric Matrix

template<typename Callable, bool Allow_semidefinite = false>
inline auto factor(Callable &&getA) -> bool

Perform LDLT Factorization (Lazy evaluation)

See also: factorize()

Template Parameters

Fn

Parameters

getA[in] function to access the elements of A

inline auto is_spd() const noexcept -> bool

Is $A$ symmetric positive definite (spd)

Returns

true

Returns

false

auto witness() -> double

witness that certifies $A$ is not symmetric positive definite (spd)

Returns

auto

auto sym_quad(const Vec &A) const -> double

Calculate v’*{A}(p,p)*v.

Parameters

A[in]

Returns

double

auto sqrt() -> Mat

Public Members

Rng p = {0U, 0U}

the rows where the process starts and stops

Vec v

witness vector