Aller au contenu principal

L'expérience de Stern-Gerlach sur des ordinateurs quantiques

Pour ce module Qiskit en classe, les étudiants doivent disposer d'un environnement Python fonctionnel avec les packages suivants installés :

  • qiskit v2.1.0 ou plus récent
  • qiskit-ibm-runtime v0.40.1 ou plus récent
  • qiskit-aer v0.17.0 ou plus récent
  • qiskit.visualization
  • numpy
  • pylatexenc

Pour configurer et installer les packages ci-dessus, consulte le guide Installer Qiskit. Pour exécuter des tâches sur de vrais ordinateurs quantiques, les étudiants devront créer un compte IBM Quantum® en suivant les étapes du guide Configurer ton compte IBM Cloud.

Ce module a été testé et a utilisé 2 secondes de temps QPU. Il s'agit d'une estimation uniquement. Ton utilisation réelle peut varier.

# 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'

Regarde la présentation du module par le Dr Katie McCormick ci-dessous, ou clique ici pour la visionner sur YouTube.


Contexte

Au début des années 1900, les preuves d'un comportement quantifié à l'échelle atomique s'accumulaient. De nombreuses interprétations fructueuses de données, comme l'explication de la catastrophe ultraviolette par Max Planck, et des expériences comme celle d'Otto Stern et Walther Gerlach, ont été déterminantes pour convaincre le monde qu'un système de mécanique quantique était nécessaire, et que certains phénomènes physiques sont quantifiés. Dans le cas de l'expérience de Stern-Gerlach (conçue par Stern en 1921 et réalisée par Stern et Gerlach en 1922), l'objectif était de vérifier la quantification du moment cinétique dans les atomes.

À cette même époque, un modèle répandu pour l'atome était le modèle de Bohr-Sommerfeld, une extension du modèle de Bohr. Comme ce dernier, il prédisait que les électrons existaient dans certaines orbites quantifiées, semblables à des planètes en orbite autour du soleil.

Diagramme du modèle de Bohr-Sommerfeld. Un point central représente le noyau d'un atome. Des cercles ou des ellipses autour de ce point représentent les orbitales atomiques, ressemblant beaucoup aux orbites planétaires autour du soleil. Les orbites de plus haute énergie sont plus éloignées du noyau.

Bien que ce traitement se soit finalement révélé insuffisant pour expliquer le comportement quantique mécanique de l'atome, il prédisait néanmoins de nombreux phénomènes observés, comme les raies spectrales discrètes des atomes. Les orbites quantifiées des électrons avec des énergies spécifiques correspondent à des valeurs quantifiées du moment cinétique. C'est ce moment cinétique orbital que Stern et Gerlach cherchaient à observer dans leur expérience, bien que l'expérience s'applique à tout type de moment cinétique quantifié, y compris le spin. Il arrive souvent d'entendre parler de l'expérience de Stern-Gerlach appliquée aux spins. L'accent mis dans l'expérience originale sur le moment cinétique orbital s'explique simplement par le fait que George Uhlenbeck et Samuel Goudsmit n'avaient pas encore théorisé l'existence du spin, ce qu'ils ne feront qu'en 1925.

Quel que soit le type de moment cinétique, une charge dotée de moment cinétique possède un moment magnétique. Dans le traitement classique du mouvement orbital, on s'attendrait à ce qu'une particule de charge qq, de masse mm et de moment cinétique L\vec{L} ait un moment magnétique μ\mu donné par

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

Il s'avère que presque la même formule s'applique au moment cinétique en mécanique quantique, à ceci près qu'il faut ajouter un rapport numérique lié au type de moment cinétique, appelé le facteur g gg. Lorsqu'on combine différents types de moments cinétiques, ou qu'on généralise à un type arbitraire, on utilise souvent J\vec{J} à la place de L\vec{L}, ce qui donne :

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

Pour les objets classiques, g=1g=1. Pour les électrons, g2g\approx 2, et il existe de nombreuses valeurs pour divers noyaux et particules subatomiques. L'essentiel ici est que le moment cinétique quantifié implique un moment magnétique quantifié !

Ce moment magnétique subira un couple dans un champ magnétique :

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

Et il subira une force dans un champ magnétique à gradient non nul :

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

On considère souvent l'expression ci-dessus composante par composante ; il peut donc être pratique d'en examiner la composante zz :

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

En combinant les expressions, on peut obtenir

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

Stern et Gerlach ne connaissaient pas le facteur gg, mais même avec lui dans l'expression, on obtient une force égale à plusieurs constantes connues ou mesurables multipliées par un moment cinétique. Ainsi, en utilisant un champ magnétique à gradient connu et en mesurant la déviation d'une particule qui le traverse, on devrait obtenir des informations sur le moment cinétique. C'est là l'essence de l'expérience de Stern-Gerlach.

Des atomes d'argent traversant un champ magnétique inhomogène et étant déviés vers le haut ou vers le bas selon leur spin. En termes classiques, on s'attendrait à une distribution continue sur l'écran, mais dans l'expérience, on observe deux points distincts.

Fig. Expérience de Stern-Gerlach[1] : des atomes d'argent traversant un champ magnétique inhomogène et étant déviés vers le haut ou vers le bas selon leur spin. En termes classiques, on s'attendrait à une distribution continue sur l'écran, mais dans l'expérience, on observe deux points distincts.

Des atomes d'argent neutres ont été chauffés dans un four. Tandis qu'un faisceau d'atomes d'argent s'échappait du four, des collimateurs de faisceau étaient utilisés pour ne sélectionner que les atomes voyageant près du centre du champ magnétique inhomogène. Bien sûr, certains atomes dévient légèrement vers la gauche ou vers la droite et subissent un gradient de champ plus faible, voire nul. Nous ne nous préoccupons donc pas outre mesure du comportement des atomes situés très à gauche ou à droite. Ce qui nous intéresse, c'est ce qui arrive aux atomes qui traversent le centre du canal, où le gradient du champ magnétique produit une force déviant les atomes uniquement dans la direction zz.

Que faudrait-il attendre en termes classiques ?

Comment ces atomes se comporteraient-ils s'ils ressemblaient exactement à de gros aimants classiques ? Tu peux faire l'expérience toi-même. Imagine que tu lances de minuscules aimants néodymes devant un grand aimant puissant. L'orientation des petits aimants est aléatoire. Mais en passant près du grand aimant, ils se réorientent rapidement pour s'aligner avec le champ et sont attirés par lui. La grande majorité des petits aimants est déviée vers le grand aimant. L'observateur le plus attentif pourrait se demander : « Et la conservation de l'énergie, dans tout ça ? »

En effet, un moment magnétique dans un champ magnétique externe possède une énergie potentielle qui lui est associée :

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

Ainsi, si un moment magnétique venait à tourner dans le champ magnétique externe, la variation d'énergie serait :

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

Dans le cas particulier d'un petit aimant parfaitement anti-aligné avec le champ externe qui se retourne pour s'aligner avec lui, cela correspondrait à une diminution de l'énergie potentielle :

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

Alors, où va cette énergie ? Un aimant classique, comme un petit aimant néodyme de réfrigérateur, est constitué de nombreuses particules et peut dissiper presque n'importe quelle quantité d'énergie sous forme de chaleur. Les angles initiaux et finaux entre le moment magnétique et le champ magnétique externe peuvent être quelconques, et l'orientation initiale au moins serait aléatoire. Une quantité d'énergie différente serait donc dissipée sous forme de chaleur pour chaque petit aimant. Mais d'un point de vue classique, cela ne pose aucun problème, puisqu'un ensemble de particules classiques peut dissiper n'importe quelle quantité d'énergie sous forme de chaleur.

Que faudrait-il attendre en appliquant la pensée classique à l'échelle atomique ?

C'est en tout cas différent pour les aimants à l'échelle atomique, car il y a moins de particules en jeu et moins de degrés de liberté par lesquels l'énergie peut être dissipée. Les premières propositions de la mécanique quantique suggéraient en outre que l'énergie pouvant être absorbée par une particule individuelle, comme l'électron, serait quantifiée, ce qui signifie qu'un électron ne pourrait absorber que quelques quantités d'énergie spécifiques. Étant donné que les orientations initiales aléatoires nécessiteraient la dissipation de quantités d'énergie aléatoires, cela ne devrait pas être possible pour un système à niveaux d'énergie quantifiés. L'excès d'énergie ne pourrait pas être dissipé sous forme de chaleur. Que se passerait-il alors à la place ?

Vérifie ta compréhension

Lis les questions ci-dessous, réfléchis à tes réponses, puis clique sur les triangles pour révéler les solutions.

Explique ce que tu penses qu'il se passerait dans une situation comme celle décrite ci-dessus. C'est-à-dire : tu as un aimant infiniment petit qui ne peut pas dissiper d'énergie sous forme de chaleur. Ainsi, toute énergie potentielle magnétique initiale doit rester dans le système. Pourtant, un couple est exercé par un champ magnétique externe, qui tente de faire tourner le petit aimant pour l'aligner avec le champ externe. Que se passe-t-il ?

Réponse :

Le minuscule moment magnétique tournerait vers l'alignement avec le champ externe. Mais au moment où il s'aligne momentanément, il aurait une énergie cinétique de rotation qui le ferait continuer à tourner au-delà du champ et à se désaligner à nouveau. Ce comportement peut même être observé dans de grands aimants classiques. Mais dans ces systèmes classiques, l'oscillation du petit moment magnétique finit par s'arrêter au fur et à mesure que l'énergie est dissipée sous forme de chaleur. Mais dans un système dépourvu d'un tel mécanisme dissipatif, l'oscillation devrait se poursuivre indéfiniment.

Compte tenu du comportement attendu dans la réponse ci-dessus, quelle distribution de particules magnétiques t'attendrais-tu à voir sur l'écran ?

Réponse :

Une distribution lisse allant d'une déviation maximale vers le côté le plus fort du champ magnétique (pour les particules qui se trouvaient initialement alignées avec le champ externe) à une déviation maximale vers le côté le plus faible du champ (pour les particules initialement anti-alignées avec le champ externe), avec toutes les déviations intermédiaires correspondant à toutes les orientations initiales entre ces deux extrêmes.

Diagramme d'un faisceau de particules traversant un aimant. Elles sont déviées à des degrés variables dans la direction du champ magnétique. Lorsqu'elles frappent un écran distant, elles forment une ligne.

Que prédirait la mécanique quantique ?

