SyTen

◆ orthogonalise_solve_svd() [1/2]

template<typename Vector , typename Iterator >
std::pair<typename std::remove_reference<Vector>::type, DenseTensor<2> > syten::orthogonalise_solve_svd ( Vector &&  target,
Iterator  first,
Iterator  last,
bool  careful 
)

Generic implementation of orthogonalisation against a set of vectors using SVD-based orthogonalisation.

Parameters
[in]targetinput vector which is to be orthogonalised
[in]firstiterator pointing to the first element of the range of vectors against which we orthogonalise
[in]lastiterator pointing one past the end of the range of vectors against which we orthogonalise
[in]carefulif true, does not apply orthogonalisation against a specific element of [*first, *last) if the resulting vector would have norm 1e-3 smaller than the input vector.
Returns
a pair {Vec, DenseTensor<2>} which holds the orthogonalised vector and the overlap matrix
Remarks
As this function uses the SVD-based orthogonalisation, the vectors [*first, *last) don't have to be orthogonal. However, they should be normalised to one or one should be a good reference value to decide whether a particular overlap is small or large.
The SVD-based orthogonalisation requires the calculation of the full overlap matrix for all elements of [*first, last). If you have this matrix already available, you should supply it and use the other overload.

References conj(), syten::MPS::distance(), std::move(), orthogonalise_solve_svd(), overlap(), pseudo_inverse_svd_cm(), SYTEN_SMALL_THRESHOLD, and underThreshold().

+ Here is the call graph for this function: