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.
[in] | target | input vector which is to be orthogonalised |
[in] | first | iterator pointing to the first element of the range of vectors against which we orthogonalise |
[in] | last | iterator pointing one past the end of the range of vectors against which we orthogonalise |
[in] | careful | if 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. |
{Vec, DenseTensor<2>}
which holds the orthogonalised vector and the overlap matrix[*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.[*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().