La possibilité la plus étrange de toutes serait peut-être la suivante : et si le moment cinétique de l'électron était quantifié, mais aussi sa projection sur un axe ? La quantification du moment cinétique en tant que grandeur est intéressante, mais on pourrait tenter de l'expliquer à l'aide de l'intuition classique, à la façon dont les orbites planétaires se stabilisent en trajectoires fixes qui ne se croisent pas, n'ayant que certains moments cinétiques autorisés. Mais que se passerait-il si ce vecteur de moment cinétique ne pouvait pointer qu'exactement selon zz ou exactement dans le sens opposé à zz, sans aucune autre composante selon zz ? Et que si, mesuré selon une direction différente, le vecteur ne pouvait pointer qu'entièrement selon xx ou entièrement dans le sens opposé à xx, rien entre les deux ? Ce serait étrange d'une façon qui déjoue toute intuition classique.

Vérifie ta compréhension

Lis la question ci-dessous, réfléchis à ta réponse, puis clique sur le triangle pour révéler la solution.

Quel type de distribution de particules sur un écran t'attendrais-tu à trouver dans ce dernier cas, où la projection du moment cinétique dans la direction du champ est quantifiée ? N'hésite pas à ne considérer que les particules qui traversent parfaitement le centre du dispositif, ou à inclure celles qui s'en écartent légèrement vers les zones de gradient plus faible. Sois explicite.

Réponse :

Les particules au centre du dispositif subiraient un seul champ inhomogène et seraient toutes mesurées comme ayant l'une des deux orientations de leur moment magnétique. Ainsi, elles seraient déviées soit au maximum dans le sens du gradient, soit au maximum dans le sens opposé au gradient, rien entre les deux. Bien sûr, de chaque côté, là où le gradient est plus faible, la déviation serait moindre. À de très grandes positions latérales, les particules pourraient se trouver entièrement hors du gradient, et il pourrait y avoir une seule région de particules non déviées.

Diagramme d'un faisceau de particules dévié soit vers le haut, soit vers le bas, frappant l'un de deux points sur un écran, sans particules entre ces deux maxima

En quoi les qubits vont-ils nous aider à tester cela ?

La plupart des ordinateurs quantiques utilisent des « qubits » — les analogues quantiques des bits classiques. Plus précisément, ils sont conçus pour être des systèmes à deux niveaux, analogues aux états « allumé »/« éteint » des bits classiques. Des paradigmes d'informatique quantique utilisant des systèmes à trois niveaux (appelés « qutrits ») ou à plusieurs niveaux (appelés « qudits ») existent bel et bien. Mais la majeure partie des travaux se concentre sur les qubits. En particulier, les ordinateurs quantiques d'IBM® utilisent ce qu'on appelle des qubits transmons à fréquence fixe. Ceux-ci sont très différents du moment cinétique orbital ou du spin des atomes. Mais comme le spin d'un électron, les qubits d'IBM® sont des systèmes mécaniques quantiques pouvant interagir avec la lumière et sur lesquels des mesures peuvent être effectuées. En fait, on trouve souvent des analogies entre les états de spin en mécanique quantique et les états computationnels d'un qubit. Par exemple, on associe souvent l'état « spin vers le haut » à l'état computationnel 0, et le « spin vers le bas » à l'état computationnel 1 :

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

Nous pouvons utiliser ces similitudes pour observer des comportements mécaniques quantiques dans les ordinateurs quantiques IBM qui imitent le comportement mécanique quantique du moment cinétique orbital ou du spin dans les atomes. Nous ferons des observations similaires en utilisant des combinaisons linéaires de ces états, ce qui nous permettra d'étendre la discussion au moment cinétique dans n'importe quelle direction.

Première expérience : une mesure unique

Dans cette première expérience et tout au long du module, nous utiliserons un cadre de travail pour l'informatique quantique connu sous le nom de « Qiskit patterns », qui décompose les flux de travail en les étapes suivantes :

  • Étape 1 : Convertir les entrées classiques en un problème quantique
  • Étape 2 : Optimiser le problème pour l'exécution quantique
  • Étape 3 : Exécuter à l'aide des primitives Qiskit Runtime
  • Étape 4 : Post-traitement et analyse classique

Nous suivrons généralement ces étapes, bien que nous ne les étiquetions pas toujours explicitement.

Étape 1 : Convertir les entrées classiques en un problème quantique

Ici, les entrées classiques sont les orientations d'un spin avant une mesure dans un dispositif de Stern-Gerlach. Ne te préoccupe pas trop de la nature exacte de l'état quantique avant la mesure. C'est le sujet d'un autre module Qiskit en classe, portant sur le théorème de Bell.

Note que les ordinateurs quantiques IBM mesurent les états selon l'axe zz. Cette première expérience ressemblera donc beaucoup à l'expérience de Stern-Gerlach avec le gradient de champ magnétique selon zz. Nous verrons comment modifier le système pour mesurer selon différentes directions plus tard.

Commençons par construire l'analogue d'un état de spin, c'est-à-dire un mélange de |\uparrow\rangle et |\downarrow\rangle, ou de manière équivalente de 0|0\rangle et 1|1\rangle. Nous avons proposé quelques valeurs initiales, mais n'hésite pas à en essayer d'autres, voire des valeurs aléatoires.

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

Nous allons maintenant utiliser les angles ci-dessus comme paramètres dans un circuit quantique. Nous ne considérons qu'une seule particule à la fois, donc nous n'utiliserons qu'un seul qubit dans notre circuit, et nous n'aurons besoin que d'un seul registre classique.

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")

Sortie de la cellule de code précédente

Étape 2 : Optimiser le problème pour l'exécution quantique

Pour exécuter notre expérience sur un vrai ordinateur quantique, nous devons charger Qiskit Runtime Service et sélectionner un ordinateur quantique (ou un « backend »). Ci-dessous, nous sélectionnons simplement l'ordinateur quantique le moins occupé à notre disposition.

