Перейти до основного вмісту

Експеримент Штерна–Герлаха на квантових комп'ютерах

Для цього модуля Qiskit in Classrooms студенти повинні мати налаштоване середовище Python із такими встановленими пакетами:

  • qiskit v2.1.0 або новіший
  • qiskit-ibm-runtime v0.40.1 або новіший
  • qiskit-aer v0.17.0 або новіший
  • qiskit.visualization
  • numpy
  • pylatexenc

Щоб налаштувати та встановити зазначені пакети, перегляньте посібник Встановлення Qiskit. Для запуску завдань на справжніх квантових комп'ютерах студентам потрібно створити обліковий запис IBM Quantum®, дотримуючись кроків із посібника Налаштування облікового запису IBM Cloud.

Цей модуль було протестовано, і він використав 2 секунди часу QPU. Це лише оцінка. Фактичне споживання може відрізнятися.

# Added by doQumentation — required packages for this notebook
!pip install -q numpy qiskit qiskit-aer qiskit-ibm-runtime
# Uncomment and modify this line as needed to install dependencies
#!pip install 'qiskit>=2.1.0' 'qiskit-ibm-runtime>=0.40.1' 'qiskit-aer>=0.17.0' 'numpy' 'pylatexenc'

Переглянь відео-огляд модуля від д-ра Кейті МакКормік нижче, або натисни тут, щоб переглянути його на YouTube.


Передісторія

На початку 1900-х років дедалі більше накопичувались свідчення квантованої поведінки на атомних масштабах. Багато успішних інтерпретацій даних — наприклад, пояснення Максом Планком ультрафіолетової катастрофи — а також такі експерименти, як дослід Отто Штерна і Вальтера Герлаха, відіграли вирішальну роль у переконанні наукового світу в тому, що квантова механіка необхідна, і що певні фізичні явища є квантованими. Мета експерименту Штерна–Герлаха (задуманого Штерном у 1921 році та проведеного Штерном і Герлахом у 1922 році) полягала в перевірці квантування кутового моменту в атомах.

Приблизно в той самий час панівною моделлю атома була модель Бора–Зоммерфельда — розширення моделі Бора. Як і модель Бора, вона передбачала, що електрони існують на певних квантованих орбітах, схожих на орбіти планет навколо Сонця.

Схема моделі Бора–Зоммерфельда. Центральна точка — ядро атома. Кола або еліпси навколо неї — атомні орбіталі, дуже схожі на планетарні орбіти навколо Сонця. Орбіти з вищою енергією розташовані далі від ядра.

Хоча врешті-решт цей підхід виявився недостатнім для пояснення квантово-механічної поведінки атома, загалом він передбачав багато спостережуваних явищ — наприклад, дискретні спектральні лінії атомів. Квантовані орбіти електронів із певними енергіями відповідають квантованим значенням кутового моменту. Саме цей орбітальний кутовий момент Штерн і Герлах прагнули спостерігати у своєму експерименті, хоча сам дослід застосовується до будь-якого типу квантованого кутового моменту, включно зі спіном. Про експеримент Штерна–Герлаха часто говорять у контексті спінів. Оригінальний експеримент був зосереджений на орбітальному кутовому моменті просто тому, що Джордж Уленбек і Самуель Гаудсміт висунули теорію існування спіну лише у 1925 році.

Незалежно від типу кутового моменту, заряд із кутовим моментом має магнітний момент. У класичному трактуванні орбітального руху від частинки із зарядом qq, масою mm і кутовим моментом L\vec{L} очікують магнітного моменту μ\mu, що визначається формулою

μ=q2mL\vec{\mu} = \frac{q}{2m}\vec{L}

Виявляється, майже така ж формула справджується і для квантово-механічного кутового моменту — з тим застереженням, що додається числовий коефіцієнт, пов'язаний із типом кутового моменту, який називають g-фактором gg. Поєднуючи різні типи кутового моменту або узагальнюючи до довільного типу, часто використовують J\vec{J} замість L\vec{L}, тому записуємо:

μ=gq2mJ\vec{\mu} = \frac{gq}{2m}\vec{J}

Для класичних об'єктів g=1g=1. Для електронів g2g\approx 2, а для різних ядер і субатомних частинок значення g-фактора різноманітні. Головний висновок тут такий: квантований кутовий момент означає квантований магнітний момент!

Цей магнітний момент зазнаватиме моменту сили в магнітному полі:

τ=μ×B\vec{\tau}=\vec{\mu}\times \vec{B}

І він зазнаватиме сили в магнітному полі з ненульовим градієнтом:

F=(μB)\vec{F} = \nabla(\vec{\mu}\cdot\vec{B})

Ми часто розглядатимемо наведений вираз покомпонентно, тому зручно звернутися до його zz-компоненти:

Fz=μzdBzdzF_z = \mu_z \frac{dB_z}{dz}

Поєднуючи вирази, отримаємо:

Fz=gq2mdBzdzJzF_z = \frac{gq}{2m} \frac{dB_z}{dz} J_z

Штерн і Герлах не знали про g-фактор, але навіть із ним у виразі маємо силу, рівну добутку декількох відомих або вимірюваних констант і кутового моменту. Отже, використовуючи магнітне поле з відомим градієнтом та вимірюючи відхилення частинки під час проходження через це поле, можна отримати інформацію про кутовий момент. Це і є суть експерименту Штерна–Герлаха.

Атоми срібла, що рухаються крізь неоднорідне магнітне поле і відхиляються вгору або вниз залежно від свого спіну. Класично ми очікували б неперервного розподілу на екрані, але в експерименті спостерігаємо дві окремі точки.

Мал. Експеримент Штерна–Герлаха[1]: атоми срібла рухаються крізь неоднорідне магнітне поле і відхиляються вгору або вниз залежно від свого спіну. Класично ми очікували б неперервного розподілу на екрані, але в експерименті спостерігаємо дві окремі точки.

Нейтральні атоми срібла нагрівались у печі. Коли пучок атомів срібла вилітав із печі, коліматори пучка відбирали лише ті атоми, що рухалися поблизу центру неоднорідного магнітного поля. Звичайно, деякі атоми трохи відхилялися вліво або вправо й потрапляли в область зі слабшим градієнтом поля або зовсім без нього. Тому поведінку атомів далеко від центру нас особливо не цікавить. Нас цікавить те, що відбувається з атомами, що рухаються вздовж центру каналу, де градієнт магнітного поля зумовлює силу, яка відхиляє атоми лише у zz-напрямку.

Чого очікувати з класичної точки зору?

Як поводилися б ці атоми, якби вони були зовсім звичайними класичними магнітами? Можна провести такий уявний експеримент. Уяви, що ти стріляєш крихітними неодимовими магнітами повз великий потужний магніт. Орієнтація крихітних магнітів — випадкова. Але, проходячи повз великий магніт, вони швидко переорієнтуються відповідно до поля і притягуються до нього. Переважна більшість крихітних магнітів відхиляється у бік великого магніту. Особливо уважний спостерігач може запитати: «А як же закон збереження енергії?»

Справді, магнітний момент у зовнішньому магнітному полі має пов'язану з ним потенціальну енергію:

U=μB=μBcos(θ)U = -\vec{\mu}\cdot \vec{B} = -\mu B \cos(\theta)

Тому якби магнітний момент повертався у зовнішньому магнітному полі, зміна енергії становила б:

ΔU=UfUi=μB(cos(θf)cos(θi)).\Delta U = U_f - U_i = -\mu B (\cos(\theta_f) - \cos(\theta_i)).

У граничному випадку, коли маленький магніт, спочатку абсолютно протилежно спрямований зовнішньому полю, перевертається і вирівнюється з ним, це відповідало б зменшенню потенціальної енергії:

