Example #1
0
def subspace_variance(coef):
    Hp_total = deepcopy(Hp[0])
    for n in range(1,len(Hp)):
        Hp_total = H_operations.add(Hp_total,Hp[n],np.array([1,coef[n-1]]))
    Hm = Hp_total.herm_conj()

    H = H_operations.add(Hp_total,Hm,np.array([1,1]))
    H.sector.find_eig()

    z=zm_state(3,1,pxp)
    from Calculations import gen_fsa_basis
    fsa_dim = int(2*pxp.N/3)
    fsa_basis = gen_fsa_basis(Hp_total.sector.matrix(),z.prod_basis(),fsa_dim)
    # for n in range(0,np.size(fsa_basis,axis=1)):
        # for m in range(0,np.size(fsa_basis,axis=1)):
            # temp = np.abs(np.vdot(fsa_basis[:,n],fsa_basis[:,m]))
            # if temp > 1e-5:
                # print(temp,n,m)
    fsa_basis,temp = np.linalg.qr(fsa_basis)

    H2 = np.dot(H.sector.matrix(),H.sector.matrix())
    H2_fsa = np.dot(np.conj(np.transpose(fsa_basis)),np.dot(H2,fsa_basis))
    H_fsa = np.dot(np.conj(np.transpose(fsa_basis)),np.dot(H.sector.matrix(),fsa_basis))
    subspace_variance = np.real(np.trace(H2_fsa-np.dot(H_fsa,H_fsa)))
    return subspace_variance
def spacing_error(coef):
    Hp_total = deepcopy(Hp[0])
    for n in range(1, len(Hp)):
        Hp_total = H_operations.add(Hp_total, Hp[n], np.array([1,
                                                               coef[n - 1]]))
    Hm = Hp_total.herm_conj()
    Hz = 1 / 2 * com(Hp_total.sector.matrix(k), Hm.sector.matrix(k))
    e, u = np.linalg.eigh(Hz)
    psi = u[:, 0]

    from Calculations import gen_fsa_basis, gram_schmidt
    fsa_dim = int(pxp.N)
    fsa_basis = gen_fsa_basis(Hp_total.sector.matrix(k), psi, fsa_dim)
    gs = gram_schmidt(fsa_basis)
    gs.ortho()
    fsa_basis = gs.ortho_basis

    exp_vals = np.zeros(np.size(fsa_basis, axis=1))
    for n in range(0, np.size(exp_vals, axis=0)):
        exp_vals[n] = np.real(exp(Hz, fsa_basis[:, n]))
    exp_diff = np.zeros(np.size(exp_vals) - 1)
    for n in range(0, np.size(exp_diff, axis=0)):
        exp_diff[n] = exp_vals[n + 1] - exp_vals[n]

    M = np.zeros((np.size(exp_diff), np.size(exp_diff)))
    for n in range(0, np.size(M, axis=0)):
        for m in range(0, np.size(M, axis=1)):
            M[n, m] = np.abs(exp_diff[n] - exp_diff[m])
    error = np.power(np.trace(np.dot(M, np.conj(np.transpose(M)))), 0.5)
    return error
def subspace_variance(coef):
    Hp_total = deepcopy(Hp[0])
    for n in range(1, len(Hp)):
        Hp_total = H_operations.add(Hp_total, Hp[n], np.array([1,
                                                               coef[n - 1]]))
    Hm = Hp_total.herm_conj()

    H = H_operations.add(Hp_total, Hm, np.array([1, 1]))
    H.sector.find_eig(k)

    Hz = 1 / 2 * com(Hp_total.sector.matrix(k), Hm.sector.matrix(k))
    e, u = np.linalg.eigh(Hz)
    psi = u[:, 0]

    from Calculations import gen_fsa_basis, gram_schmidt
    fsa_dim = int(pxp.N)
    fsa_basis = gen_fsa_basis(Hp_total.sector.matrix(k), psi, fsa_dim)
    gs = gram_schmidt(fsa_basis)
    gs.ortho()
    fsa_basis = gs.ortho_basis

    H2 = np.dot(H.sector.matrix(k), H.sector.matrix(k))
    H2_fsa = np.dot(np.conj(np.transpose(fsa_basis)), np.dot(H2, fsa_basis))
    H_fsa = np.dot(np.conj(np.transpose(fsa_basis)),
                   np.dot(H.sector.matrix(k), fsa_basis))
    subspace_variance = np.real(np.trace(H2_fsa - np.dot(H_fsa, H_fsa)))
    return subspace_variance
