Эволюция по двум проекторам
Постройте схемы эволюции состояния по гамильтониану. Дано $H=|0\rangle\langle0|+|+\rangle\langle+|$ и $|\psi(0)\rangle=|+\rangle$. Физическое состояние находится в q0, вспомогательный q1 изначально в 0; желаемая эволюция — $e^{-i\theta H}|+\rangle$.
1. Постройте схемы для слагаемых гамильтониана.
A. Покажите, что данный H1 из CNOT(0,1),P(π/9,1),CNOT(0,1) выполняет $e^{-i(\pi/9)|0\rangle\langle0|}$ на q0 при нулевом вспомогательном q1.
B. Дополните h2, чтобы H2 выполнял $e^{-i(\pi/9)|+\rangle\langle+|}$ на q0 при том же нулевом q1.
2. Выполните исходную программу: после каждой из семи пар H1,H2 извлекайте состояние q0 и сохраняйте в myst, затем рассмотрите траекторию на сфере Блоха. Автор описывает её как движение от + к 0 и мимо него. Готовая исходная сфера находится в разборе. Дополнительно можно использовать интерактивную kaleidoscope в подходящей среде.
Все определения и первоначальная h1 сохранены в условии. Точное равенство утверждения пункта A и точность произведения двух эволюций нужно оценивать с учётом общей фазы и некоммутирующих слагаемых; исходная формулировка сохранена в original.
Исходные определения и заготовки (код сохранён без исполнения):
from qiskit import *
from qiskit.quantum_info import Statevector, partial_trace
from qiskit.visualization import plot_state_qsphere, plot_histogram
import numpy as np
import matplotlib.pyplot as plt
import scipy.linalg as la
sim = Aer.get_backend('qasm_simulator')
h1 = QuantumCircuit(2, name = 'H1')
h1.cnot(0, 1)
h1.p(np.pi/9, 1)
h1.cnot(0, 1)
H1 = h1.to_gate()
h1.draw()
h2 = QuantumCircuit(2, name='H2')
#### Your code goes here ###
#############################
H2 = h2.to_gate()
h2.draw()
from qiskit.quantum_info import Statevector, partial_trace
def st_out(qc):
out = Statevector.from_instruction(qc)
out_red = partial_trace(out, [1])
prob, st_all = la.eig(out_red.data)
cond = (prob>0.99) & (prob<1.01)
st = st_all[:, cond].ravel()
return(st)
myst = []
circ = QuantumCircuit(2)
circ.h(0)
st = st_out(circ)
myst.append(Statevector(st))
for _ in range(7):
circ.append(H1, range(2))
circ.append(H2, range(2))
st = st_out(circ)
myst.append(Statevector(st))
circ.draw()
from kaleidoscope import bloch_sphere
from matplotlib.colors import LinearSegmentedColormap, rgb2hex
cm = LinearSegmentedColormap.from_list('graypurple', ["#999999", "#AA00FF"])
vectors_color = [rgb2hex(cm(kk)) for kk in np.linspace(-1,1,len(myst))]
bloch_sphere(myst, vectors_color = vectors_color)
Сообщить об ошибке
Войти, чтобы отправить материал.