ΔU=UfUi=μB(cos(0)cos(π))=2μB.\Delta U = U_f - U_i = -\mu B (\cos(0) - \cos(\pi)) = -2\mu B.

Куди ж іде ця енергія? Класичний магніт — наприклад, маленький неодимовий магніт на холодильник — складається з багатьох частинок і може розсіяти практично будь-яку кількість енергії у вигляді тепла. Початковий і кінцевий кути між магнітним моментом і зовнішнім полем можуть бути довільними, і принаймні початкова орієнтація є випадковою. Тому кожен крихітний магніт розсіяв би різну кількість енергії у вигляді тепла. Але класично це не проблема, оскільки ансамбль класичних частинок може розсіяти будь-яку кількість енергії як тепло.

Чого очікувати, застосовуючи класичне мислення до атомних масштабів?

Принаймні це не так для магнітів атомних масштабів, адже в них задіяно менше частинок, менше ступенів свободи, через які можна розсіяти енергію. Пропозиції ранньої квантової механіки ще й додатково стверджували, що енергія, яку може поглинути окрема частинка (наприклад, електрон), є квантованою, тобто електрон може поглинути лише кілька конкретних кількостей енергії. Оскільки випадкові початкові орієнтації вимагали б розсіяння випадкових кількостей енергії, це неможливо для системи з квантованими рівнями енергії. Надлишкова енергія не може бути розсіяна як тепло. Що ж тоді відбудеться замість цього?

Перевір своє розуміння

Прочитай наведені нижче питання, подумай над відповідями, а потім натисни трикутники, щоб побачити рішення.

Поясни, що, на твою думку, відбудеться в ситуації, описаній вище. Тобто: є атомно малий магніт, який не може розсіювати енергію у вигляді тепла. Отже, будь-яка початкова магнітна потенціальна енергія мусить залишатись у системі. Проте зовнішнє магнітне поле прикладає момент сили, що намагається повернути маленький магніт і вирівняти його з полем. Що відбувається?

Відповідь:

Крихітний магнітний момент починав би повертатися до вирівнювання з зовнішнім полем. Але в момент вирівнювання він мав би кінетичну енергію обертання, яка продовжувала б обертати його далі — за межі вирівняного положення і назад із вирівнювання. Таку поведінку можна спостерігати навіть у великих класичних магнітах. Але в класичних системах коливання маленького магнітного моменту врешті-решт припиняються, оскільки енергія розсіюється у вигляді тепла. У системі без такого дисипативного механізму коливання мають тривати нескінченно довго.

З огляду на поведінку, очікувану згідно з відповіддю вище, який розподіл магнітних частинок ти очікував би побачити на екрані?

Відповідь:

Плавний розподіл — від деякого максимального відхилення у бік більш сильного боку магнітного поля (ті частинки, початкова орієнтація яких збіглася із зовнішнім полем) до деякого максимального відхилення у бік більш слабкого боку поля (ті частинки, що починали в антипаралельній орієнтації до зовнішнього поля), і все відхилення між цими крайніми випадками, що відповідають усім початковим орієнтаціям між ними.

Схема пучка частинок, що проходять крізь магніт. Вони відхиляються різною мірою вздовж напрямку магнітного поля. Потрапляючи на далекий екран, вони утворюють лінію.

Що передбачає квантова механіка?

Мабуть, найдивнішою з усіх можливостей була б така: а що, якщо кутовий момент електрона квантований, і до того ж квантована його проекція на деяку вісь? Квантування кутового моменту як величини — це цікаво, але можна спробувати виправдати це класичною інтуїцією, так само як планетарні орбіти усталюються на фіксованих шляхах, що не перетинаються, і мають лише певні дозволені значення кутового моменту. Але що, якщо цей вектор кутового моменту міг би вказувати лише точно вздовж zz або точно протилежно zz, але не мати будь-якої іншої компоненти вздовж zz? А що, якщо при вимірюванні вздовж іншого напрямку вектор міг би вказувати лише цілком вздовж xx або цілком протилежно xx, і нічого між ними? Це було б дивним у спосіб, що руйнує будь-яку класичну інтуїцію.

Перевір своє розуміння

Прочитай наведене нижче питання, подумай над відповіддю, а потім натисни трикутник, щоб побачити рішення.

Який розподіл частинок на екрані ти очікуєш знайти в цьому останньому випадку, де проекція кутового моменту вздовж напрямку поля є квантованою? Можна розглядати лише частинки, що проходять точно через центр пристрою, або включити ті, що злегка відхиляються туди, де градієнт слабший. Просто будь чітким у своїх міркуваннях.

Відповідь:

Частинки в центрі пристрою відчуватимуть однорідне неоднорідне поле і всі будуть виміряні як такі, що мають одну з двох орієнтацій магнітного моменту. Тому вони або відхиляться максимально у напрямку градієнта, або максимально проти нього — і нічого між ними. Звичайно, по боках, де градієнт слабший, відхилення буде меншим. На дуже великих бокових відстанях частинки можуть бути повністю поза градієнтом, і там може бути лише одна область невідхилених частинок.

Схема пучка частинок, що відхиляються або вгору, або вниз і потрапляють в одну з двох точок на екрані, без жодних частинок мі�ж цими двома максимумами.

Як кубіти допоможуть нам перевірити це?

Більшість квантових комп'ютерів використовує «кубіти» — квантові аналоги класичних бітів. Точніше, вони розроблені як дворівневі системи, аналогічні до станів «увімк.»/«вимк.» класичних бітів. Існують парадигми квантових обчислень, що використовують трирівневі системи (так звані «кутрити») або багаторівневі системи («кудити»). Але більшість досліджень зосереджена саме на кубітах. Зокрема, квантові комп'ютери IBM® використовують так звані трансмон-кубіти з фіксованою частотою. Вони суттєво відрізняються від орбітального або спінового кутового моменту атомів. Але, як і спін електрона, кубіти IBM® є квантово-механічними системами, що можуть взаємодіяти зі світлом і над якими можна виконувати вимірювання. Насправді часто проводять аналогії між станами квантово-механічного спіну і обчислювальними станами кубіта. Наприклад, стан «спін угору» зазвичай асоціюють з обчислювальним станом 0, а «спін вниз» — зі станом 1:

0|\uparrow\rangle \sim |0\rangle 1|\downarrow \rangle \sim |1\rangle

Ми можемо використовувати ці подібності для спостереження квантово-механічної поведінки на квантових комп'ютерах IBM, що імітує квантово-механічну поведінку орбітального або спінового кутового моменту в атомах. Ми робитимемо аналогічні спостереження, використовуючи лінійні комбінації цих станів, що дозволять нам розширити обговорення на кутовий момент вздовж будь-якого напрямку.

Перший експеримент: одне вимірювання

У цьому першому експерименті та впродовж усього модуля ми будемо використовувати підхід до квантових обчислень, відомий як «Qiskit patterns», що розбиває робочі процеси на такі кроки:

  • Крок 1: перетворення класичних вхідних даних на квантову задачу
  • Крок 2: оптимізація задачі для квантового виконання
  • Крок 3: виконання за допомогою Qiskit Runtime Primitives
  • Крок 4: постобробка та класичний аналіз

Загалом ми дотримуватимемося цих кроків, хоча не завжди будемо позначати їх явно.

Крок 1: перетворення класичних вхідних даних на квантову задачу

Тут класичні вхідні дані — це орієнтації спіну до вимірювання в пристрої Штерна–Герлаха. Не турбуйся надто про точну природу квантового стану до вимірювання. Це тема іншого модуля Qiskit Classrooms — про теорему Белла.

Зверни увагу, що квантові комп'ютери IBM вимірюють стани вздовж осі zz. Тому цей перший експеримент буде дуже схожий на експеримент Штерна–Герлаха з градієнтом магнітного поля вздовж zz. Далі ми побачимо, як змінити систему для вимірювань вздовж різних напрямків.

Почнімо зі створення аналога спінового стану, тобто певної суміші |\uparrow\rangle і |\downarrow\rangle, або еквівалентно 0|0\rangle і 1|1\rangle. Ми запропонували деякі початкові значення. Але не соромся грати з іншими значеннями або навіть випадковими.

import random
from numpy import pi
import numpy as np

# Use these lines to choose your own arbitrary state vector and normalize it.
# a = 2
# b = (1+1j)
# norm = np.sqrt(a*np.conjugate(a)+b*np.conjugate(b))
# a = a/norm
# b = b/norm
# print(a,b)

# Use these lines if you would rather look at at random spin orientations.
a = random.random()
b = random.random()
norm = np.sqrt(a * np.conjugate(a) + b * np.conjugate(b))
a = a / norm
b = b / norm
print(a, b)
0.7032089086145691 0.7109832845047109

Тепер використаємо ці кути як параметри в квантовій схемі. Ми розглядаємо лише одну частинку одночасно, тому у схемі використаємо лише один кубіт і один класичний регістр.

from qiskit.circuit import QuantumRegister, ClassicalRegister, QuantumCircuit, Parameter

# Define registers
qr = QuantumRegister(1, "q")
cr = ClassicalRegister(1, "c")
qc = QuantumCircuit(qr, cr)

# Initialize the quantum state
qc.initialize([a, b])
qc.measure(0, 0)
qc.draw("mpl")

Output of the previous code cell

Крок 2: оптимізація задачі для квантового виконання

Щоб запустити наш експеримент на справжньому квантовому комп'ютері, потрібно завантажити Qiskit Runtime Service і вибрати квантовий комп'ютер (або «backend»). Нижче ми просто обираємо найменш завантажений квантовий комп'ютер, доступний нам.

Нижче є код для збереження твоїх облікових даних під час першого використання. Обов'язково видали цю інформацію з ноутбука після збереження в своєму середовищі, щоб твої облікові дані не були випадково передані під час обміну ноутбуком. Більше інструкцій дивись у посібниках Налаштування облікового запису IBM Cloud та Ініціалізація сервісу в ненадійному середовищі.

# Load the Qiskit Runtime service
from qiskit_ibm_runtime import QiskitRuntimeService

# Syntax for first saving your token. Delete these lines after saving your credentials.
# QiskitRuntimeService.save_account(channel='ibm_quantum_platform', instance = '<YOUR_IBM_INSTANCE_CRN>', token='<YOUR-API_KEY>', overwrite=True, set_as_default=True)
# service = QiskitRuntimeService(channel='ibm_quantum_platform')

# Syntax for specifying a channel and instance (if you need to change from the default set above)
# service = QiskitRuntimeService(channel='<channel name here>', instance="<your instance name here>")

# Load saved credentials
service = QiskitRuntimeService()
# Load the Runtime primitive and session
from qiskit_ibm_runtime import Session, SamplerV2 as Sampler

# Use the least busy backend, specify options as needed
# backend = service.least_busy(operational=True, simulator=False, min_num_qubits = 127)
backend = service.least_busy()
print(backend.name)
ibm_sherbrooke

Тепер потрібно транспілювати схему — тобто відобразити її на базові вентилі, доступні у вибраному квантовому комп'ютері, та оптимізувати схему для запуску на ньому.

# Transpile the circuit and optimize for running on the quantum computer selected
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager

pm = generate_preset_pass_manager(optimization_level=3, backend=backend)
qc_ibm = pm.run(qc)

Крок 3: виконання за допомогою Qiskit Runtime Primitives

Тепер ми хочемо запустити це на справжньому квантовому комп'ютері. Весь необхідний синтаксис є у блоці коду нижче. Якщо у тебе вичерпано виділений час на справжніх квантових комп'ютерах або ти не маєш підключення до інтернету, можеш розкоментувати наступний блок коду, який запустить код на локальному симуляторі.

# Specify that we want to use only a single shot, to represent a single measurement of a spin in a SG device.
num_shots = 1

# Evaluate the problem using a QPU via Qiskit IBM Runtime
# The best practice is to use a session as shown below. This is available to Premium Plan, Flex Plan, and On-Prem (IBM Quantum Platform API) Plan users.
with Session(backend=backend) as session:
sampler = Sampler(mode=session)
dist = sampler.run([qc_ibm], shots=num_shots).result()
session.close()
counts = dist[0].data.c.get_counts()

# Open users can still carry out this experiment, but without making use of a session, meaning repeated queuing is possible.
# from qiskit_ibm_runtime import Batch,
# batch = Batch(backend=backend)
# sampler = Sampler(mode=batch)
# dist = sampler.run([qc_ibm], shots=num_shots).result()
# Close the batch because no context manager was used.
# batch.close()
# counts = dist[0].data.c.get_counts()

Використовуй наведений нижче код, якщо не можеш запустити експеримент на справжньому квантовому комп'ютері.

# This uses a local simulator
# from qiskit_aer import AerSimulator

# This generates a simulator that mimics the real quantum system
# backend_sim = AerSimulator.from_backend(backend)

# Import an estimator, this time from qiskit (we import from Runtime for real hardware)
# from qiskit.primitives import BackendSamplerV2
# sampler = BackendSamplerV2(backend = backend_sim)

# num_shots = 1

# This runs the job
# dist = sampler.run([qc_ibm], shots = num_shots).result()

# This selects measurement counts for the 0th circuit, which in this case is the only circuit
# counts=dist[0].data.c.get_counts()

Крок 4: постобробка та класичний аналіз

Для цього дуже простого експерименту класичний аналіз полягає просто у візуалізації результату.

from qiskit.visualization import plot_histogram

print("counts = ", counts)
plot_histogram(counts)
counts =  {'0': 1}

Output of the previous code cell

Ми зробили одне вимірювання і отримали «0». Для нас це не сюрприз. Ми знаємо, що використовуємо квантовий комп'ютер, складений із кубітів, і добре звикли до того, що класичні біти повертають 0 або 1. Але пам'ятай: це квантово-обчислювальний аналог експериментів, проведених із частинками, що мають магнітні моменти. Якби ми очікували рівномірного розподілу між 0 і +1, нас справді могло б здивувати, що вже при першому вимірюванні ми отримали одне з крайніх значень. Саме це дивовижне квантування результатів в експерименті Штерна–Герлаха привело нас до кращого розуміння природи, а воно, своєю чергою, допомогло нам зрештою побудувати квантові комп'ютери.

Подивімося, що станеться, якщо ми виконаємо ансамбль вимірювань.

Другий експеримент: вимірювання багатьох частинок

Щоб зібрати статистику за багатьма такими вимірюваннями, не потрібно повторювати кроки 1 і 2. Можна просто збільшити кількість вимірів (shots) в експерименті. Пограй із кількістю shots у кроці 3 нижче.

from qiskit_ibm_runtime import Session, SamplerV2 as Sampler

num_shots = 100

# Evaluate the problem using a QPU via Qiskit IBM Runtime
# The best practice is to use a session as shown below. This is available to Premium Plan, Flex Plan, and On-Prem (IBM Quantum Platform API) Plan users.
with Session(backend=backend) as session:
sampler = Sampler(mode=session)
dist = sampler.run([qc_ibm], shots=num_shots).result()
session.close()
counts = dist[0].data.c.get_counts()

