some stuff for numerical solution

This commit is contained in:
Daniel Knüttel 2020-02-24 12:06:33 +01:00
parent b12eb4da78
commit 5dde04c2ca
2 changed files with 20 additions and 3 deletions

View File

@ -11,6 +11,7 @@ def Mi(nqbits, i, M):
result = np.kron(result, I) result = np.kron(result, I)
else: else:
result = np.kron(result, M) result = np.kron(result, M)
return result
@ -23,5 +24,5 @@ def H_field(nqbits, g):
return sum(field_terms) return sum(field_terms)
def H(nqbits, g): def H(nqbits, g):
return (-H_interaction + H_field).real return (-H_interaction(nqbits) + H_field(nqbits, g)).real

View File

@ -5,6 +5,8 @@ from pyqcs import State, sample
from transfer_matrix import T_time_slice from transfer_matrix import T_time_slice
from hamiltonian import H from hamiltonian import H
from scipy.linalg import expm
nqbits = 4 nqbits = 4
g = 0.5 g = 0.5
N = 400 N = 400
@ -17,6 +19,7 @@ measure = 0b10
results_qc = [] results_qc = []
results_np = []
print() print()
for t in np.arange(0, t_stop, delta_t): for t in np.arange(0, t_stop, delta_t):
# QC simulation # QC simulation
@ -30,14 +33,27 @@ for t in np.arange(0, t_stop, delta_t):
results_qc.append(result[0] / n_sample) results_qc.append(result[0] / n_sample)
# Simulation using matrices # Simulation using matrices
#np_ np_zero_state = np.zeros(2**nqbits)
np_zero_state[0] = 1
T = expm(-1j * t * H(nqbits, g))
#for Tv in T:
# print(np.sum(np.abs(Tv)))
# assert np.isclose(np.sum(np.abs(Tv)), 1)
np_state = T.dot(np_zero_state)
amplitude = np.sum(np.abs(np_state[[False if (i & measure) else True for i in range(2**nqbits)]]))
results_np.append(amplitude)
print(f"simulating... {int(t/t_stop*100)} % ", end="\r") print(f"simulating... {int(t/t_stop*100)} % ", end="\r")
print() print()
print("done.") print("done.")
plt.plot(np.arange(0, t_stop, delta_t), results_qc) h0, = plt.plot(np.arange(0, t_stop, delta_t), results_qc, label=f"Quantum computing {n_sample} samples")
h1, = plt.plot(np.arange(0, t_stop, delta_t), results_np, label="Classical simulation using explicit transfer matrix")
plt.xlabel("t") plt.xlabel("t")
plt.ylabel(r"$|0\rangle$ probability amplitude for second spin") plt.ylabel(r"$|0\rangle$ probability amplitude for second spin")
plt.title(f"{nqbits} site spin chain with g={g} coupling to external field") plt.title(f"{nqbits} site spin chain with g={g} coupling to external field")
plt.legend(handles=[h0, h1])
plt.show() plt.show()