Le code ci-dessous permet de sauvegarder tes identifiants lors de la première utilisation. Veille à supprimer ces informations du notebook après les avoir enregistrées dans ton environnement, afin que tes identifiants ne soient pas partagés accidentellement lorsque tu partages le notebook. Consulte Configurer ton compte IBM Cloud et Initialiser le service dans un environnement non fiable pour plus de conseils.

# 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

Nous devons maintenant transpiler le circuit, c'est-à-dire faire correspondre notre circuit aux portes de base disponibles sur l'ordinateur quantique choisi, et optimiser notre circuit pour son exécution sur cet ordinateur.

# 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)

Étape 3 : Exécuter à l'aide des primitives Qiskit Runtime

Nous voulons maintenant exécuter ceci sur un vrai ordinateur quantique. Toute la syntaxe nécessaire se trouve dans le bloc de code ci-dessous. Si tu as épuisé ton temps alloué sur de vrais ordinateurs quantiques, ou si tu n'as pas de connexion Internet, tu peux décommenter le bloc de code suivant, qui exécutera le code sur un simulateur local.

# 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()

Utilise le code ci-dessous si tu n'es pas en mesure d'exécuter l'expérience sur un vrai ordinateur quantique.

# 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()

Étape 4 : Post-traitement et analyse classique

Pour cette expérience très simple, l'analyse classique consiste uniquement à visualiser le résultat expérimental.

from qiskit.visualization import plot_histogram

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

Sortie de la cellule de code précédente

Nous avons effectué une mesure et obtenu « 0 ». Cela ne nous surprend pas. Nous savons que nous utilisons un ordinateur quantique composé de qubits et nous sommes très habitués aux bits classiques retournant un 0 ou un 1. Mais garde à l'esprit : il s'agit de l'analogue en informatique quantique des expériences réalisées avec des particules dotées de moments magnétiques. Si nous avions attendu une répartition uniforme entre 0 et +1, il nous aurait effectivement surpris d'obtenir un extrémum dès notre première mesure. C'est cette surprenante quantification des résultats dans l'expérience de Stern-Gerlach qui nous a conduits à une meilleure compréhension de la nature, et qui nous a finalement aidés à construire des ordinateurs quantiques.

Voyons ce qui se passe lorsque nous effectuons un ensemble de mesures.

Deuxième expérience : mesurer de nombreuses particules

Pour recueillir des statistiques sur de nombreuses mesures de ce type, nous n'avons pas besoin de répéter les étapes 1 et 2. Nous pouvons simplement augmenter le nombre de shots dans notre expérience. N'hésite pas à jouer avec le nombre de shots dans l'instance de l'étape 3 ci-dessous.

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()

Comme précédemment, si tu ne peux pas exécuter sur un vrai ordinateur quantique, décommente le bloc ci-dessus de la première expérience et change simplement num_shots = 1 en num_shots = 100 ou plus.

plot_histogram(counts)

Sortie de la cellule de code précédente

On constate que l'on mesure parfois 0 et parfois 1. On ne mesure jamais rien d'autre ! Tu pourrais modifier le nombre de shots et remarquer que la probabilité de mesurer 0 ou 1 semble être assez cohérente entre différentes exécutions avec des nombres de shots différents. Ainsi, quelque chose dans la préparation de l'état semble déterminer la probabilité des résultats de mesure, bien que n'importe quelle mesure individuelle puisse donner 0 ou 1.

Troisième expérience : des spins aléatoires dans un four

Dans l'expérience de Stern-Gerlach, les chercheurs ne pouvaient pas choisir l'angle selon lequel un vecteur de moment angulaire émergerait du four. Les orientations étaient aléatoires (ou quelque chose de plus mystérieux encore ! Voir le module Qiskit en classe sur le théorème de Bell). Un analogue raisonnable de cette expérience serait d'initialiser aléatoirement les états de notre qubit et d'effectuer de nombreuses mesures.

Étape 1 : Transformer les entrées classiques en un problème quantique

Le circuit que nous voulons construire est le même que précédemment. La seule différence est que cette fois, nous allons construire le circuit à l'aide de portes avec des paramètres libres θ\theta et ϕ\phi. Des valeurs numériques pour ces paramètres seront ensuite attribuées à chaque nouvelle exécution.

# 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")

Résultat de la cellule de code précédente

Exécuter un circuit quantique pour un seul shot et le faire pour de nombreuses configurations aléatoires est un flux de travail inhabituel pour un ordinateur quantique. Cela peut certainement se faire, mais par souci de simplicité, nous utiliserons ici un simulateur local.

# 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)

Résultat de la cellule de code précédente

On observe donc que l'état initial aléatoire des qubits (correspondant aux orientations aléatoires du moment angulaire dans une expérience de Stern-Gerlach) produit des nombres similaires d'états 0 et 1 (comme des nombres similaires d'états spin haut et spin bas). C'est exactement ce que montrait l'expérience originale de Stern-Gerlach.

Quatrième expérience : des mesures répétées

Lorsqu'un qubit démarre dans un état aléatoire, on constate qu'il y a environ 50-50 de chances de mesurer un extrémum plutôt que l'autre. Mais qu'arrive-t-il à l'état du qubit (ou au moment angulaire de la particule) après la mesure ? Pour répondre à cette question, nous devrons définir un circuit qui nous permet d'effectuer plusieurs mesures sur les mêmes qubits. Définissons un circuit que nous pourrons utiliser pour étudier cela. Nous voudrons permettre la possibilité de mesurer les deux états 0|0\rangle et 1|1\rangle, donc nous avons besoin de quelque chose pour faire pivoter l'état initial du qubit depuis l'état par défaut 0|0\rangle. Dans ce cas, nous utiliserons une porte Hadamard HH, puisque H0=12(0+1)H|0\rangle = \frac{1}{\sqrt{2}}(|0\rangle+|1\rangle). Remarque : par défaut, ces deux mesures se feront le long de 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)