# Open users can still carry out this experiment, but without making use of a session, meaning repeated queuing is possible.
# batch = Batch(backend=backend)
# sampler = Sampler(mode=batch)
# dist = sampler.run([qc_ibm], shots=num_shots).result()
# Close the batch because no context manager was used.
# batch.close()
# counts = dist[0].data.c.get_counts()

Як і раніше, якщо ти не можеш запустити на справжньому квантовому комп'ютері, розкоментуй блок із першого експерименту і просто заміни num_shots = 1 на num_shots = 100 або більше.

plot_histogram(counts)

Output of the previous code cell

Ми бачимо, що іноді вимірюємо 0, а іноді — 1. Зверни увагу: ми ніколи не вимірюємо нічого іншого! Ти можеш змінити кількість вимірів і помітиш, що ймовірність виміряти 0 або 1 залишається досить стабільною між різними запусками з різною кількістю shots. Тому щось у підготовці стану, схоже, визначає ймовірність результатів вимірювань — хоча кожне окреме вимірювання може дати або 0, або 1.

Третій експеримент: випадкові спіни в печі

В експерименті Штерна–Герлаха дослідники не могли задати кут, під яким вектор кутового моменту виходить із печі. Орієнтації були випадковими (або навіть ще більш загадковими! Дивись модуль Qiskit Classroom про теорему Белла). Розумним аналогом цього експерименту для нас буде випадкова ініціалізація станів кубіта та багаторазові вимірювання.

Крок 1: Відображення класичних вхідних даних на квантову задачу

Схема, яку ми хочемо побудувати, така сама, як і раніше. Єдина відмінність полягає в тому, що цього разу ми побудуємо схему з використанням вентилів із вільними параметрами θ\theta та ϕ\phi. Числові значення цих параметрів будуть призначатися для кожного нового запуску.

# from qiskit.circuit import QuantumCircuit, Parameter

theta = Parameter("θ")
phi = Parameter("$\phi$")

# Define registers
qr = QuantumRegister(1, "q")
cr = ClassicalRegister(1, "c")
qc = QuantumCircuit(qr, cr)

# Add rotation gates for rotating the state of qubit 0 to random orientations
qc.rx(theta, 0)
qc.rz(phi, 0)
qc.measure(0, 0)

qc.draw("mpl")

Вихід попереднього блоку коду

Запуск квантової схеми з єдиним «пострілом» для багатьох випадкових конфігурацій — незвичний робочий процес для квантового комп'ютера. Це, звісно, можливо, але для простоти тут ми використаємо локальний симулятор.

# This uses a local simulator
from qiskit_aer import AerSimulator

# Import an estimator, this time from qiskit (we import from Runtime for real hardware)
from qiskit.primitives import BackendSamplerV2

# This generates a simulator that mimics the real quantum system
backend_sim = AerSimulator.from_backend(backend)
sampler_sim = BackendSamplerV2(backend=backend_sim)

# from qiskit.primitives import BackendSamplerV2
# sampler = BackendSamplerV2(backend=backend)
# A list to store the accumulated probabilities of the two possible measurement outcomes.
probslist = {"0": 0.0, "1": 0.0}

# Choose how many "particles"/measurements
measurements = 100
num_shots = 1

for i in range(measurements):
# Assign a random orientation for each measurement
phi = random.random() * 2 * pi
theta = random.random() * 2 * pi

angles = [phi, theta]
circuit = qc.assign_parameters(angles)
qc_ibm = pm.run(circuit)

# Run the circuit
# job = sampler.run([circuit],num_shots = 1)
dist = sampler_sim.run([qc_ibm], shots=num_shots).result()

# Update the list of probabilities
zeroterm = dist[0].data.c.get_counts().get("0") or 0
oneterm = dist[0].data.c.get_counts().get("1") or 0
probslist.update({"0": probslist.get("0") + zeroterm})
probslist.update({"1": probslist.get("1") + oneterm})

probslist.update({"0": probslist.get("0") / measurements})
probslist.update({"1": probslist.get("1") / measurements})
# print(probslist)
plot_histogram(probslist)

Вихід попереднього блоку коду

Отже, ми бачимо, що випадковий початковий стан кубітів (що відповідає випадковим орієнтаціям кутового моменту в експерименті Штерна–Герлаха) дає приблизно однакову кількість станів 0 та 1 (подібно до однакової кількості частинок зі спіном угору і спіном вниз). Саме це і показав оригінальний експеримент Штерна–Герлаха.

Четвертий експеримент: повторні вимірювання

Коли кубіт починає у випадковому стані, ми бачимо, що ймовірність виміряти один із двох крайніх значень приблизно 50/50. Але що відбувається зі станом кубіта (або кутовим моментом частинки) після вимірювання? Щоб відповісти на це, нам потрібно визначити схему, яка дозволяє робити кілька вимірювань одних і тих самих кубітів. Визначимо схему, яку ми зможемо використати для дослідження цього. Нам потрібно передбачити можливість вимірювання обох станів 0|0\rangle та 1|1\rangle, тому потрібно щось для повороту початкового стану кубіта з типового стану 0|0\rangle. У цьому випадку ми скористаємось вентилем Адамара HH, оскільки H0=12(0+1)H|0\rangle = \frac{1}{\sqrt{2}}(|0\rangle+|1\rangle). Зверни увагу, що за замовчуванням обидва ці вимірювання відбуваються вздовж zz.

from qiskit import QuantumCircuit

# Define registers
qr = QuantumRegister(1, "q")
cr = ClassicalRegister(2, "c")
qc = QuantumCircuit(qr, cr)

# Initialize the qubit to be a mixture of 0 and 1 states.
qc.h(0)

# Add a first measurement
qc.measure(0, 0)
qc.barrier()

# Add a second measurement
qc.measure(0, 1)

qc.draw("mpl")

qc_ibm = pm.run(qc)
# Step 3: Run the job

num_shots = 1000
dist = sampler.run([qc_ibm], shots=num_shots).result()
# To run on a simulator, uncomment the line below and comment out the line above.
# dist = sampler_sim.run([qc_ibm], shots=num_shots).result()
counts = dist[0].data.c.get_counts()
print(counts)
{'00': 497, '11': 498, '01': 3, '10': 2}
# Step 4: Post-process
plot_histogram(counts)

Вихід попереднього блоку коду

На малюнку вище стовпчики позначені «00», «01» тощо. Тут ці числа означають «2-й результат, 1-й результат». Отже, «00» означає, що обидва вимірювання дали стан 0|0\rangle, а «01» означає, що перше вимірювання дало 1|1\rangle, а друге — 0|0\rangle. Переважна більшість кубітів або вимірювалась у стані 0|0\rangle двічі, або двічі у стані 1|1\rangle. Дуже рідко трапляється, щоб кубіт спочатку виміряли в одному стані, а потім — в іншому; ті поодинокі випадки (~1%), де це відбулось, зумовлені шумами. У цьому випадку шум змодельовано відповідно до поведінки реальної квантової системи. Спостережувана кореляція між послідовними вимірюваннями також спостерігається у вимірюваннях Штерна–Герлаха частинок зі спіновим кутовим моментом. Якщо частинку виміряли як «спін угору», наступне вимірювання незабаром після цього знову дасть «спін угору» (з невеликим відхиленням через шуми).

Це може здатися тривіальним. Зрештою, якщо кубіт виміряли в одному стані, і я знову виміряю його відразу ж, чому б він перебував у іншому стані? Але якщо справді зосередитись на цій тонкості, це може допомогти нам обрати математичні інструменти для опису цього явища.

Аналіз проведених експериментів