Example #4
0
def spacing_error(coef):
    Hp_total = deepcopy(Hp[0])
    for n in range(1, len(Hp)):
        Hp_total = H_operations.add(Hp_total, Hp[n], np.array([1,
                                                               coef[n - 1]]))
    Hm = Hp_total.herm_conj()
    Hz = 1 / 2 * com(Hp_total.sector.matrix(), Hm.sector.matrix())

    z = zm_state(2, 1, pxp, 1)
    from Calculations import gen_fsa_basis
    fsa_basis = gen_fsa_basis(Hp_total.sector.matrix(), z.prod_basis(), pxp.N)

    exp_vals = np.zeros(np.size(fsa_basis, axis=1))
    for n in range(0, np.size(exp_vals, axis=0)):
        exp_vals[n] = np.real(exp(Hz, fsa_basis[:, n]))
    exp_diff = np.zeros(np.size(exp_vals) - 1)
    for n in range(0, np.size(exp_diff, axis=0)):
        exp_diff[n] = exp_vals[n + 1] - exp_vals[n]

    M = np.zeros((np.size(exp_diff), np.size(exp_diff)))
    for n in range(0, np.size(M, axis=0)):
        for m in range(0, np.size(M, axis=1)):
            M[n, m] = np.abs(exp_diff[n] - exp_diff[m])
    error = np.power(np.trace(np.dot(M, np.conj(np.transpose(M)))), 0.5)
    return error
def spacing_error(coef, psi):
    Hp_total = deepcopy(Hp[0])
    for n in range(1, len(Hp)):
        Hp_total = H_operations.add(Hp_total, Hp[n], np.array([1,
                                                               coef[n - 1]]))
    Hm = np.conj(np.transpose(Hp_total.sector.matrix()))

    Hz = 1 / 2 * com(Hp_total.sector.matrix(), Hm)

    from Calculations import gen_fsa_basis
    fsa_basis = gen_fsa_basis(Hp_total.sector.matrix(), psi, pxp.N)

    Hz_exp = np.zeros(np.size(fsa_basis, axis=1))
    for n in range(0, np.size(fsa_basis, axis=1)):
        Hz_exp[n] = exp(Hz, fsa_basis[:, n])

    Hz_diff = np.zeros(np.size(Hz_exp) - 1)
    for n in range(0, np.size(Hz_diff, axis=0)):
        Hz_diff[n] = Hz_exp[n + 1] - Hz_exp[n]
    M = np.zeros((np.size(Hz_diff), np.size(Hz_diff)))
    for n in range(0, np.size(M, axis=0)):
        for m in range(0, np.size(M, axis=0)):
            M[n, m] = np.abs(Hz_diff[n] - Hz_diff[m])
    error = np.power(np.trace(np.dot(M, np.conj(np.transpose(M)))), 0.5)
    print(coef, error)
    return error
Example #6
0
def max_variance(coef):
    Hp_total = deepcopy(Hp[0])
    for n in range(1, len(Hp)):
        Hp_total = H_operations.add(Hp_total, Hp[n], np.array([1,
                                                               coef[n - 1]]))
    Hm = Hp_total.herm_conj()
    Hz = 1 / 2 * com(Hp_total.sector.matrix(), Hm.sector.matrix())

    z = zm_state(2, 1, pxp, 1)
    from Calculations import gen_fsa_basis
    fsa_basis = gen_fsa_basis(Hp_total.sector.matrix(), z.prod_basis(), pxp.N)

    var_vals = np.zeros(np.size(fsa_basis, axis=1))
    for n in range(0, np.size(var_vals, axis=0)):
        var_vals[n] = np.real(var(Hz, fsa_basis[:, n]))
    error = np.max(var_vals)
    return error
