Измерить компоненты Блоха
Определите компоненты Блоха кубита — средние значения X,Y,Z. Измерять непосредственно можно в вычислительном базисе Z; перед измерением X или Y нужно изменить базис. Для разных средних нужны отдельные подготовки одинакового состояния и многократные измерения.
1. Для произвольного кубита $|q\rangle$ выразите средние X,Y,Z в вычислительном базисе. Автор даёт пример: $\langle Z\rangle=|\langle0|q\rangle|^2-|\langle1|q\rangle|^2$. Заполните аналогичные выражения для X и Y.
2. Измерьте координаты сферы Блоха на qasm_simulator и изобразите вектор:
A. Создайте состояние методом initialize с двумя случайными комплексными числами. Для допустимого состояния их нужно нормировать.
B. Постройте измерительные схемы X,Y,Z по ответу на пункт 1. Схема Z дана. По $2^{14}$ измерениям оцените каждую компоненту как p(0)−p(1); исходный код затем нормирует полученный вектор.
C. Постройте вектор на сфере Блоха. Автор разрешает статическую plot_bloch_vector вместо интерактивной kaleidoscope. Исходная заметка: интерактивный вариант требует подходящей среды IQX или установки kaleidoscope и перезапуска ядра; команда автора — pip install kaleidoscope.
Это все пункты и шаги первой части лабораторной; конкретный случайный вектор автор не фиксирует.
Исходные определения и заготовки (код сохранён без исполнения):
from qiskit import *
import numpy as np
from numpy import linalg as la
from qiskit.tools.monitor import job_monitor
import qiskit.tools.jupyter
qc = QuantumCircuit(1)
#### your code goes here
# z measurement of qubit 0
measure_z = QuantumCircuit(1,1)
measure_z.measure(0,0)
# x measurement of qubit 0
measure_x = QuantumCircuit(1,1)
# your code goes here
# y measurement of qubit 0
measure_y = QuantumCircuit(1,1)
# your code goes here
shots = 2**14 # number of samples used for statistics
sim = Aer.get_backend('qasm_simulator')
bloch_vector_measure = []
for measure_circuit in [measure_x, measure_y, measure_z]:
# run the circuit with a the selected measurement and get the number of samples that output each bit value
counts = execute(qc+measure_circuit, sim, shots=shots).result().get_counts()
# calculate the probabilities for each bit value
probs = {}
for output in ['0','1']:
if output in counts:
probs[output] = counts[output]/shots
else:
probs[output] = 0
bloch_vector_measure.append( probs['0'] - probs['1'] )
# normalizing the bloch sphere vector
bloch_vector = bloch_vector_measure/la.norm(bloch_vector_measure)
print('The bloch sphere coordinates are [{0:4.3f}, {1:4.3f}, {2:4.3f}]'
.format(*bloch_vector))
from kaleidoscope.interactive import bloch_sphere
bloch_sphere(bloch_vector, vectors_annotation=True)
from qiskit.visualization import plot_bloch_vector
plot_bloch_vector( bloch_vector )