Зберімо кілька спостережень із наших експериментів:

  • Вимірювання квантово-механічної системи дає лише одне зі «дозволених значень». Для дворівневих систем, як-от кубіти або частинки зі спіном 1/2, вимірювання дає лише один із двох бінарних результатів.
  • Коли ми випадково ініціалізуємо стан бінарної системи (як-от частинки зі спіном 1/2, що виходять із печі), можливий будь-який із двох бінарних результатів.
  • Після того як вимірювання зроблено і стан системи відомий, повторне вимірювання тієї самої фізичної величини не змінює стан! Тобто якщо ми отримали стан 0 один раз, при повторному вимірюванні він залишається у стані 0 (з урахуванням незначного шуму ~0,1–1%).

Зверни окрему увагу: ми ще не торкалися ймовірнісної природи квантової механіки і нічого не казали про «колапс» стану у власний стан. Спираючись лише на наведені спостереження, може виникнути спокуса шукати таку математичну операцію OO, яка залишає деякий спеціальний набір квантово-механічних станів ψ|\psi\rangle незмінним з точністю до константи: Oψ=cψO|\psi\rangle = c|\psi \rangle, оскільки двічі виміряти вздовж zz дає той самий результат. Зрештою, такий пошук не зможе описати всі поведінки, які ми побачимо. Але він може описати дещо, тому ми ще трохи його продовжимо.

Така операція існує. Матрична операція над деякими векторами змінює їх, а над іншими векторами (власними векторами) — залишає вектор незмінним з точністю до константи. Візьмімо, наприклад, матрицю MM та вектор v|v\rangle, де

M=(1221)M= \begin{pmatrix} 1 & 2 \\ 2 & 1\end{pmatrix}

та

v=(11)|v\rangle = \begin{pmatrix} 1\\1 \end{pmatrix}

Зауважимо, що

Mv=(1221)(11)=(11+2121+11)=(33)=3v.M|v\rangle= \begin{pmatrix} 1 & 2 \\ 2 & 1\end{pmatrix}\begin{pmatrix} 1\\1 \end{pmatrix} = \begin{pmatrix} 1*1+2*1\\2*1+1*1 \end{pmatrix} = \begin{pmatrix} 3\\3 \end{pmatrix} = 3|v\rangle.

Але для інших векторів, скажімо v=(12)|v'\rangle = \begin{pmatrix} 1\\2\end{pmatrix}, маємо

Mv=(1221)(12)=(11+2221+12)=(54)cv.M|v'\rangle= \begin{pmatrix} 1 & 2 \\ 2 & 1\end{pmatrix}\begin{pmatrix} 1\\2 \end{pmatrix} = \begin{pmatrix} 1*1+2*2\\2*1+1*2 \end{pmatrix} = \begin{pmatrix} 5\\4 \end{pmatrix} \neq c|v'\rangle.

Ми могли б спробувати описати спін частинки за допомогою матриці, а стани частинок після вимірювання — за допомогою вектора, який називається «вектором стану». Зовсім неочевидно, які значення мають входити до такої матриці або вектора стану, але єдина властивість з вимірювань, яку ми могли б використати для маркування станів, — це ймовірність виміряти 0 або 1 («спін угору» або «спін вниз» у контексті частинок зі спіном 1/2). Варто врахувати, що елементи векторів стану мають бути пов'язані з цією ймовірністю (саме з ймовірністю, «амплітудою ймовірності» — тобто ми зводимо елемент у квадрат, щоб отримати ймовірність, тощо). Але на цьому етапі ми ще не знаємо, чи мають елементи цих матриць бути суто дійсними, комплексними чи якимись іншими. Щоб убезпечитись, спробуємо розробити структуру, в якій вектори й матриці задовольняють таким умовам:

  • Матричні оператори якомога більше пов'язані з експериментом. Наприклад, ми могли б пов'язати власні значення матриці спіну з експериментально спостережуваними проєкціями спіну.
  • Вектори стану мають бути пов'язані з ймовірністю таким чином: якщо частинка перебуває у стані A|A\rangle, ймовірність того, що наступне вимірювання виявить її у стані B|B\rangle, дорівнює PABAB2P_{AB}\equiv |\langle A| B \rangle|^2.

Це дає нам широку свободу у побудові перших матриць. Наприклад, ми могли б наївно спробувати

0(10).|0\rangle \sim |\uparrow\rangle \sim \begin{pmatrix} 1 \\0 \end{pmatrix}.

Тут 0|0\rangle \sim |\uparrow\rangle означає, що існують стани у квантових комп'ютерах і в системах зі спіном 1/2, які дуже схожі й часто відображаються одна на одну. Вони, очевидно, не є тотожними, оскільки стосуються різних систем. Але алгебра, що описує ці дворівневі системи, може підпорядковуватися одним і тим самим правилам (спойлер: так і є!). Зауважмо, що цей випадковий вибір уже має одну приємну властивість:

P00=002=(10)(10)2=12=1.P_{00} = |\langle 0| 0 \rangle|^2 = \vert \begin{pmatrix} 1 & 0\end{pmatrix} \begin{pmatrix} 1 \\ 0\end{pmatrix}\vert ^2 = |1|^2 = 1.

Тобто якщо частинка вже перебуває у стані 0|0\rangle, ймовірність того, що наступне вимірювання знову дасть 0|0\rangle, дорівнює 1 (за відсутності шумових ефектів). Це чудово, адже ми вже бачили, що після переходу у стан 0 або «спін угору» система залишається в ньому при повторних вимірюваннях. Зазначена ймовірність справді повинна становити 100%.

Перевір своє розуміння

Прочитай питання нижче, подумай над відповідями, а потім натисни трикутники, щоб побачити рішення.

Чому

0=(10)|0\rangle = \begin{pmatrix} 1 \\0 \end{pmatrix}

є кращим вибором, ніж, скажімо,

0=(20)?|0\rangle = \begin{pmatrix} 2 \\0 \end{pmatrix}?

Відповідь:

Наша спроба пов'язати ймовірність вимірювання з квадратом скалярного добутку означає, що модуль кожного вектора має дорівнювати 1. Тобто vv2=1|\langle v|v\rangle|^2 = 1 для всіх v|v\rangle, оскільки ймовірність того, що система у стані v|v\rangle буде виявлена у стані v|v\rangle, становить 100%. Це відоме як «умова нормування».

Чому

0=(10)|0\rangle = \begin{pmatrix} 1 \\0 \end{pmatrix}

є кращим вибором, ніж, скажімо,

0=(01)?|0\rangle = \begin{pmatrix} 0 \\1 \end{pmatrix}?

Відповідь:

Не є. Немає жодної причини спочатку обирати 0=(10)|0\rangle = \begin{pmatrix} 1 \\0 \end{pmatrix}. Це радше угода. Однак, зробивши цей вибір, ми накладаємо певні обмеження на наступні вибори. Дивись нижче.

Пригадай, що в наведених вище експериментах ми з'ясували: кубіт, що початково перебуває у стані 0|0\rangle, залишається в цьому стані при наступному вимірюванні. Те саме справедливо для 1|1\rangle. Це означає, що кубіт у стані 0|0\rangle має нульову ймовірність бути виміряним у стані 1|1\rangle (за відсутності шумових ефектів). Необхідний зв'язок між скалярними добутками та ймовірностями вимірювань тоді говорить нам, що

P01=P10=0.P_{01} = P_{10}=0.

Без втрати загальності запишемо вектор стану 1=(ab)|1\rangle = \begin{pmatrix} a \\ b \end{pmatrix}. Тоді

P01=012=(10)(ab)2=a2=0.P_{01} = |\langle 0| 1 \rangle|^2 = \vert \begin{pmatrix} 1 & 0\end{pmatrix} \begin{pmatrix} a \\ b\end{pmatrix}\vert ^2 = |a|^2 = 0.