def var_error(coef, pxp_config, pxxxp_config):
    Hp = gen_Hp(pxp_config, pxxxp_config, coef)
    Hm = np.conj(np.transpose(Hp))

    H = Hp + Hm
    Hz = 1 / 2 * com(Hp, Hm)
    z = zm_state(2, 1, pxp, 1)
    fsa_basis = gen_fsa_basis(Hp, z.prod_basis(), pxp.N)
    gs = gram_schmidt(fsa_basis)
    gs.ortho()
    fsa_basis = gs.ortho_basis
    Hz_var = np.zeros(np.size(fsa_basis, axis=1))
    for n in range(0, np.size(Hz_var, axis=0)):
        Hz_var[n] = var(Hz, fsa_basis[:, n])
    # error = np.max(Hz_var)
    error = np.sum(Hz_var)
    print(coef, error)
    return error
Example #8
0
def subspace_variance(coef):
    coef = coef[0]
    Hp_total = deepcopy(Hp[0])
    Hp_total = H_operations.add(Hp_total,Hp[1],np.array([1,coef]))
    Hm = Hp_total.herm_conj()

    H = H_operations.add(Hp_total,Hm,np.array([1,1]))
    H.sector.find_eig()

    z=zm_state(2,2,pxp,1)
    from Calculations import gen_fsa_basis
    fsa_dim = 2*pxp.N
    fsa_basis = gen_fsa_basis(Hp_total.sector.matrix(),z.prod_basis(),fsa_dim)

    H2 = np.dot(H.sector.matrix(),H.sector.matrix())
    H2_fsa = np.dot(np.conj(np.transpose(fsa_basis)),np.dot(H2,fsa_basis))
    H_fsa = np.dot(np.conj(np.transpose(fsa_basis)),np.dot(H.sector.matrix(),fsa_basis))
    subspace_variance = np.real(np.trace(H2_fsa-np.dot(H_fsa,H_fsa)))
    return subspace_variance
Example #9
0
def max_variance(coef):
    Hp_total = deepcopy(Hp[0])
    for n in range(1,len(Hp)):
        Hp_total = H_operations.add(Hp_total,Hp[n],np.array([1,coef[n-1]]))
    Hm = Hp_total.herm_conj()
    Hz = 1/2 * com(Hp_total.sector.matrix(),Hm.sector.matrix())
    e,u = np.linalg.eigh(Hz)
    psi = u[:,0]

    from Calculations import gen_fsa_basis,gram_schmidt
    fsa_dim = int(pxp.N)
    fsa_basis = gen_fsa_basis(Hp_total.sector.matrix(),psi,fsa_dim)
    gs = gram_schmidt(fsa_basis)
    gs.ortho()
    fsa_basis = gs.ortho_basis

    var_vals = np.zeros(np.size(fsa_basis,axis=1))
    for n in range(0,np.size(var_vals,axis=0)):
        var_vals[n] = np.real(var(Hz,fsa_basis[:,n]))
    error = np.max(var_vals)
    return error
def spacing_error(coef, pxp_config, pxxxp_config):
    Hp = gen_Hp(pxp_config, pxp_config, coef)
    Hm = np.conj(np.transpose(Hp))

    Hz = 1 / 2 * com(Hp, Hm)

    #find lowest weight state
    e, u = np.linalg.eigh(Hz)
    lowest_weight = u[:, 0]

    z = zm_state(2, 1, pxp, 1)
    fsa_basis = gen_fsa_basis(Hp, z.prod_basis(), pxp.N)
    gs = gram_schmidt(fsa_basis)
    gs.ortho()
    fsa_basis = gs.ortho_basis

    if np.size(np.shape(fsa_basis)) == 2:
        Hz_exp = np.zeros(np.size(fsa_basis, axis=1))
        for n in range(0, np.size(Hz_exp, axis=0)):
            Hz_exp[n] = exp(Hz, fsa_basis[:, n])

        Hz_diff = np.zeros(np.size(Hz_exp) - 1)
        for n in range(0, np.size(Hz_diff, axis=0)):
            Hz_diff[n] = np.abs(Hz_exp[n + 1] - Hz_exp[n])

        #spacing error
        error_matrix = np.zeros((np.size(Hz_diff), np.size(Hz_diff)))
        for n in range(0, np.size(error_matrix, axis=0)):
            for m in range(0, np.size(error_matrix, axis=0)):
                error_matrix[n, m] = np.abs(Hz_diff[n] - Hz_diff[m])
        error = np.power(
            np.trace(np.dot(error_matrix,
                            np.conj(np.transpose(error_matrix)))), 0.5)
        print(coef, error)
        return error
    else:
        return 1000