Résultat de la cellule de code précédente

Dans la figure ci-dessus, les cases sont étiquetées « 00 », « 01 » et ainsi de suite. Ici, ces chiffres font référence au « 2e résultat, 1er résultat ». Ainsi, « 00 » signifie que les deux mesures ont donné l'état 0|0\rangle, et « 01 » signifie que la première mesure a donné 1|1\rangle et la seconde a donné 0|0\rangle. La grande majorité des qubits ont été mesurés soit deux fois dans l'état 0|0\rangle, soit deux fois dans l'état 1|1\rangle. Il était très rare qu'un qubit soit mesuré dans un état puis dans un autre, et les quelques cas où cela s'est produit (~1 %) sont dus au bruit. Dans ce cas, ce bruit a été simulé conformément au comportement du système quantique réel. Cette corrélation observée entre mesures successives est également observée dans les mesures de type Stern-Gerlach sur des particules possédant un moment angulaire de spin. Si une particule est mesurée comme étant « spin haut », une mesure ultérieure effectuée peu après donnera à nouveau « spin haut » (à quelques variations mineures dues au bruit près).

Cela peut sembler trivial. Après tout, si un qubit est mesuré dans un état, puis qu'on le mesure à nouveau rapidement, pourquoi ne serait-il plus dans cet état ? Mais si l'on s'attarde vraiment sur cette subtilité, elle peut nous aider à choisir les outils mathématiques pour décrire ce phénomène.

Analyse des expériences jusqu'ici

Récapitulons quelques observations tirées de nos expériences jusqu'à présent :

  • La mesure d'un système quantique mécanique ne donnera que l'une d'un ensemble de « valeurs autorisées ». Pour les systèmes à deux niveaux comme les qubits ou les particules de spin 1/2, une mesure ne donnera que l'un des deux résultats binaires.
  • Lorsque nous initialisons aléatoirement l'état de notre système binaire (comme des particules de spin 1/2 sortant d'un four), l'un ou l'autre des deux résultats de mesure binaires est possible.
  • Une fois qu'une mesure est effectuée et que l'état du système est connu, répéter la mesure de la même observable physique ne change pas l'état ! Autrement dit, si on obtient l'état 0 une fois, lors d'une nouvelle mesure il sera toujours dans l'état 0 (à quelques bruits mineurs près dans le système, ~0,1 % à 1 %).

Remarquons explicitement que nous n'avons pas encore abordé la nature probabiliste de la mécanique quantique, ni rien dit à propos du « collapse » de l'état vers un état propre. En n'utilisant que les observations ci-dessus, on pourrait être tenté de chercher une opération mathématique OO qui laisse un ensemble particulier d'états quantiques ψ|\psi\rangle inchangé, à une constante multiplicative près : Oψ=cψO|\psi\rangle = c|\psi \rangle, puisque mesurer selon zz deux fois de suite donne le même résultat. En définitive, cette recherche ne permettra pas de décrire tous les comportements que nous observerons. Mais elle peut en décrire certains, donc nous l'explorerons encore un peu.

Une telle opération existe. L'opération matricielle sur certains vecteurs les modifie, et l'opération matricielle sur d'autres vecteurs (les vecteurs propres) laisse le vecteur inchangé à une constante multiplicative près. Prenons par exemple la matrice MM et le vecteur v|v\rangle

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

et

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

On remarque que

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.

Mais pour d'autres vecteurs, disons v=(12)|v'\rangle = \begin{pmatrix} 1\\2\end{pmatrix}, on a

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.