Вимога P11=1P_{11} = 1, так звана «умова нормування», каже нам, що b2=1|b|^2=1. Сама по собі вона лише обмежує нас до b=eiϕb=e^{i\phi} при ϕR\phi \in \mathbb{R}. Виявляється, є й інші причини обрати b=1b=1, що виходять за межі цього вступу. Поки що достатньо знати, що b=1b=1 є одним із допустимих рішень.

Ми просунулись досить далеко в нашому аналізі. Вибір форми для векторів стану дозволяє нам побудувати матрицю, яка описує дещо з фізичних явищ, що тут відбуваються. Зокрема, оскільки оригінальний експеримент Штерна–Герлаха вимірював розщеплення траєкторій на основі компонент спінового кутового моменту вздовж осі zz, нам потрібен оператор, що описує саме це: SzS_z. Ще один ключовий зв'язок із експериментом: зі значення відхилення, часу прольоту та відомої напруженості магнітного поля можна визначити величину zz-компоненти спіну. Хоча це потребує багатьох припущень щодо точності експериментального налаштування, тут ми просто нагадаємо, що виміряні zz-компоненти спінового кутового моменту становлять ±/2\pm \hbar/2.

Отже, ми шукаємо матрицю з дійсними власними значеннями (що виконується для ермітових матриць), власні значення якої відповідають цим експериментально спостережуваним компонентам спіну. Без втрати загальності запишемо Sz=(s11s12s21s22)S_z = \begin{pmatrix} s_{11} & s_{12} \\ s_{21} & s_{22}\end{pmatrix}, і зажадаємо:

Sz=(s11s12s21s22)(10)=(s11s21)=!2(10)s11=/2,s21=0S_z |\uparrow\rangle = \begin{pmatrix} s_{11} & s_{12} \\ s_{21} & s_{22}\end{pmatrix}\begin{pmatrix}1 \\0\end{pmatrix} = \begin{pmatrix} s_{11} \\ s_{21} \end{pmatrix} \overset{!}{=} \frac{\hbar}{2} \begin{pmatrix}1 \\0\end{pmatrix} \rightarrow s_{11} = \hbar/2,s_{21}=0 Sz=(s11s12s21s22)(01)=(s12s22)=!2(01)s12=0,s22=/2S_z |\downarrow\rangle = \begin{pmatrix} s_{11} & s_{12} \\ s_{21} & s_{22}\end{pmatrix}\begin{pmatrix}0 \\1\end{pmatrix} = \begin{pmatrix} s_{12} \\ s_{22} \end{pmatrix} \overset{!}{=} -\frac{\hbar}{2} \begin{pmatrix}0 \\1\end{pmatrix} \rightarrow s_{12} = 0, s_{22}=-\hbar/2

Об'єднуючи та виносячи загальний множник /2\hbar/2, отримуємо

Sz=2(1001).S_z = \frac{\hbar}{2} \begin{pmatrix} 1 & 0 \\ 0 & -1\end{pmatrix}.

Це добре відомий оператор спін-zz, що фігурує в усіх підручниках із квантової механіки. Часто його зображають без /2\hbar/2 — тоді він є оператором «Паулі-zz», який зазвичай позначають σz\sigma_z:

σz=(1001).\sigma_z = \begin{pmatrix} 1 & 0 \\ 0 & -1\end{pmatrix}.

Це зручно, оскільки цей оператор Паулі (та споріднені матриці) може описувати багато фізичних систем із двома рівнями або двома можливими результатами вимірювання, зокрема стани трансмонних кубітів у квантовому комп'ютері.

Перш ніж перейти до інших операторів і станів, пов'язаних із цим, необхідно прояснити один факт, який багато хто розуміє неправильно. Дія оператора — це не те саме, що вимірювання. В одному сенсі можна сказати: «Звісно! Одне відбувається на папері як частина математичного обчислення, а інше — в лабораторії над фізичними системами.» Так, це правда, але справа не тільки в цьому. Вимірювання zz-компоненти спіну завжди дає стан «спін угору» або «спін вниз», незалежно від початкового стану системи. Ми бачили це на прикладі квантово-обчислювальних аналогів 0|0\rangle та 1|1\rangle. Ми ініціалізували стани сотнями випадкових орієнтацій, а вимірювання завжди давали або 0|0\rangle, або 1|1\rangle. Це явище відоме як «колапс стану» до власного стану внаслідок вимірювання. Цього не відбувається, коли ти застосовуєш матрицю до стану. Спробуй відповісти на питання нижче, щоб дослідити це.

Перевір своє розуміння

Прочитай питання нижче, подумай над відповіддю, а потім натисни трикутник, щоб побачити рішення.

Припустимо, частинка починає у спіновому стані

ψ=(3/52/5).|\psi\rangle = \begin{pmatrix}\sqrt{3/5} \\ \sqrt{2/5}\end{pmatrix}.

(a) Що ти отримаєш, якщо подієш оператором SzS_z на цей вектор стану? (b) Що ти отримаєш, якщо зробиш одне вимірювання zz-компоненти спіну цієї частинки? (c) Що ти отримаєш, якщо підготуєш багато частинок у тому самому стані та зробиш тисячі вимірювань zz-компоненти спіну?

Відповіді:

(a) Ти отримаєш

Szψ=2(1001)(3/52/5)S_z |\psi\rangle = \frac{\hbar}{2} \begin{pmatrix} 1 & 0 \\ 0 & -1\end{pmatrix} \begin{pmatrix}\sqrt{3/5} \\ \sqrt{2/5}\end{pmatrix}=2(3/52/5).= \frac{\hbar}{2} \begin{pmatrix}\sqrt{3/5} \\ -\sqrt{2/5}\end{pmatrix}.

Ось і все. Жодного експериментального результату немає. Ти просто застосовуєш матрицю до вектора і отримуєш дещо інший вектор із новим знаком «−», і він більше не має одиничного модуля, оскільки має передмножник /2\hbar/2.

(b) Ти отримаєш або |\uparrow\rangle, або |\downarrow\rangle. Це відповідає спостереженню проєкції спіну на вісь zz або /2\hbar/2, або /2-\hbar/2 відповідно. Ми також можемо визначити ймовірність кожного результату, оскільки

Pψ=ψ2=(10)(3/52/5)2=3/52=35P_{\uparrow\psi}=|\langle \uparrow|\psi\rangle|^2 = \vert \begin{pmatrix}1 & 0\end{pmatrix} \begin{pmatrix}\sqrt{3/5} \\ \sqrt{2/5}\end{pmatrix}\vert^2 = |\sqrt{3/5}|^2 = \frac{3}{5}Pψ=ψ2=(01)(3/52/5)2=2/52=25P_{\downarrow\psi}=|\langle \downarrow|\psi\rangle|^2 = \vert \begin{pmatrix}0 & 1\end{pmatrix} \begin{pmatrix}\sqrt{3/5} \\ \sqrt{2/5}\end{pmatrix}\vert^2 = |\sqrt{2/5}|^2 = \frac{2}{5}

Отже, хоча стан зі спіном угору на 20% більш імовірний, можливий будь-який із цих двох результатів, і ми отримаємо лише один із них.

(c) Приблизно 60% вимірювань дадуть частинки зі спіном угору, а близько 40% — зі спіном вниз, відповідно до ймовірностей, обчислених у частині (b).

Перевір відповіді до частин (b) та (c) попереднього питання, скориставшись аналогією між станами спіну угору атома та станами кубіта:

0.|\uparrow\rangle\sim|0\rangle.

Напиши код квантових схем для створення бажаного початкового стану, а потім скористайся реальним обладнанням або симулятором, щоб перевірити результат одного вимірювання та результати ансамблю зі сотень або навіть тисяч вимірювань.

Відповідь:

#Use the backend sampler for part (b) because it allows us to use a single shot.
from qiskit_aer import AerSimulator
backend_sim = AerSimulator.from_backend(backend)
from qiskit.primitives import BackendSampler
sampler = BackendSampler(backend = backend_sim)

#Create a quantum circuit to initialize the state.
import math
psi = [math.sqrt(3/5),math.sqrt(2/5)]
qc = QuantumCircuit(1,1)
qc.initialize(psi, [0])

#Add measurement to the circuit
qc.measure(0,0)
qc.draw('mpl')

#Set num_shots =1 for part (b) and num_shots = 1000 or more for part (c).
num_shots = 1000

#Run the job and print the result. You should obtain only 0 or 1 in part (b) for a single shot.
#You should obtain a probability distribution with approximately 60% 0 and 40% 1 in part (c)

dist = sampler.run([qc_ibm], shots = num_shots).result()
counts=dist[0].data.c.get_counts()
print(counts)

#You should obtain {0: 599, 1: 401} or something equivalently close to the 60%-40% distribution predicted.

П'ятий експеримент: вимірювання різних спостережуваних

До цього моменту ми робили вимірювання лише вздовж осі zz. В експерименті Штерна–Герлаха, якщо ми хотіли б виміряти вздовж, скажімо, осі xx, ми просто орієнтували б неоднорідне магнітне поле вздовж xx та спостерігали відхилення вздовж xx на екрані. Квантові комп'ютери IBM, однак, розроблені для вимірювань лише вздовж однієї осі (zz). Щоб виміряти стан вздовж xx, необхідно виконати «зміну базису». Це означає, що потрібно виконати операцію, яка переводить стани вздовж xx на сфері Блоха у zz, і навпаки. Існує кілька способів реалізувати це, але кращим є вентиль Адамара:

H=12(1111)H=\frac{1}{\sqrt{2}}\begin{pmatrix}1 & 1 \\ 1 & -1\end{pmatrix}

Перевір своє розуміння

Прочитай питання нижче, подумай над відповіддю, а потім натисни трикутник, щоб побачити рішення.

Покажи, що H0=+xH|0\rangle = |+\rangle_x та що H+x=0H|+\rangle_x = |0\rangle

Відповідь:

H0=12(1111)(10)=12(11)=+xH|0\rangle = \frac{1}{\sqrt{2}}\begin{pmatrix}1 & 1 \\ 1 & -1\end{pmatrix}\begin{pmatrix}1 \\ 0\end{pmatrix} = \frac{1}{\sqrt{2}}\begin{pmatrix}1 \\ 1\end{pmatrix} = |+\rangle_xH+x=1(2)(1111)12(11)=12(20)=(10)=0H|+\rangle_x = \frac{1}{\sqrt(2)}\begin{pmatrix}1 & 1 \\ 1 & -1\end{pmatrix}\frac{1}{\sqrt{2}}\begin{pmatrix}1 \\ 1\end{pmatrix} = \frac{1}{2}\begin{pmatrix}2 \\ 0\end{pmatrix} = \begin{pmatrix}1 \\ 0\end{pmatrix} = |0\rangle

Покажи, що H1=xH|1\rangle = |-\rangle_x та що Hx=1H|-\rangle_x = |1\rangle

Відповідь:

H1=12(1111)(01)=12(11)=xH|1\rangle = \frac{1}{\sqrt{2}}\begin{pmatrix}1 & 1 \\ 1 & -1\end{pmatrix}\begin{pmatrix}0 \\ 1\end{pmatrix} = \frac{1}{\sqrt{2}}\begin{pmatrix}1 \\ -1\end{pmatrix} = |-\rangle_xHx=1(2)(1111)12(11)=12(02)=(01)=1H|-\rangle_x = \frac{1}{\sqrt(2)}\begin{pmatrix}1 & 1 \\ 1 & -1\end{pmatrix}\frac{1}{\sqrt{2}}\begin{pmatrix}1 \\ -1\end{pmatrix} = \frac{1}{2}\begin{pmatrix}0 \\ 2\end{pmatrix} = \begin{pmatrix}0 \\ 1\end{pmatrix} = |1\rangle
# Define registers
qr = QuantumRegister(1, "q")
cr = ClassicalRegister(1, "c")
qc = QuantumCircuit(qr, cr)

# Add a hadamard gate to rotate into the x-basis
qc.h(0)
qc.measure(0, 0)

qc.draw("mpl")

Вихід попереднього блоку коду

Ця схема обертає нашу систему так, що вимірювання (вздовж zz) дають нам інформацію про xx-характеристики до повороту. Ми вже знаємо, що квантовий комп'ютер ініціалізує стани у 0|0\rangle, що відповідає |\uparrow\rangle. Подивімось, що відбувається, коли ми вимірюємо проєкцію спіну вздовж xx для стану, що початково перебуває у |\uparrow\rangle. Ми виконуємо цей крок на симуляторі, щоб заохотити тебе досліджувати статистику інших схем із різними ініціалізаціями.

from qiskit.primitives import StatevectorSampler as Sampler

sampler_sv = Sampler()

job = sampler_sv.run([qc], shots=10000)
print(job.result()[0].data.c.get_counts())
{'1': 4977, '0': 5023}

Це показує нам, що для кубіта, що початково перебуває у 0|0\rangle (або, еквівалентно, спіну у |\uparrow\rangle), ймовірність виміряти проєкцію вздовж +x+x або x-x приблизно 50/50. У певному сенсі це цілком логічно. Зрештою, якщо щось спрямовано вздовж осі zz, воно не має жодної особливої переваги для ±x\pm x. Можна очікувати того ж, якщо починати зі стану 1|1\rangle (або |\downarrow\rangle). Перевіримо:

# Define registers
qr = QuantumRegister(1, "q")
cr = ClassicalRegister(1, "c")
qc = QuantumCircuit(qr, cr)

# Add a NOT gate and hadamard gate. Measure.
qc.x(0)
qc.h(0)
qc.measure(0, 0)

qc.draw("mpl")

Вихід попереднього блоку коду

job = sampler_sv.run([qc], shots=10000)
print(job.result()[0].data.c.get_counts())
{'0': 4935, '1': 5065}

Так! Знову ми отримуємо ймовірність 50/50 для вимірювання проєкцій вздовж ±x\pm x. За аналогією з вимірюваннями вздовж zz, ми могли б також припустити, що частинка, яка колапсувала у стан із визначеною проєкцією вздовж +x+x, має нульову ймовірність бути згодом виміряною вздовж x-x. Перевіримо:

from qiskit import QuantumCircuit

# Define registers
qr = QuantumRegister(1, "q")
cr = ClassicalRegister(2, "c")
qc = QuantumCircuit(qr, cr)

# Rotate into x-basis using a Hadamard gate, then make two measurements in succession
qc.h(0)
qc.measure(0, 0)
qc.barrier()
qc.measure(0, 1)

qc.draw("mpl")

Вихід попереднього блоку коду

job = sampler_sv.run([qc])
print(job.result()[0].data.c.get_counts())
plot_histogram(job.result()[0].data.c.get_counts())
{'00': 504, '11': 520}

Вихід попереднього блоку коду

Як і очікувалося, ми отримуємо результати, де проєкція спрямована вздовж +x+x, а потім знову вздовж +x+x, та результати, де проєкція спочатку вздовж x-x і знову вздовж x-x. Ми не бачимо випадків, коли проєкція переходить із +x+x до x-x або навпаки. Ми можемо узагальнити наші спостереження та використати їх для розробки подальших операторів у матричній формі та додаткових векторів стану.