coef = np.load("./pxxxp,1stOrder,coef,12.npy")
# coef = np.zeros(len(Hp)-1)
Hp_total = deepcopy(Hp[0])
for n in range(1,len(Hp)):
    Hp_total = H_operations.add(Hp_total,Hp[n],np.array([1,coef[n-1]]))
Hm = Hp_total.herm_conj()

H = H_operations.add(Hp_total,Hm,np.array([1,1]))
H.sector.find_eig(k[0])
eig_overlap(z,H,k[0]).plot(tol=-15)
plt.show()
fidelity(z,H,"use sym").plot(np.arange(0,20,0.01),z)
plt.show()

from Calculations import gen_fsa_basis
fsa_basis = gen_fsa_basis(Hp_total.sector.matrix(k[0]),z.sym_basis(k[0],pxp_syms),int(2*pxp.N/4))
H_fsa = np.dot(np.conj(np.transpose(fsa_basis)),np.dot(H.sector.matrix(k[0]),fsa_basis))
e,u = np.linalg.eigh(H_fsa)
overlap_fsa = np.log10(np.abs(u[0,:])**2)

exact_overlap = eig_overlap(z,H,k[0]).eval()
plt.scatter(H.sector.eigvalues(k[0]),exact_overlap)
plt.scatter(e,overlap_fsa,marker="x",color="red",s=100)
plt.show()
t=np.arange(0,20,0.01)
f = fidelity(z,H,"use sym").eval(t,z)
plt.plot(t,f)
plt.show()

u_comp = np.dot(fsa_basis,u)
fsa_exact_overlap = np.zeros(np.size(u_comp,axis=1))
Example #12
0
Hp = np.zeros((pxp.dim, pxp.dim))
for n in range(0, np.size(pxp.basis, axis=0)):
    bits = np.copy(pxp.basis[n])
    for m in range(0, pxp.N):
        if bits[m] == 2:
            new_bits = np.copy(bits)
            new_bits[m] = 0
            new_ref = bin_to_int_base_m(new_bits, pxp.base)
            Hp[pxp.keys[new_ref], n] += 2 * (-1)**m
Hm = np.conj(np.transpose(Hp))
Hx = 1 / 2 * (Hp + Hm)

#scarred eigenstates
psi = ref_state(0, pxp).prod_basis()
from Calculations import gen_fsa_basis
fsa_basis = gen_fsa_basis(Hm, psi, pxp.N)

H0 = Hamiltonian(pxp)
H0.site_ops[1] = x
H0.site_ops[2] = y
H0.site_ops[3] = z
H0.site_ops[4] = z2
H0.model = np.array([[1, 1], [2, 2]])
H0.model_coef = np.array([J, J])
H0.gen()

H1 = Hamiltonian(pxp)
H1.site_ops[1] = x
H1.site_ops[2] = y
H1.site_ops[3] = z
H1.site_ops[4] = z2
Example #13
0
Hp_test.gen()
from Hamiltonian_Classes import H_operations
Hp_test = H_operations.add(Hp_test0, Hp_test, np.array([1, coef_f0]))
print((np.abs(Hp_test.sector.matrix() - Hp) < 1e-5).all())

Hz = 1 / 2 * com(Hp, Hm)