On pourrait essayer de décrire le spin d'une particule à l'aide d'une matrice, et les états des particules après mesure à l'aide d'un vecteur, appelé « vecteur d'état ». Il n'est pas du tout évident de savoir quelles valeurs devraient figurer dans une telle matrice ou un tel vecteur d'état, mais la seule propriété que nous avons tirée des mesures jusqu'ici et que nous pourrions utiliser pour étiqueter les états serait la probabilité de mesurer 0 ou 1 (« spin haut » ou « spin bas » dans le contexte des particules de spin 1/2). Nous devons envisager que les entrées des vecteurs d'état soient liées à cette probabilité (exactement la probabilité, l'« amplitude de probabilité » — ce qui signifie qu'on élève l'entrée au carré pour obtenir la probabilité, etc.). Mais à ce stade, nous ne savons pas si les entrées de ces matrices doivent être strictement réelles, complexes, ou autre. Par prudence, essayons de développer un cadre dans lequel les vecteurs et les matrices satisfont les conditions suivantes :

  • Les opérateurs matriciels sont connectés à l'expérience autant que possible. Par exemple, on pourrait associer les valeurs propres d'une matrice de spin aux projections de spin observées expérimentalement.
  • Les vecteurs d'état doivent être reliés à la probabilité de la façon suivante : si une particule est dans le vecteur d'état A|A\rangle, la probabilité qu'une mesure ultérieure trouve la particule dans l'état B|B\rangle est PABAB2P_{AB}\equiv |\langle A| B \rangle|^2.

Cela nous laisse une grande liberté pour construire nos premières matrices. Par exemple, on pourrait naïvement essayer

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

Ici, 0|0\rangle \sim |\uparrow\rangle signifie qu'il existe des états dans les ordinateurs quantiques et dans les systèmes de spin 1/2 qui sont très similaires et souvent mis en correspondance. Ils ne sont évidemment pas exactement identiques, car ils font référence à des systèmes différents. Mais l'algèbre décrivant ces systèmes à deux états pourrait obéir aux mêmes règles (spoiler : c'est bien le cas !). Remarquons que ce choix arbitraire présente déjà un avantage. En effet,

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.

Autrement dit, si une particule est déjà dans l'état 0|0\rangle, la probabilité qu'une mesure ultérieure donne également 0|0\rangle est 1 (hormis les effets du bruit). C'est excellent, car nous avons déjà vu que lorsqu'un état est dans l'état 0 ou « spin haut », il y reste lors des mesures ultérieures. La probabilité ci-dessus devrait bien être de 100 %.

Vérifie ta compréhension

Lis les questions ci-dessous, réfléchis à tes réponses, puis clique sur les triangles pour révéler les solutions.

Pourquoi

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

est-il un meilleur choix que, par exemple,

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

Réponse :

Notre tentative d'associer la probabilité d'une mesure au carré du produit scalaire implique que la norme de chaque vecteur doit être 1. Autrement dit, vv2=1|\langle v|v\rangle|^2 = 1 pour tout v|v\rangle, puisque la probabilité qu'une chose dans l'état v|v\rangle se trouve dans l'état v|v\rangle est de 100 %. C'est ce que l'on appelle la « condition de normalisation ».

Pourquoi

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

est-il un meilleur choix que, par exemple,

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

Réponse :

Ce n'est pas le cas. Il n'y a aucune raison de choisir initialement 0=(10)|0\rangle = \begin{pmatrix} 1 \\0 \end{pmatrix}. C'est plutôt une convention. Cependant, une fois ce choix effectué, il impose certaines contraintes sur les choix ultérieurs. Voir ci-dessous.

Rappelle-toi que dans les expériences ci-dessus, nous avons constaté qu'un qubit initialement dans l'état 0|0\rangle restait dans cet état lors des mesures ultérieures. Il en va de même pour 1|1\rangle. Cela signifie qu'un qubit se trouvant dans 0|0\rangle a une probabilité nulle d'être mesuré dans l'état 1|1\rangle (hormis les effets du bruit). Le lien que nous avons établi entre produits scalaires et probabilités de mesure nous indique alors que

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

Sans perte de généralité, on peut écrire le vecteur d'état 1=(ab)|1\rangle = \begin{pmatrix} a \\ b \end{pmatrix}. On peut alors écrire

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.

La condition P11=1P_{11} = 1, dite « condition de normalisation », nous dit que b2=1|b|^2=1. Cela seul nous restreint à b=eiϕb=e^{i\phi} pour ϕR\phi \in \mathbb{R}. Il s'avère qu'il existe d'autres raisons de choisir b=1b=1 qui dépassent le cadre de cette introduction. Pour l'instant, il suffit de noter que b=1b=1 est une solution acceptable.

Nous avons fait beaucoup de chemin dans notre analyse. Le choix d'une forme pour nos vecteurs d'état nous permet de construire une matrice décrivant quelque chose à propos des phénomènes physiques en jeu ici. En particulier, parce que l'expérience originale de Stern-Gerlach a mesuré une séparation des trajectoires basée sur les composantes du moment angulaire de spin selon l'axe zz, nous souhaitons un opérateur qui décrit exactement cela : SzS_z. Un autre lien clé avec l'expérience est que, à partir de la quantité de déviation, du temps de vol et de la force de champ magnétique connue, on peut déterminer la magnitude de la composante zz du spin. Bien que cela nécessite de nombreuses hypothèses sur la précision du dispositif expérimental, nous nous contenterons ici de rappeler que les composantes zz mesurées du moment angulaire de spin sont ±/2\pm \hbar/2.

Nous cherchons donc une matrice à valeurs propres réelles (satisfaite par les matrices hermitiennes) dont les valeurs propres correspondent à ces composantes de spin observées expérimentalement. Sans perte de généralité, on peut écrire Sz=(s11s12s21s22)S_z = \begin{pmatrix} s_{11} & s_{12} \\ s_{21} & s_{22}\end{pmatrix}, et on peut exiger :

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

En combinant, et en extrayant le facteur global /2\hbar/2, on obtient

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

C'est l'opérateur de spin-z bien connu que l'on trouve dans tous les manuels de mécanique quantique. On le voit souvent sans le /2\hbar/2, auquel cas il s'agit de l'opérateur « Pauli-z », généralement noté σz\sigma_z :

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

C'est utile, car cet opérateur de Pauli (et les matrices associées) peut décrire de nombreux systèmes physiques impliquant deux niveaux ou deux résultats de mesure possibles, notamment les états des qubits transmon dans un ordinateur quantique.

Avant de passer aux autres opérateurs et états qui y sont liés, nous devons aborder un fait que beaucoup de gens comprennent mal. L'action d'un opérateur n'est pas la même chose qu'une mesure. Dans un sens, on pourrait dire : « Bien sûr que non ! L'une se produit sur papier dans le cadre d'un calcul mathématique, et l'autre se produit en laboratoire sur des systèmes physiques. » Oui, c'est vrai, mais c'est bien plus que cela. Effectuer une mesure de la composante zz du spin donnera toujours un état « spin haut » ou « spin bas », quel que soit l'état initial du système. Nous avons vu cela avec les analogues de l'informatique quantique 0|0\rangle et 1|1\rangle. Nous avons initialisé des états dans des centaines d'orientations aléatoires, et les mesures donnaient toujours soit 0|0\rangle soit 1|1\rangle. C'est ce que l'on appelle le « collapse de l'état » vers un état propre lors de la mesure. Cela ne se produit pas lorsqu'on applique une matrice à un état. Essaie les questions ci-dessous pour explorer cela.

Vérifie ta compréhension

Lis la (les) question(s) ci-dessous, réfléchis à ta réponse, puis clique sur le triangle pour révéler la solution.

Suppose que tu partes d'une particule dans un état de spin

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

(a) Que obtiens-tu si tu fais agir l'opérateur SzS_z sur ce vecteur d'état ? (b) Que obtiens-tu si tu effectues une seule mesure de la composante zz du spin de cette particule ? (c) Que obtiens-tu si tu prépares de nombreuses particules identiques dans cet état et effectues des milliers de mesures de la composante zz du spin ?

Réponses :

(a) On obtient

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}.

C'est tout. Il n'y a pas de résultat expérimental. On applique simplement la matrice au vecteur et on obtient un vecteur légèrement différent qui présente maintenant un signe « - », et qui n'a plus de norme égale à 1, puisqu'il a un préfacteur /2\hbar/2.

(b) On obtiendra soit |\uparrow\rangle soit |\downarrow\rangle. Cela correspond à l'observation d'une projection du spin sur l'axe zz de /2\hbar/2 ou /2-\hbar/2, respectivement. On peut également déterminer la probabilité de chaque résultat, puisque

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}

