コード例 #1
0
def leftorth(A, C=None, tol=1E-13, maxiter=100):
    if C is None:
        C = np.eye(A.shape[1], dtype=A.dtype)
    #print(np.trace(ct.XopL(A))/A.shape[1])
    lam2, rho = tmeigs(A,
                       which="LM",
                       tol=tol,
                       direction="left",
                       v0=np.dot(np.conj(C.T), C),
                       nev=1)
    rho = rho + np.conj(rho.T)
    rho /= np.trace(rho)
    U, S, VH = np.linalg.svd(rho)
    C = ct.leftmult(np.sqrt(S), np.conj(VH))
    _, C = qrmat(C)
    AL, R = qrpos(ct.leftmult(C, A))
    lam = np.linalg.norm(R)
    R /= lam
    numiter = 1
    ldelt = np.abs(np.abs(np.trace(ct.XopL(AL)) / A.shape[1]) - 1)
    while ldelt > tol and numiter < maxiter:
        _, C = tmeigs(A, B=np.conj(AL), v0=R, tol=ldelt / 10, nev=1)
        _, C = qrpos(C)
        C /= np.linalg.norm(C)
        AL, R = qrpos(ct.leftmult(C, A))
        lam = np.linalg.norm(R)
        R = R / lam
        numiter += 1
        ldelt = np.abs(np.abs(np.trace(ct.XopL(AL)) / A.shape[1]) - 1)
    C = R
    return (AL, C, lam)
コード例 #2
0
 def matvec(v):
     v = v.reshape((chi, chi))
     Th_v = ct.XopL(A_L, X=v)
     vR = proj(v, lR) * I
     v = v - Th_v + vR
     v = v.flatten()
     return v
コード例 #3
0
def B2_tensor(oldlist, newlist):
    NL, NR = null_spaces(oldlist)
    AL, C, AR = newlist
    AC = ct.rightmult(AL, C)
    L = ct.XopL(AC, B=np.conj(NL))
    R = ct.XopR(AR, B=np.conj(NR))
    return np.dot(L, R.T)
コード例 #4
0
def is_right_canonical(A_R, L, rtol=1E-5, atol=1E-8, verbose=False):
    is_iso = is_right_isometric(A_R, rtol=rtol, atol=atol, verbose=verbose)
    contracted = ct.XopL(A_R, X=L)
    passed = is_iso and np.allclose(contracted, L, rtol=rtol, atol=atol)
    if verbose:
        print("Testing if right canonical.")
    check(verbose, passed)
    return passed
コード例 #5
0
def is_left_isometric(A_L, rtol=1E-5, atol=1E-8, verbose=False):
    contracted = ct.XopL(A_L)
    eye = np.eye(contracted.shape[0], dtype=A_L.dtype)
    passed = np.allclose(contracted, eye, rtol=rtol, atol=atol)
    if verbose:
        print("Testing if left isometric.")
    check(verbose, passed)
    return passed
コード例 #6
0
 def tmmatvec(xvec):
     xmat = xvec.reshape(outshape)
     xmat = ct.XopL(A, B=B, X=xmat)
     xvec = xmat.flatten()
     return xvec