e, u = np.linalg.eigh(Hz)
z = zm_state(2, 1, pxp, 1)
lw = u[:, 0]
print("\n|<lw | Z_2 > |")
print(np.abs(np.vdot(lw, z.prod_basis())))
print("\n")

from Calculations import gen_fsa_basis, gram_schmidt
fsa_basis = gen_fsa_basis(Hp, z.prod_basis(), pxp.N)
gs = gram_schmidt(fsa_basis)
gs.ortho()
fsa_basis = gs.ortho_basis

Hz_exp = np.zeros(np.size(fsa_basis, axis=1))
Hz_var = np.zeros(np.size(fsa_basis, axis=1))
print("Exp/Var")
for n in range(0, np.size(Hz_exp, axis=0)):
    Hz_exp[n] = exp(Hz, fsa_basis[:, n])
    Hz_var[n] = var(Hz, fsa_basis[:, n])
    print(Hz_exp[n], Hz_var[n])

print("\n Spacing")
Hz_diff = np.zeros(np.size(Hz_exp) - 1)
for n in range(0, np.size(Hz_diff, axis=0)):
Example #14
0
H.model_coef = np.array([1])
H.gen()

Hp = Hamiltonian(pxp, pxp_syms)
Hp.site_ops[1] = np.array([[0, 0], [1, 0]])
Hp.site_ops[2] = np.array([[0, 1], [0, 0]])
Hp.model = np.array([[0, 1, 2, 1, 0], [0, 2, 1, 2, 0], [0, 2, 1, 2, 0],
                     [0, 1, 2, 1, 0]])
Hp.model_coef = np.array([1, 1, 1, 1])
Hp.uc_size = np.array([4, 4, 4, 4])
Hp.uc_pos = np.array([2, 3, 0, 1])
Hp.gen()

from Calculations import gen_fsa_basis
z = zm_state(4, 1, pxp)
fsa_basis = gen_fsa_basis(Hp.sector.matrix(), z.prod_basis(),
                          int(2 * pxp.N / 4))
print(np.shape(fsa_basis))
H_fsa = np.dot(np.conj(np.transpose(fsa_basis)),
               np.dot(H.sector.matrix(), fsa_basis))
e, u = np.linalg.eigh(H_fsa)
fsa_energy = e
fsa_overlap = np.log10(np.abs(u[0, :])**2)
plt.scatter(fsa_energy, fsa_overlap, marker="x", color="red", s=100)
H.sector.find_eig()
eig_overlap(z, H).plot(tol=-10)
plt.show()

H.sector.find_eig()
ent = entropy(pxp)
ent_vals = np.zeros(pxp.dim)
for n in range(0, np.size(pxp.basis, axis=0)):
Example #15
0
# exact_energy = []
# exact_overlap = []
# for n in range(0,np.size(k,axis=0)):
    # H.sector.find_eig(k[n])
    # exact_energy = np.append(exact_energy,H.sector.eigvalues(k[n]))
    # exact_overlap = np.append(exact_overlap,eig_overlap(z,H,k[n]).eval())
# t=np.arange(0,20,0.01)
# f = fidelity(z,H,"use sym").eval(t,z)
# plt.scatter(exact_energy,exact_overlap)
# plt.show()
# plt.plot(t,f)
# plt.show()

fsa_dim = 2*pxp.N
from Calculations import gen_fsa_basis
fsa_basis = gen_fsa_basis(Hp_total.sector.matrix(),z.prod_basis(),fsa_dim)
H_fsa = np.dot(np.conj(np.transpose(fsa_basis)),np.dot(H.sector.matrix(),fsa_basis))

# # H.sector.find_eig()
# # exact_overlap = eig_overlap(z,H).eval()
# # exact_energy = H.sector.eigvalues()

e,u = np.linalg.eigh(H_fsa)
fsa_overlap = np.log10(np.abs(u[0,:])**2)
fsa_energy = e

# plt.scatter(exact_energy,exact_overlap)
# plt.scatter(fsa_energy,fsa_overlap,marker="x",color="red",s=100)
# plt.show()

# t=np.arange(0,20,0.01)
Example #16
0
pbar = ProgressBar()
for n in pbar(range(0, np.size(ent_vals, axis=0))):
    ent_vals[n] = ent.eval(eigvectors[:, n])

Hp = Hamiltonian(pxp, pxp_syms)
Hp.site_ops[1] = np.array([[0, 0], [1, 0]])
Hp.site_ops[2] = np.array([[0, 1], [0, 0]])
Hp.model = np.array([[0, 1, 2, 1, 0], [0, 2, 1, 2, 0], [0, 2, 1, 2, 0],
                     [0, 1, 2, 1, 0]])
Hp.model_coef = np.array([1, 1, 1, 1])
Hp.uc_size = np.array([4, 4, 4, 4])
Hp.uc_pos = np.array([2, 3, 0, 1])
Hp.gen()
H.gen()
from Calculations import gen_fsa_basis
fsa_basis = gen_fsa_basis(Hp.sector.matrix(), z.prod_basis(), pxp.N)
H_fsa = np.dot(np.conj(np.transpose(fsa_basis)),
               np.dot(H.sector.matrix(), fsa_basis))
efsa, ufsa = np.linalg.eigh(H_fsa)
u_comp = np.dot(fsa_basis, ufsa)
ent_fsa = np.zeros(np.size(u_comp, axis=1))
for n in range(0, np.size(ent_fsa, axis=0)):
    ent_fsa[n] = ent.eval(u_comp[:, n])

plt.scatter(eigvalues, ent_vals)
plt.scatter(efsa, ent_fsa, marker="x", color="red", s=100)
plt.xlabel(r"$E$")
plt.ylabel(r"$S$")
plt.title(r"$PXXXP$ $\vert Z_4 \rangle$ Sector, Bipartite Entropy, N=" +
          str(pxp.N))
plt.show()
# # np.save("couplings2ising,pert_coef,"+str(pxp.N),coef)
# np.save("NEWising,pert_coef,"+str(pxp.N),coef)
# # coef = 0

Hp_total = deepcopy(Hp[0])
for n in range(1, len(Hp)):
    Hp_total = H_operations.add(Hp_total, Hp[n], np.array([1, coef[n - 1]]))
Hm = Hp_total.herm_conj()
Hz = 1 / 2 * com(Hp_total.sector.matrix(), Hm.sector.matrix())
e, u = np.linalg.eigh(Hz)
psi = u[:, 0]

# np.save("xy,pert,lw_state,"+str(pxp.N),psi)

from Calculations import gen_fsa_basis, gram_schmidt
fsa_basis = gen_fsa_basis(Hp_total.sector.matrix(), psi, pxp.N)
gs = gram_schmidt(fsa_basis)
gs.ortho()
fsa_basis = gs.ortho_basis

Hz_exp = np.zeros(np.size(fsa_basis, axis=1))
Hz_var = np.zeros(np.size(fsa_basis, axis=1))
print("\nExp/Var")
for n in range(0, np.size(fsa_basis, axis=1)):
    Hz_exp[n] = exp(Hz, fsa_basis[:, n])
    Hz_var[n] = var(Hz, fsa_basis[:, n])
    print(Hz_exp[n], Hz_var[n])

print("\nHz Spacing")
Hz_diff = np.zeros(np.size(Hz_exp) - 1)
for n in range(0, np.size(Hz_diff, axis=0)):
Example #18
0
plt.scatter(exact_energy, exact_overlap)
plt.show()
t = np.arange(0, 20, 0.01)
f = np.zeros(np.size(t))
for n in range(0, np.size(t, axis=0)):
    evolved_state = time_evolve_state(psi_energy, H.sector.eigvalues(k), t[n])
    f[n] = np.abs(np.vdot(evolved_state, psi_energy)**2)
plt.plot(t, f)
plt.xlabel(r"$t$")
plt.ylabel(r"$\vert \langle \psi(0) \vert \psi(t) \rangle \vert^2$")
plt.title(r"Ising, SU(2) Perts (No repeated terms), N=" + str(pxp.N))
plt.show()

