diff --git a/presentation/spin_chain/time_evolution.py b/presentation/spin_chain/time_evolution.py index 712d65f..74db889 100644 --- a/presentation/spin_chain/time_evolution.py +++ b/presentation/spin_chain/time_evolution.py @@ -7,14 +7,14 @@ from hamiltonian import H from scipy.linalg import expm -nqbits = 4 -g = 0.5 -N = 400 +nqbits = 2 +g = 0.20 +N = 50 t_stop = 9 delta_t = 0.05 qbits = list(range(nqbits)) -n_sample = 200 +n_sample = 400 measure = 0b10 @@ -28,27 +28,32 @@ for t in np.arange(0, t_stop, delta_t): for _ in range(N): 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 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) + itH = np.matrix(-1j * t * H(nqbits, g)) + T = expm(itH) + 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) print(f"simulating... {int(t/t_stop*100)} % ", end="\r") print() 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") plt.xlabel("t") plt.ylabel(r"$|0\rangle$ probability amplitude for second spin")