Donc, bien que l'état spin haut soit 20 % plus probable, les deux résultats sont possibles et on n'obtiendra que l'un de ces deux états.

(c) Environ 60 % des mesures donneront des particules spin haut, et environ 40 % des mesures donneront des particules spin bas, selon les probabilités de mesure calculées en (b).

Vérifie les réponses des parties (b) et (c) de la question précédente en utilisant l'analogie entre les états spin haut d'un atome et les états de qubit :

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

Écris des circuits quantiques pour créer l'état initial souhaité, puis utilise du matériel réel ou un simulateur pour vérifier les résultats d'une mesure unique, et à partir d'un ensemble de centaines, voire de milliers de mesures.

Réponse :

#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.

Cinquième expérience : Mesurer différentes observables

Jusqu'à présent, nous n'avons effectué des mesures que le long de l'axe z. Dans une expérience de Stern-Gerlach, si nous voulions mesurer le long de, disons, l'axe x, il suffirait d'orienter le champ magnétique inhomogène dans la direction de l'axe xx et de chercher des déflexions le long de xx sur l'écran. Les ordinateurs quantiques d'IBM, cependant, sont conçus pour ne faire des mesures que le long d'un seul axe (zz). Pour mesurer un état le long de xx, il faut effectuer un « changement de base ». Cela signifie qu'il faut réaliser une opération qui transforme les états le long de xx dans la sphère de Bloch en états le long de zz, et vice-versa. Il existe plusieurs façons de mettre cela en œuvre, mais la méthode privilégiée est la porte de Hadamard :

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

Vérifie ta compréhension

Lis les questions ci-dessous, réfléchis à ta réponse, puis clique sur le triangle pour révéler la solution.

Montre que H0=+xH|0\rangle = |+\rangle_x et que H+x=0H|+\rangle_x = |0\rangle

Réponse :

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

Montre que H1=xH|1\rangle = |-\rangle_x et que Hx=1H|-\rangle_x = |1\rangle

Réponse :

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")

Output of the previous code cell

Ce circuit fait pivoter notre système de sorte que les mesures (le long de zz) nous renseignent sur les caractéristiques selon xx avant la rotation. Nous savons déjà que l'ordinateur quantique initialise les états à 0|0\rangle, ce qui correspond à |\uparrow\rangle. Voyons ce qui se passe lorsqu'on mesure la projection du spin le long de xx pour un état initialement dans |\uparrow\rangle. Nous montrons cette étape sur un simulateur pour t'encourager à explorer les statistiques d'autres circuits avec différentes initialisations.

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}

Ceci nous montre que pour un qubit initialement dans 0|0\rangle (ou de manière équivalente, un spin dans |\uparrow\rangle), la probabilité de mesurer une projection le long de +x+x ou de x-x est d'environ 50-50. D'une certaine façon, cela est tout à fait logique. Après tout, si quelque chose pointait dans la direction z, il n'aurait aucune préférence particulière pour ±x\pm x. On pourrait s'attendre à la même chose si on part de l'état 1|1\rangle (ou |\downarrow\rangle). Vérifions :

# 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")

Output of the previous code cell

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

Oui ! Là encore, on obtient une probabilité 50-50 de mesurer des projections le long de ±x\pm x. Par analogie avec les mesures le long de zz, on pourrait aussi supposer qu'une particule qui s'effondre dans un état définitivement le long de +x+x aurait une probabilité nulle d'être ensuite mesurée le long de x-x. Vérifions :

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")

Output of the previous code cell

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}

