| 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().
Here is the call graph for this function: