void syten::QR::qr | ( | Tensor< rank > const & | in, |
Index | uncombinedLeg, | ||
Tensor< rank > & | q, | ||
Tensor< 2 > & | r, | ||
DecompRescaleCGC const | rescaleCGC = DecompRescaleCGC::Yes , |
||
FullQR const | full = FullQR{false} , |
||
SourceLocation | location = SourceLocation::current() |
||
) |
QR decomposition orthogonalisation, does not truncate!
[in] | in | input tensor to decompose into in → q r |
[in] | uncombinedLeg | leg of in /q which is not combined and at which r attaches |
[out] | q | output tensor with same rank as in |
[out] | r | output tensor with rank 2 |
[in] | rescaleCGC | whether or not to rescale the CGC spaces to unity |
[in] | full | FullQR::Yes if we do a full QR, FullQR::No for a thin QR (default) |
[in] | location | Callsite identifier. |
Given a rank-3 MPS tensor a
, you can left-orthogonalise it via (assuming MPS::State::[url]Idx == [123]
).
For a right-orthogonal tensor, you do
Referenced by syten::MPS::error_estimate_2svariance(), syten::IPEPS::gauge_fix(), syten::MPS::TDVP::Worker::gse_create_expanded(), syten::Pyten::init_tensor_decomp(), syten::MPS::left_complement(), syten::MPS::State::leftnorm(), syten::MPS::LBOState::leftnormM(), syten::MPS::LBOState::physnormM(), syten::MPS::LBOState::physnormV(), positify_diagonal(), syten::STensorImpl::qr(), syten::IPEPS::qr_to_back(), syten::IPEPS::qr_to_back_r(), syten::IPEPS::qr_to_front(), syten::IPEPS::qr_to_left(), syten::IPEPS::qr_to_right(), syten::MPS::right_complement(), syten::MPS::State::rightnorm(), syten::MPS::LBOState::rightnormM(), and syten::MPS::TDVP::LBOWorker::sweep_single().