std::tuple< SRDef, Tensor< 2 > > syten::pseudo_invert | ( | Tensor< 2 > const & | a | ) |

Calculates the SVD-based pseudo-inverse of the input matrix.

Given an input `a`

which is decomposed as `U·S·Vh`

, returns a tuple <condition_number,`V·1/S·Uh`

>. The singular value matrix `S`

is inverted using `invertDiagonal`

which applies a broadening

If `a`

is square and has full rank (condition number nonzero) then the returned matrix is close to the exact inverse.

Leg ordering is identical to the input, i.e. the first leg of `a`

should be connected to the second leg of the result or the second leg of `a`

should be connected to the first leg of the result to calculate `R·A`

and `A·R`

respectively.

References diagonal(), invertDiagonal(), norm(), syten::SVD::svd(), and SYTEN_SMALL_THRESHOLD.

Referenced by syten::IPEPS::FullUpdate::apply_op(), syten::IPEPSv2::full_update_gauge_fix(), syten::IPEPSv2::full_update_pseudo_invert_r4(), and syten::IPEPS::gauge_fix().

Here is the call graph for this function:

Here is the caller graph for this function: