№ 2069Квантовые вычисленияУровень 3

Измерить компоненты Блоха

Определите компоненты Блоха кубита — средние значения 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 )

Сообщить об ошибке

Войти, чтобы отправить материал.