some changes to the spin chain stuff
This commit is contained in:
parent
a0afd2aeb1
commit
eb8eddc959
|
@ -7,14 +7,14 @@ from hamiltonian import H
|
||||||
|
|
||||||
from scipy.linalg import expm
|
from scipy.linalg import expm
|
||||||
|
|
||||||
nqbits = 4
|
nqbits = 2
|
||||||
g = 0.5
|
g = 0.20
|
||||||
N = 400
|
N = 50
|
||||||
t_stop = 9
|
t_stop = 9
|
||||||
delta_t = 0.05
|
delta_t = 0.05
|
||||||
qbits = list(range(nqbits))
|
qbits = list(range(nqbits))
|
||||||
|
|
||||||
n_sample = 200
|
n_sample = 400
|
||||||
measure = 0b10
|
measure = 0b10
|
||||||
|
|
||||||
|
|
||||||
|
@ -28,27 +28,32 @@ for t in np.arange(0, t_stop, delta_t):
|
||||||
for _ in range(N):
|
for _ in range(N):
|
||||||
state = T_time_slice(qbits, t, g, N) * state
|
state = T_time_slice(qbits, t, g, N) * state
|
||||||
|
|
||||||
result = sample(state, measure, n_sample)
|
#result = sample(state, measure, n_sample)
|
||||||
|
|
||||||
results_qc.append(result[0] / n_sample)
|
#results_qc.append(result[0] / n_sample)
|
||||||
|
|
||||||
|
amplitude = np.sqrt(np.sum(np.abs(state._qm_state[[False if (i & measure) else True for i in range(2**nqbits)]])**2))
|
||||||
|
results_qc.append(amplitude)
|
||||||
|
|
||||||
# Simulation using matrices
|
# Simulation using matrices
|
||||||
np_zero_state = np.zeros(2**nqbits)
|
np_zero_state = np.zeros(2**nqbits)
|
||||||
np_zero_state[0] = 1
|
np_zero_state[0] = 1
|
||||||
|
|
||||||
T = expm(-1j * t * H(nqbits, g))
|
itH = np.matrix(-1j * t * H(nqbits, g))
|
||||||
#for Tv in T:
|
T = expm(itH)
|
||||||
# print(np.sum(np.abs(Tv)))
|
|
||||||
# assert np.isclose(np.sum(np.abs(Tv)), 1)
|
|
||||||
np_state = T.dot(np_zero_state)
|
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)]]))
|
amplitude = np.sqrt(np.sum(np.abs(np_state[[False if (i & measure) else True for i in range(2**nqbits)]])**2))
|
||||||
results_np.append(amplitude)
|
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.")
|
||||||
|
|
||||||
h0, = plt.plot(np.arange(0, t_stop, delta_t), results_qc, label=f"Quantum computing {n_sample} samples")
|
errors_trotter = np.arange(0, t_stop, delta_t)**2 / N**2
|
||||||
|
|
||||||
|
|
||||||
|
h0 = plt.errorbar(np.arange(0, t_stop, delta_t), results_qc, yerr=errors_trotter, label=f"Quantum computing ({n_sample} samples, {N} trotterization steps)")
|
||||||
h1, = plt.plot(np.arange(0, t_stop, delta_t), results_np, label="Classical simulation using explicit transfer matrix")
|
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")
|
||||||
|
|
Loading…
Reference in New Issue
Block a user