Ми знаємо:

  • Стани з визначеними проєкціями вздовж +z+z або z-z мають 50% шанс виявитися з проєкцією вздовж +x+x і 50% — вздовж x-x.
  • Стани з визначеною проєкцією вздовж +x+x мають нульову ймовірність бути пізніше виміряними з проєкцією вздовж x-x, і навпаки.

Ми можемо використати ці результати для побудови станів із визначеною, позитивною проєкцією вздовж xx (які ми позначаємо +x|+x\rangle) та станів із визначеною, від'ємною проєкцією вздовж xx (які ми позначаємо x|-x\rangle). З цих станів можна побудувати матрицю, що відповідає SxS_x, точно так само, як ми робили для SzS_z. Це залишаємо як вправи для читача. Аналогічно можна побудувати експерименти для вимірювань вздовж осі yy, визначити вектори для +y|+y\rangle та y|-y\rangle і, нарешті, отримати вираз для SyS_y.

Зібравши всі ці вектори й матриці разом, маємо

+x=12(11)x=12(11)Sx=2(0110)+y=12(1i)y=12(1i)Sy=2(0ii0)+z=(10)z=(01)Sz=2(1001)\begin{aligned} |+x\rangle &= \frac{1}{\sqrt{2}}\begin{pmatrix}1 \\ 1\end{pmatrix} & \: & |-x\rangle &=& \frac{1}{\sqrt{2}}\begin{pmatrix}1 \\ -1\end{pmatrix} & \: &S_x &=& \frac{\hbar}{2} \begin{pmatrix} 0 & 1 \\ 1 & 0\end{pmatrix}\\ |+y\rangle &= \frac{1}{\sqrt{2}}\begin{pmatrix}1 \\ i\end{pmatrix} & \: & |-y\rangle &=& \frac{1}{\sqrt{2}}\begin{pmatrix}1 \\ -i\end{pmatrix} & \: &S_y &=& \frac{\hbar}{2} \begin{pmatrix} 0 & -i \\ i & 0\end{pmatrix}\\ |+z\rangle &= \begin{pmatrix}1 \\ 0\end{pmatrix} & \: &|-z\rangle &=& \begin{pmatrix}0 \\ 1\end{pmatrix} & \: &S_z &=& \frac{\hbar}{2} \begin{pmatrix} 1 & 0 \\ 0 & 1\end{pmatrix}\\ \end{aligned}

Запитання

Викладачі можуть отримати версії цих блокнотів із ключами відповідей та рекомендаціями щодо розміщення в типових навчальних програмах, заповнивши це коротке опитування про те, як використовуються блокноти.

Ключові концепції:

  • Для частинки зі спіном 1/2 вимірювання проєкції спіну на певну вісь може дати лише один із двох результатів, які зазвичай називають «вгору» та «вниз».
  • Qubit можна виміряти лише в одному з двох станів, які часто позначають як 0|0\rangle і 1|1\rangle.
  • Ми можемо моделювати експеримент Штерна–Герлаха на частинках зі спіном 1/2, використовуючи Qubit у квантовому комп'ютері.
  • Повторні вимірювання однієї й тієї самої фізичної спостережуваної величини для однієї й тієї самої частинки/Qubit даватимуть однаковий результат (якщо систему не збурює шум).
  • Ми можемо скористатися результатами експерименту Штерна–Герлаха або аналогічних дослідів із квантовими комп'ютерами, щоб вивести систему векторів стану та матричних операторів, що описують квантомеханічний спін.

Питання «Правда/Хибність»:

  1. П/Х Починаючи з експериментальних спостережень, єдиним правильним вибором вектора для представлення |\uparrow\rangle є (10)\begin{pmatrix}1 \\ 0\end{pmatrix}
  2. П/Х Якщо =(10)|\uparrow\rangle = \begin{pmatrix}1 \\ 0\end{pmatrix}, то єдиний вибір для |\downarrow\rangle — це (01)\begin{pmatrix}0 \\ 1\end{pmatrix} (з точністю до глобальної фази).
  3. П/Х Частинка, виміряна у стані 0|0\rangle, і надалі виявлятиметься у стані 0|0\rangle при наступних вимірюваннях уздовж осі zz.
  4. П/Х Частинка, виміряна у стані 0|0\rangle, і надалі виявлятиметься у стані 0|0\rangle при наступних вимірюваннях уздовж осі xx.
  5. П/Х Частинка, виміряна у стані 0|0\rangle, завжди виявлятиметься у стані +x|+\rangle_x при наступних вимірюваннях уздовж осі xx.

Питання з множинним вибором:

  1. Яка ймовірність виміряти частинку, що спочатку перебуває у стані |\uparrow\rangle, у стані +x|+x\rangle?

    • a. 0%
    • b. 25%
    • c. 50%
    • d. 71%
    • e. 100%
  2. Яка ймовірність виміряти частинку, що спочатку перебуває у стані |\uparrow\rangle, у стані |\downarrow\rangle?

    • a. 0%
    • b. 25%
    • c. 50%
    • d. 71%
    • e. 100%
  3. Стан |\uparrow\rangle частинки зі спіном 1/2 найчастіше асоціюється з яким станом у квантових обчисленнях?

    • a. +|+\rangle
    • b. |-\rangle
    • c. 0|0\rangle
    • d. 1|1\rangle
    • e. Жоден із наведених варіантів

Дискусійні запитання:

  1. Троє друзів обговорюють квантові вимірювання та оператори. Друг A каже: «Виконати вимірювання вздовж zz та подіяти оператором σz\sigma_z — це одне й те саме.» Друг B каже: «Ну, це різні процедури, але вони дають однаковий результат.» Друг C каже: «Це абсолютно різні речі; вони навіть по-різному діють на більшість станів.» З ким ти погоджуєшся і чому?

Задачі у вільній формі:

  1. З огляду на експериментальні спостереження та запропонований синтаксис:

P+x=(10)(ab)2=a2=12P_{\uparrow+x}=\vert \begin{pmatrix}1 & 0\end{pmatrix}\begin{pmatrix}a \\ b\end{pmatrix}\vert^2 = |a|^2 =\frac{1}{2} P+x=(01)(ab)2=b2=12P_{\downarrow+x}=\vert \begin{pmatrix}0 & 1\end{pmatrix}\begin{pmatrix}a \\ b\end{pmatrix}\vert^2 = |b|^2 =\frac{1}{2}

покажи, що з точністю до глобальної фази

+x=12(1eiα)|+\rangle_x = \frac{1}{\sqrt{2}}\begin{pmatrix}1 \\ e^{i\alpha}\end{pmatrix}

Обери α=0\alpha = 0, щоб отримати стандартний результат.

  1. З огляду на експериментальні спостереження та запропонований синтаксис:

Px=(10)(ab)2=a2=12P_{\uparrow-x}=\vert \begin{pmatrix}1 & 0\end{pmatrix}\begin{pmatrix}a \\ b\end{pmatrix}\vert^2 = |a|^2 =\frac{1}{2} Px=(01)(ab)2=b2=12P_{\downarrow-x}=\vert \begin{pmatrix}0 & 1\end{pmatrix}\begin{pmatrix}a \\ b\end{pmatrix}\vert^2 = |b|^2 =\frac{1}{2}

А також використовуючи результат із задачі-виклику 3:

P+xx=12(11)(cd)2=12c+d2=0P_{+x-x}=\vert \frac{1}{\sqrt{2}}\begin{pmatrix}1 & 1\end{pmatrix}\begin{pmatrix}c \\ d\end{pmatrix}\vert^2 = \frac{1}{2}|c+d|^2 =0

покажи, що з точністю до глобальної фази

+x=12(11)|+\rangle_x = \frac{1}{\sqrt{2}}\begin{pmatrix}1 \\ -1\end{pmatrix}

Подяки