fsa_dim = int(pxp.N)
from Calculations import gen_fsa_basis, gram_schmidt
fsa_basis = gen_fsa_basis(Hp_total.sector.matrix(k), psi, fsa_dim)
gs = gram_schmidt(fsa_basis)
gs.ortho()
fsa_basis = gs.ortho_basis
H_fsa = np.dot(np.conj(np.transpose(fsa_basis)),
               np.dot(H.sector.matrix(k), fsa_basis))

e, u = np.linalg.eigh(H_fsa)
fsa_overlap = np.log10(np.abs(u[0, :])**2)
fsa_energy = e

plt.scatter(exact_energy, exact_overlap)
plt.scatter(fsa_energy, fsa_overlap, marker="x", color="red", s=100)
plt.xlabel(r"$E$")
plt.ylabel(r"$\log(\vert \langle \psi \vert E \rangle \vert^2)$")
plt.title(r"Ising, SU(2) Perts (No repeated terms), N=" + str(pxp.N))
Example #19
0
z = zm_state(2, 1, pxp, 1)
e, u = np.linalg.eigh(H)
overlap = np.log10(np.abs(u[pxp.keys[z.ref], :])**2)
psi_energy = np.conj(u[pxp.keys[z.ref], :])
t = np.arange(0, 20, 0.01)
f = np.zeros(np.size(t))
for n in range(0, np.size(t, axis=0)):
    evolved_state = time_evolve_state(psi_energy, e, t[n])
    f[n] = np.abs(np.vdot(evolved_state, psi_energy))**2
plt.plot(t, f)
plt.show()

from Calculations import gen_fsa_basis
# fsa_basis = gen_fsa_basis(Hp,z.prod_basis(),int(2*pxp.N/3))
fsa_basis = gen_fsa_basis(Hp, z.prod_basis(), int(pxp.N))
H_fsa = np.dot(np.conj(np.transpose(fsa_basis)), np.dot(H, fsa_basis))

to_del = []
for n in range(0, np.size(overlap, axis=0)):
    if overlap[n] < -10:
        to_del = np.append(to_del, n)
for n in range(np.size(to_del, axis=0) - 1, -1, -1):
    overlap = np.delete(overlap, to_del[n])
    e = np.delete(e, to_del[n])

e_fsa, u_fsa = np.linalg.eigh(H_fsa)
overlap_fsa = np.log10(np.abs(u_fsa[0, :])**2)

plt.scatter(e, overlap)
plt.scatter(e_fsa, overlap_fsa, marker="x", color="red", s=100, label="FSA")
Example #20
0
    for m in range(0,np.size(k,axis=0)):
        Hp[n].gen(k[m])

# coef = np.zeros(9)
coef = np.load("../../../../pxp,2nd_order_perts/z2/data/all_terms/18/18_all_terms/pxp,z2,2nd_order_perts,fid_coef,18.npy")
# coef[0] = 0.108
Hp_total = deepcopy(Hp[0])
for n in range(1,len(Hp)):
    Hp_total = H_operations.add(Hp_total,Hp[n],np.array([1,coef[n-1]]))
Hm = Hp_total.herm_conj()

H = H_operations.add(Hp_total,Hm,np.array([1,1]))
z=zm_state(2,1,pxp,1)
fsa_dim = pxp.N
from Calculations import gen_fsa_basis
fsa_basis = gen_fsa_basis(Hp_total.sector.matrix(k[0]),z.sym_basis(k[0],pxp_syms),fsa_dim)
H_fsa = np.dot(np.conj(np.transpose(fsa_basis)),np.dot(H.sector.matrix(k[0]),fsa_basis))

H.sector.find_eig(k[0])
exact_overlap = eig_overlap(z,H,k[0]).eval()
exact_energy = H.sector.eigvalues(k[0])

e,u = np.linalg.eigh(H_fsa)
fsa_overlap = np.log10(np.abs(u[0,:])**2)
fsa_energy = e

plt.scatter(exact_energy,exact_overlap)
plt.scatter(fsa_energy,fsa_overlap,marker="x",color="red",s=100)
plt.show()

t=np.arange(0,20,0.01)