Output of the previous code cell

Comme prévu, on obtient des résultats dans lesquels la projection est le long de +x+x, puis à nouveau le long de +x+x, et des résultats dans lesquels la projection est initialement le long de x-x et se retrouve à nouveau le long de x-x. On ne voit pas de cas où la projection passe de +x+x à x-x ou vice-versa. Nous pouvons rassembler nos observations et les utiliser pour développer davantage d'opérateurs sous forme matricielle, ainsi que de nouveaux vecteurs d'état.

Nous savons :

  • Les états avec des projections définies le long de +z+z ou de z-z ont 50 % de chances d'avoir une projection le long de +x+x et 50 % de chances d'avoir une projection le long de x-x.
  • Les états avec une projection définie le long de +x+x ont une probabilité nulle d'être ensuite trouvés avec une projection le long de x-x, et vice-versa.

Nous pouvons utiliser ces résultats pour construire des états avec une projection définie et positive le long de xx (que nous appelons +x|+x\rangle), et ceux avec une projection définie et négative le long de xx (que nous appelons x|-x\rangle). À partir de ces états, on peut construire la matrice correspondant à SxS_x, exactement comme nous l'avons fait pour SzS_z. Nous laissons ces étapes en exercices pour l'apprenant. De la même façon, on peut construire des expériences effectuant des mesures le long de l'axe yy, déterminer les vecteurs pour +y|+y\rangle et y|-y\rangle, et finalement obtenir une expression pour SyS_y.

En rassemblant tous ces vecteurs et matrices, nous obtenons

+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}

Questions

Les enseignants peuvent demander des versions de ces notebooks avec les corrigés et des conseils sur leur intégration dans les programmes habituels en remplissant ce court sondage sur la façon dont les notebooks sont utilisés.

Concepts clés :

  • Pour une particule de spin-1/2, une mesure de la projection du spin sur un axe ne peut donner que l'un de deux résultats, souvent appelés « haut » et « bas ».
  • Les qubits ne peuvent être mesurés que dans l'un de deux états, souvent désignés par 0|0\rangle et 1|1\rangle.
  • Nous pouvons modéliser l'expérience de Stern-Gerlach sur des particules de spin-1/2 à l'aide de qubits dans un ordinateur quantique.
  • Des mesures répétées de la même observable physique sur la même particule/qubit produiront le même résultat (à moins que le système ne soit perturbé par du bruit).
  • Nous pouvons utiliser les résultats de l'expérience de Stern-Gerlach ou des expériences analogues avec des ordinateurs quantiques pour dériver un système de vecteurs d'état et d'opérateurs matriciels décrivant le spin en mécanique quantique.

Questions V/F :

  1. V/F À partir des observations expérimentales, le seul choix valide pour un vecteur représentant |\uparrow\rangle est (10)\begin{pmatrix}1 \\ 0\end{pmatrix}
  2. V/F Si =(10)|\uparrow\rangle = \begin{pmatrix}1 \\ 0\end{pmatrix}, le seul choix pour |\downarrow\rangle est (01)\begin{pmatrix}0 \\ 1\end{pmatrix} (à une phase globale près).
  3. V/F Une particule mesurée dans l'état 0|0\rangle continuera d'être trouvée dans l'état 0|0\rangle lors de mesures ultérieures le long de zz.
  4. V/F Une particule mesurée dans l'état 0|0\rangle continuera d'être trouvée dans l'état 0|0\rangle lors de mesures ultérieures le long de xx.
  5. V/F Une particule mesurée dans l'état 0|0\rangle sera toujours trouvée dans l'état +x|+\rangle_x lors de mesures ultérieures le long de xx.

Questions à choix multiple :

  1. Une particule initialement dans |\uparrow\rangle a quelle probabilité d'être mesurée dans l'état +x|+x\rangle ?

    • a. 0 %
    • b. 25 %
    • c. 50 %
    • d. 71 %
    • e. 100 %
  2. Une particule initialement dans |\uparrow\rangle a quelle probabilité d'être mesurée dans l'état |\downarrow\rangle ?

    • a. 0 %
    • b. 25 %
    • c. 50 %
    • d. 71 %
    • e. 100 %
  3. L'état |\uparrow\rangle d'une particule de spin-1/2 est le plus souvent associé à quel état du calcul quantique ?

    • a. +|+\rangle
    • b. |-\rangle
    • c. 0|0\rangle
    • d. 1|1\rangle
    • e. Aucune des réponses ci-dessus

Questions de discussion :

  1. Trois amis discutent de mesures et d'opérateurs quantiques. L'ami A dit : « Effectuer une mesure le long de zz et agir avec l'opérateur σz\sigma_z sont la même chose. » L'ami B dit : « Eh bien, ce sont des procédures différentes, mais elles ont le même résultat. » L'ami C dit : « Elles sont totalement différentes ; elles ont même des effets différents sur la plupart des états. » Avec qui es-tu d'accord et pourquoi ?

Problèmes à réponse libre :

  1. Étant donné les observations expérimentales et la syntaxe proposée :

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}

montre qu'à une phase globale près

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

Choisis α=0\alpha = 0 pour obtenir le résultat standard.

  1. Étant donné les observations expérimentales et la syntaxe proposée :

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}

Et en utilisant le résultat du problème défi 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

montre qu'à une phase globale près

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

Remerciements

[1] Par Tatoute - Œuvre propre, CC BY-SA 4.0, https://commons.wikimedia.org/w/index.php?curid=34095239