L'expérience de Stern-Gerlach à l'aide d'ordinateurs quantiques
Pour ce module Qiskit en classe, les étudiants doivent disposer d'un environnement Python fonctionnel avec les paquets suivants installés :
qiskitv2.1.0 ou plus récentqiskit-ibm-runtimev0.40.1 ou plus récentqiskit-aerv0.17.0 ou plus récentqiskit.visualizationnumpypylatexenc
Pour configurer et installer les paquets ci-dessus, voir le guide d' installation de Qiskit. Afin d'exécuter des tâches sur de véritables ordinateurs quantiques, les étudiants devront créer un compte sur IBM Quantum® en suivant les étapes du guide Configurer votre compte IBM Cloud.
Ce module a été testé et a utilisé 2 secondes de temps QPU. Il s'agit uniquement d'une estimation. L'utilisation réelle peut varier.
# 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'Regardez la présentation du module par le Dr. Katie McCormick ci-dessous, ou cliquez ici pour la regarder sur YouTube.
Arrière-plan
Au début des années 1900, les preuves d'un comportement quantifié à l'échelle atomique s'accumulent. De nombreuses interprétations réussies des données, comme l'explication par Max Planck de la catastrophe de l'ultraviolet, et des expériences comme celle d'Otto Stern et de 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 étaient quantifiés. Dans le cas de l'expérience 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 angulaire dans les atomes.
À la même époque, un modèle prédominant pour l'atome était le modèle de Bohr-Sommerfeld, qui était une extension du modèle de Bohr et qui, comme le modèle de Bohr, prédisait que les électrons existaient sur certaines orbites quantifiées semblables à des planètes en orbite autour du soleil.
Bien que ce traitement se soit finalement avéré insuffisant pour expliquer le comportement mécanique quantique de l'atome, il a permis de prédire de nombreux phénomènes observés, comme les lignes spectrales discrètes des atomes. Les orbites quantifiées des électrons avec des énergies spécifiques correspondent à des valeurs quantifiées du moment angulaire. C'est ce moment angulaire orbital que Stern et Gerlach ont cherché à observer dans leur expérience, bien que celle-ci s'applique à tout type de moment angulaire quantifié, y compris le spin. Vous entendez souvent parler de l'expérience Stern-Gerlach appliquée aux spins. L'expérience initiale portait sur le moment angulaire orbital, simplement parce que George Uhlenbeck et Samuel Goudsmit n'ont théorisé l'existence du spin qu'en 1925.
Quel que soit le type de moment angulaire, une charge dotée d'un moment angulaire possède un moment magnétique. Dans le traitement classique du mouvement orbital, on s'attend à ce qu'une particule de charge , de masse et de moment angulaire ait un moment magnétique donné par
Il s'avère que la formule est pratiquement la même pour le moment angulaire en mécanique quantique, à condition d'ajouter un rapport numérique lié au type de moment angulaire, appelé facteur g . Lorsque l'on combine différents types de moment angulaire, ou que l'on généralise à un type arbitraire, on voit souvent utilisé à la place de , ce qui nous permet d'écrire :
Pour les objets classiques, . Pour les électrons, , et il existe de nombreuses valeurs pour divers noyaux et particules subatomiques. L'essentiel est que le moment angulaire quantifié signifie un moment magnétique quantifié!
Ce moment magnétique subit un couple dans un champ magnétique :
Et il subira une force dans un champ magnétique dont le gradient n'est pas nul :
Nous considérerons souvent l'expression ci-dessus une composante à la fois, il peut donc être pratique de penser à sa composante :
En combinant les expressions, on obtient
Stern et Gerlach ne connaissaient pas le facteur , mais même avec ce facteur dans l'expression, nous avons une force égale à plusieurs constantes connues ou mesurables multipliées par un moment angulaire. Ainsi, en utilisant un champ magnétique dont le gradient est connu et en mesurant la déviation d'une particule lorsqu'elle traverse le champ, nous devrions obtenir des informations sur le moment angulaire. C'est le cœur de l'expérience Stern-Gerlach.
Fig. Expérience de Stern-Gerlach [1] : Des atomes d'argent traversent un champ magnétique inhomogène et sont déviés vers le haut ou vers le bas en fonction de leur spin. Classiquement, on s'attendrait à une distribution continue sur l'écran, mais l'expérience montre deux points distincts.
Des atomes d'argent neutres ont été chauffés dans un four. Lorsqu'un faisceau d'atomes d'argent sortait du four, des collimateurs de faisceau étaient utilisés pour sélectionner uniquement les atomes se déplaçant près du centre du champ magnétique inhomogène. Bien entendu, certains atomes dévient un peu vers la gauche ou la droite et subissent un gradient plus faible dans le champ, voire pas de gradient du tout. Nous ne sommes donc pas trop préoccupés par le comportement des atomes situés à gauche ou à droite. Nous nous intéressons à ce qu'il advient des atomes qui se déplacent au centre du canal, où le gradient de champ magnétique produit une force qui dévie les atomes dans la seule direction .
À quoi devons-nous nous attendre, classiquement?
Comment ces atomes se comporteraient-ils s'ils étaient exactement comme des aimants classiques et volumineux? Vous pouvez faire l'expérience. Imaginez que vous fassiez passer de minuscules aimants en néodyme devant un grand et puissant aimant. L'orientation des petits aimants est aléatoire. Mais lorsqu'ils passent devant le grand aimant, ils se réorientent rapidement pour s'aligner sur le champ et sont attirés par le grand aimant. La grande majorité des petits aimants sont déviés vers le grand aimant. L'observateur le plus avisé pourrait poser la question suivante : "Qu'en est-il des économies d'énergie?"
En effet, un moment magnétique dans un champ magnétique externe est associé à une énergie potentielle :
Ainsi, si un moment magnétique devait tourner dans le champ magnétique externe, il y aurait un changement d'énergie donné par :
Dans le cas particulier d'un petit aimant parfaitement désaligné par rapport au champ extérieur qui se retourne et s'aligne sur lui, cela correspondrait à une diminution de l'énergie potentielle :
Où va donc cette énergie? Un aimant classique, tel qu'un petit aimant néodyme de réfrigérateur, possède 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 pourraient être quelconques, et l'orientation initiale serait au moins aléatoire. La quantité d'énergie dissipée sous forme de chaleur est donc différente 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.
À quoi devons-nous nous attendre en appliquant la pensée classique à l'échelle atomique?
À tout le moins, il n'en va pas de même pour les aimants à l'échelle atomique, car il y a moins de particules en jeu, moins de degrés de liberté à travers lesquels l'énergie peut être dissipée. Les propositions des débuts de la mécanique quantique suggéraient en outre que l'énergie pouvant être absorbée par une particule individuelle, telle que l'électron, serait quantifiée, ce qui signifie qu'un électron ne pourrait absorber que quelques quantités spécifiques d'énergie. É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 dont les niveaux d'énergie sont quantifiés. L'énergie excédentaire ne pouvait pas être dissipée sous forme de chaleur. Que se passerait-il à la place?
Vérifiez votre compréhension
Expliquez ce que vous pensez qu'il se passerait dans une situation comme celle décrite ci-dessus. En d'autres termes, vous avez un aimant atomiquement 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. Cependant, un champ magnétique externe applique un couple qui tente de faire tourner le petit aimant pour qu'il s'aligne sur le champ externe. Que se passe-t-il?
Le minuscule moment magnétique tournerait pour s'aligner sur le champ extérieur. Mais lorsqu'il s'aligne momentanément, il dispose d'une énergie cinétique de rotation qui le fait tourner au-delà du champ et revenir hors de l'alignement. Ce comportement peut même être observé dans les grands aimants classiques. Mais dans ces systèmes classiques, l'oscillation du petit moment magnétique finit par s'arrêter car l'énergie est dissipée en 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 répartition des particules magnétiques devriez-vous observer sur l'écran?
Une distribution lisse allant d'une déviation maximale vers le côté le plus fort du champ magnétique (les particules qui ont commencé par être alignées avec le champ externe) à une déviation maximale vers le côté le plus faible du champ (les particules qui ont commencé par être désalignées avec le champ externe), ainsi que toutes les déviations intermédiaires, correspondant à toutes les orientations initiales entre ces extrema.

Que prédirait la mécanique quantique?
La plus étrange de toutes les possibilités serait peut-être la suivante : Que se passerait-il si le moment angulaire de l'électron était quantifié, mais que sa projection sur un axe était également quantifiée? La quantification du moment angulaire en tant que grandeur est intéressante, mais on pourrait essayer de l'argumenter en utilisant l'intuition classique, la façon dont les orbites planétaires se sont installées sur des trajectoires fixes qui ne se croisent pas, ayant seulement certains moments angulaires autorisés. Mais que se passerait-il si ce vecteur de moment angulaire ne pouvait que pointer exactement le long de ou exactement à l'opposé de , mais n'avait aucune autre composante le long de ? Et si, lorsqu'il est mesuré dans une autre direction, le vecteur ne pouvait que pointer entièrement le long de ou entièrement à l'opposé de , et rien entre les deux? Ce serait étrange, d'une manière qui déroute toute l'intuition classique.
Vérifiez votre compréhension
Quel type de distribution des particules sur un écran s'attendrait-on à trouver dans ce dernier cas, où la projection du moment angulaire le long de la direction du champ est quantifiée? N'hésitez pas à ne prendre en compte que les particules qui passent parfaitement au centre de l'appareil, ou à inclure celles qui s'écartent légèrement du centre, là où le gradient est plus faible. Il suffit d'être explicite.
Les particules au centre du dispositif subiraient un champ inhomogène unique et seraient toutes mesurées pour avoir l'une des deux orientations de leurs moments magnétiques. Elles seraient donc soit déviées au maximum avec le gradient, soit au maximum contre le gradient, et rien ne se situerait entre les deux. Bien entendu, de part et d'autre, là où la pente est plus faible, la déviation serait plus faible. À des positions latérales très importantes, elles peuvent être entièrement en dehors du gradient, et il pourrait n'y avoir qu'une seule région de particules non déviées.

Comment les qubits nous aideront-ils à tester cela?
La plupart des ordinateurs quantiques utilisent des "qubits", analogues quantiques des bits classiques. Plus précisément, ils sont conçus pour être des systèmes à deux niveaux, analogues aux états "on"/"off" des bits classiques. Il existe des paradigmes d'informatique quantique qui utilisent des systèmes à trois niveaux (appelés "qutrits") ou des systèmes à plusieurs niveaux (appelés "qudits"). Mais la plupart des travaux se concentrent sur les qubits. En particulier, les ordinateurs quantiques IBM® utilisent ce que l'on appelle des qubits transmoniques à fréquence fixe. Ils sont très différents du moment angulaire orbital ou de spin des atomes. Mais comme le spin d'un électron, les qubits IBM® sont des systèmes mécaniques quantiques qui peuvent interagir avec la lumière et sur lesquels il est possible d'effectuer des mesures. En fait, on trouve souvent des analogies entre les états de spin de la mécanique quantique et les états informatiques d'un qubit. Par exemple, on voit souvent l'état "spin-up" associé à l'état de calcul 0, et l'état "spin-down" associé à l'état de calcul 1 :
Nous pouvons utiliser ces similitudes pour observer un comportement mécanique quantique dans les ordinateurs quantiques IBM qui imite le comportement mécanique quantique du moment angulaire orbital ou de 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 angulaire dans n'importe quelle direction.
Première expérience : une seule mesure
Dans cette première expérience et tout au long du module, nous utiliserons un cadre pour l'informatique quantique connu sous le nom de "modèles Qiskit", qui décompose les flux de travail en plusieurs étapes :
- Etape 1 : Tracer un problème quantique à partir d'entrées classiques
- Étape 2 : Optimisation du problème pour l'exécution quantique
- Étape 3 : Exécution à l'aide des primitives « IBM Quantum »
- Étape 4 : Post-traitement et analyse classique
Nous suivons généralement ces étapes, même si nous ne les mentionnons pas toujours explicitement.
Étape 1 : Mettre en correspondance les entrées classiques avec un problème quantique
Ici, les entrées classiques sont les orientations d'un spin avant la mesure dans un dispositif Stern-Gerlach. Ne vous préoccupez pas trop de la nature exacte de l'état quantique avant la mesure. C'est le sujet d'un autre module de Qiskit Classrooms, sur le théorème de Bell.
Notez que les ordinateurs quantiques IBM mesurent les états le long de l'axe . Cette première expérience ressemblera donc beaucoup à l'expérience de Stern-Gerlach avec le gradient de champ magnétique le long de . Nous verrons plus tard comment modifier le système pour mesurer dans d'autres directions. Nous verrons plus tard comment modifier le système pour effectuer des mesures dans différentes directions.
Commençons par créer l'analogue d'un état de spin, c'est-à-dire un mélange de et ou, de manière équivalente, de et . Nous avons proposé quelques valeurs initiales. Mais n'hésitez pas à jouer avec d'autres valeurs ou même 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)Output:
0.7032089086145691 0.7109832845047109
Nous allons maintenant utiliser les angles ci-dessus comme paramètres dans un circuit quantique. Comme nous ne considérons qu'une seule particule à la fois, 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")Output:
Étape 2 : Optimiser le problème pour l'exécution quantique
Pour mener notre expérience sur un véritable ordinateur quantique, nous devons nous connecter au service de calcul d’ IBM Quantum, puis sélectionner un ordinateur quantique (ou un « backend »). Ci-dessous, nous choisissons simplement l'ordinateur quantique le moins sollicité parmi ceux dont nous disposons.
Le code ci-dessous vous permet de sauvegarder vos données d'identification lors de la première utilisation. Veillez à supprimer ces informations du bloc-notes après l'avoir enregistré dans votre environnement, afin que vos informations d'identification ne soient pas accidentellement partagées lorsque vous partagez le bloc-notes. Voir Configurer votre compte IBM Cloud et Initialiser le service dans un environnement non fiable pour plus d'informations.
# Load IBM Quantum Compute 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)Output:
ibm_sherbrooke
Nous devons maintenant transposer le circuit, c'est-à-dire le faire correspondre aux portes de base disponibles dans l'ordinateur quantique que nous avons choisi, et nous voulons optimiser notre circuit pour qu'il fonctionne sur cet ordinateur quantique.
# 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écution à l'aide des primitives « IBM Quantum »
Nous voulons maintenant faire fonctionner cela sur un véritable ordinateur quantique. Toute la syntaxe nécessaire se trouve dans le bloc de code ci-dessous. Si vous avez épuisé le temps qui vous était imparti sur des ordinateurs quantiques réels, ou si vous n'avez pas de connexion internet, vous pouvez 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()Utilisez le code ci-dessous si vous n'êtes pas en mesure de réaliser l'expérience sur un véritable 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 simplement à visualiser le résultat de l'expérience.
from qiskit.visualization import plot_histogram
print("counts = ", counts)
plot_histogram(counts)Output:
counts = {'0': 1}
Nous avons effectué une mesure et obtenu "0". Ce n'est pas une surprise pour nous. Nous savons que nous utilisons un ordinateur quantique composé de qubits et nous sommes très habitués à ce que les bits classiques renvoient un 0 ou un 1. Mais n'oubliez pas qu'il s'agit de l'analogue en informatique quantique des expériences réalisées avec des particules dotées d'un moment magnétique. Si nous nous attendions à une répartition uniforme entre 0 et +1, nous aurions pu être surpris d'obtenir un extremum lors de notre première mesure. C'est cette surprenante quantification des résultats de l'expérience Stern-Gerlach qui nous a permis de mieux comprendre la nature et qui, à son tour, nous a aidés à construire des ordinateurs quantiques.
Voyons ce qui se passe lorsque nous effectuons un ensemble de mesures.
Deuxième expérience : mesurer un grand nombre de particules
Pour recueillir des statistiques sur un grand nombre de ces mesures, il n'est pas nécessaire de répéter les étapes 1 et 2. Nous pouvons simplement augmenter le nombre de tirs dans notre expérience. N'hésitez pas à jouer avec le nombre de tirs dans l'exemple 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 vous ne pouvez pas utiliser un véritable ordinateur quantique, décommentez le bloc ci-dessus de la première expérience, et changez simplement num_shots = 1 en num_shots = 100 ou plus.
plot_histogram(counts)Output:
Nous constatons que nous mesurons parfois 0 et parfois 1. Notez que nous ne mesurons jamais rien d'autre! Vous pouvez modifier le nombre de tirs et remarquer que la probabilité de mesurer 0 ou 1 semble être assez cohérente entre les différents tirages avec différents nombres de tirs. Ainsi, quelque chose dans la préparation de l'état semble déterminer la probabilité des résultats des mesures, bien que toute mesure puisse donner 0 ou 1.
Troisième expérience : rotations aléatoires dans un four
Dans l'expérience Stern-Gerlach, les chercheurs n'ont pas eu à spécifier l'angle auquel un vecteur de moment angulaire sortirait du four. Les orientations étaient aléatoires (ou quelque chose d'encore plus mystérieux!) Voir le module Qiskit Classroom sur le théorème de Bell). Un analogue raisonnable de cette expérience consisterait à initialiser au hasard les états de notre qubit et à effectuer de nombreuses mesures.
Étape 1 : Mettre en correspondance les entrées classiques avec 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-ci, nous construirons le circuit en utilisant des portes avec des paramètres libres et . Les valeurs numériques de 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")Output:
L'exécution d'un circuit quantique en une seule fois et pour de nombreuses configurations aléatoires est un processus inhabituel pour un ordinateur quantique. C'est tout à fait possible, mais pour des raisons 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)Output:
Nous constatons 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 un nombre similaire d'états 0 et 1 (comme un nombre similaire d'états de spin up et de spin down). C'est exactement ce qu'a montré l'expérience originale de Stern-Gerlach.
Quatrième expérience : mesures répétées
Lorsqu'un qubit démarre dans un état aléatoire, nous constatons qu'il y a environ 50 % de chances de mesurer un extremum plutôt qu'un autre. Mais qu'advient-il de l'état du qubit (ou du moment angulaire de la particule) après la mesure? Pour répondre à cette question, nous devons définir un circuit qui nous permette d'effectuer des mesures multiples sur les mêmes qubits. Définissons un circuit que nous pouvons utiliser pour étudier cette question. Nous voulons permettre la possibilité de mesurer les deux états et , et nous avons donc besoin de quelque chose pour faire pivoter l'état initial du qubit en dehors de l'état par défaut . Dans ce cas, nous utiliserons une porte de Hadamard , puisque . Notez que, par défaut, ces deux mesures seront effectuées le long de .
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)Output:
{'00': 497, '11': 498, '01': 3, '10': 2}
# Step 4: Post-process
plot_histogram(counts)Output:
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 , et "01" signifie que la première mesure a donné , et la seconde . La grande majorité des qubits ont été mesurés deux fois dans l'état ou deux fois dans l'état . Il est très rare que des qubits soient mesurés dans un état puis dans un autre, et les quelques cas où cela s'est produit (~1%) sont dus au bruit. Dans le cas présent, ce bruit a été simulé conformément au comportement du système quantique réel. Cette corrélation observée entre les mesures successives est également observée dans les mesures de type Stern-Gerlach de particules ayant un moment angulaire de spin. Si une particule est mesurée comme étant en "spin-up", une mesure ultérieure peu de temps après produira à nouveau un "spin-up" (jusqu'à une petite variation due au bruit).
Cela peut paraître anodin. Après tout, si un qubit est mesuré dans un état et que je le mesure à nouveau, rapidement, pourquoi ne serait-il pas toujours dans cet état? Mais si nous nous attachons vraiment à cette subtilité, elle peut nous aider à sélectionner certains outils mathématiques pour décrire ce phénomène.
Analyse des expériences réalisées jusqu'à présent
Recueillons quelques observations sur les expériences que nous avons menées jusqu'à présent :
- La mesure d'un système mécanique quantique ne produira qu'une seule valeur parmi un ensemble de "valeurs autorisées". Pour les systèmes à deux niveaux tels que les qubits ou les particules spin-1/2, une mesure n'aboutira qu'à l'un des résultats binaires.
- Lorsque nous initialisons au hasard l'état de notre système binaire (comme des particules spin-1/2 sortant d'un four), l'un ou l'autre des résultats des mesures 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! En d'autres termes, si nous obtenons l'état 0 une fois, lorsque nous le mesurons à nouveau, il est toujours dans l'état 0 (à l'exception d'un léger bruit dans le système ~0.1 % à 1 %).
Notez explicitement que nous n'avons pas encore abordé la nature probabiliste de la mécanique quantique, ni dit quoi que ce soit sur l'"effondrement" de l'état à un état propre. En se basant uniquement sur les observations ci-dessus, il pourrait être tentant de rechercher une opération mathématique qui laisse un ensemble particulier d'états mécaniques quantiques inchangés jusqu'à peut-être une constante : , puisque mesurer deux fois le long de donne le même résultat. En fin de compte, cette recherche ne parviendra pas à décrire tous les comportements que nous observerons. Mais elle peut décrire certaines choses, et nous allons donc la poursuivre un peu plus longtemps.
Une telle opération existe. L'opération matricielle sur certains vecteurs modifie les vecteurs, et l'opération matricielle sur d'autres vecteurs (vecteurs propres) laisse le vecteur inchangé jusqu'à une constante. Prenons par exemple la matrice et le vecteur où
et
Il convient de noter que
Mais pour d'autres vecteurs, par exemple , nous avons
Nous pouvons essayer de décrire le spin d'une particule à l'aide d'une matrice, et nous pouvons essayer de décrire les états des particules après la mesure à l'aide d'un vecteur, appelé "vecteur d'état". Il n'est pas du tout évident de savoir quelles valeurs devraient entrer dans une telle matrice ou un tel vecteur d'état, mais la seule propriété que nous avons tirée des mesures effectuées jusqu'à présent et que nous pourrions utiliser pour étiqueter les états serait la probabilité de mesurer 0 ou 1 ("spin-up" ou "spin-down" dans le contexte des particules du site spin-1/2 ). Nous devons considérer que les entrées des vecteurs d'état doivent être liées à cette probabilité (probabilité exacte, "amplitude de la probabilité" - ce qui signifie que nous élevons l'entrée au carré pour obtenir la probabilité, et ainsi de suite). Mais à ce stade, nous ne savons pas si les entrées de ces matrices doivent être strictement réelles, complexes ou autres. Par sécurité, essayons de développer un cadre dans lequel les vecteurs et les matrices satisfont aux conditions suivantes :
- Les opérateurs de la matrice sont connectés pour expérimenter autant que possible. Par exemple, nous pourrions 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 aux probabilités de la manière suivante : Si une particule se trouve dans le vecteur d'état , la probabilité qu'une mesure ultérieure trouve la particule dans l'état est .
Cela nous donne une grande liberté dans le développement de nos premières matrices. Par exemple, nous pourrions naïvement essayer
Ici, signifie qu'il existe des états dans les ordinateurs quantiques et dans les systèmes spin-1/2 qui sont très similaires et sont souvent mis en correspondance les uns avec les autres. Ils ne sont évidemment pas exactement les mêmes, puisqu'ils se réfèrent à des systèmes différents. Mais l'algèbre décrivant ces systèmes à deux États pourrait se conformer aux mêmes règles (alerte spoiler : c'est le cas!). Notez que ce choix aléatoire possède déjà un attribut intéressant. Il convient de noter que
En d'autres termes, si une particule se trouve déjà dans l'état , la probabilité qu'une mesure ultérieure produise également est de 1 (à l'exception des effets du bruit). C'est une excellente chose, car nous avons déjà vu qu'une fois qu'un état est dans l'état 0 ou "spin-up", il y reste lors des mesures ultérieures. La probabilité ci-dessus devrait en effet être de 100 %.
Vérifiez votre compréhension
Pourquoi la
un meilleur choix que, disons,
Notre tentative d'associer la probabilité d'une mesure au produit intérieur au carré signifie que la magnitude de chaque vecteur doit être égale à 1. C'est-à-dire pour tous les , puisque la probabilité qu'une chose dans l'état soit dans l'état est de 100 %. C'est ce qu'on appelle la "condition de normalisation".
Pourquoi la
un meilleur choix que, disons,
Ce n'est pas le cas. Il n'y a aucune raison de choisir initialement . Il s'agit plutôt d'une convention. Cependant, une fois que nous avons fait ce choix, il impose certaines contraintes aux choix ultérieurs. Voir ci-dessous.
Rappelons que dans les expériences ci-dessus, nous avons constaté qu'un qubit initialement dans l'état restait dans cet état lors d'une mesure ultérieure. Il en va de même pour , ce qui signifie qu'un qubit se trouvant dans l'état a une probabilité nulle d'être mesuré dans l'état (sauf effets du bruit). Le lien que nous devons établir entre les produits intérieurs et les probabilités de mesure nous indique alors que
Sans perte de généralité, nous pouvons écrire le vecteur d'état . On peut alors écrire
L'exigence que , la soi-disant "condition de normalisation" nous dit que . En soi, cette condition ne nous limite qu'à pour . Il s'avère qu'il y a d'autres raisons de choisir qui vont au-delà de cette introduction au sujet. Pour l'instant, il suffit de dire que est une solution acceptable.
Nous avons beaucoup progressé dans notre analyse. Le choix d'une forme pour nos vecteurs d'état nous permet de construire une matrice qui décrit quelque chose des phénomènes physiques à l'œuvre ici. En particulier, parce que l'expérience originale de Stern-Gerlach a mesuré une division des trajectoires basée sur les composantes du moment angulaire du spin le long de l'axe , nous voudrions un opérateur qui décrive exactement cela : . Un autre lien essentiel avec l'expérience est qu'à partir de la quantité de déviation, du temps de déplacement et de l'intensité connue du champ magnétique, nous pouvons déterminer l'ampleur de la composante 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 z mesurées du moment angulaire du spin sont .
Nous recherchons alors une matrice aux valeurs propres réelles (satisfaites par les matrices hermitiennes) dont les valeurs propres correspondent à ces composantes de spin observées expérimentalement. Sans perte de généralité, nous pouvons écrire , et nous pouvons exiger :
En combinant et en retirant le facteur global de , on obtient
Il s'agit de l'opérateur spin-z bien connu que l'on trouve dans tous les manuels de mécanique quantique. On voit souvent cet opérateur sans , auquel cas il s'agit de l'opérateur "Pauli-z", généralement noté :
Cela 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 possibles de la mesure, y compris les états des qubits de transmon dans un ordinateur quantique.
Avant d'aborder d'autres opérateurs et d'autres États liés à celui-ci, nous devons nous pencher sur un fait que beaucoup de gens ne comprennent pas. L'action de l'opérateur n'est pas la même chose que la mesure. D'un certain point de vue, vous pourriez dire : "Bien sûr que non! L'une se fait sur papier dans le cadre d'un calcul mathématique, l'autre se fait en laboratoire sur des systèmes physiques" Oui, c'est vrai, mais c'est plus que cela. Une mesure de la composante du spin donnera toujours un état "spin-up" ou "spin-down", quel que soit l'état initial du système. Nous avons vu cela avec les analogues de l'informatique quantique et . Nous avons initialisé les états pour qu'ils soient dans des centaines d'orientations aléatoires, et les mesures ont toujours donné soit soit . C'est ce qu'on appelle l'"effondrement de l'état" à un état propre. Ce n'est pas le cas lorsque l'on applique une matrice à un état. Essayez les questions ci-dessous pour explorer ce sujet.
Vérifiez votre compréhension
Supposons que vous commenciez avec une particule dans un état de spin
(a) Qu'obtient-on si l'on agit avec l'opérateur sur ce vecteur d'état? (b) Qu'obtenez-vous si vous mesurez une seule fois la composante du spin de cette particule? (c) Qu'obtient-on si l'on prépare de nombreuses particules identiques à cet état et que l'on effectue des milliers de mesures de la composante du spin?
(a) Vous obtenez
C'est tout ! Il n'y a pas de résultat expérimental. Il suffit d'appliquer la matrice au vecteur pour obtenir un vecteur légèrement différent, qui a maintenant un nouveau signe "-" et n'a plus une magnitude de 1, puisqu'il a un préfacteur .
(b) Vous obtiendrez soit , soit , ce qui correspond à l'observation d'une projection de spin sur l'axe de ou , respectivement. Nous pouvons également déterminer la probabilité de chaque résultat, puisque
Ainsi, bien que l'état "spin-up" soit 20 % plus probable, les deux résultats sont possibles, et nous n'obtiendrons qu'un seul de ces deux états.
(c) Environ 60 % des mesures produiront des particules de spin-up et environ 40 % des mesures produiront des particules de spin-down, selon les probabilités de mesure calculées dans la partie (b).
Vérifiez les réponses aux parties (b) et (c) de la question précédente en utilisant l'analogie entre les états de spin-up d'un atome et les états de qubit :
Coder des circuits quantiques pour créer l'état initial souhaité, puis utiliser du matériel réel ou un simulateur pour vérifier les résultats d'une mesure unique et d'un ensemble de centaines, voire de milliers de mesures.
#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 : mesure de différentes grandeurs observables
Jusqu'à présent, nous n'avons effectué que des mesures le long de l'axe z. Dans une expérience Stern-Gerlach, si nous voulions effectuer une mesure le long, par exemple, de l'axe x, il nous suffirait d'orienter le champ magnétique inhomogène de manière à ce qu'il pointe le long de l'axe , et d'observer les déviations le long de sur l'écran. IBM les ordinateurs quantiques, cependant, sont conçus pour effectuer des mesures le long d'un seul axe ( ). Pour mesurer un état le long de , nous devons effectuer un "changement de base". Cela signifie que nous devons effectuer une opération qui amène les états le long de dans la sphère de Bloch à , et vice-versa. Il existe plusieurs façons de mettre cela en œuvre, mais la méthode préférée est celle de la porte de Hadamard :
Vérifiez votre compréhension
Montrer que et que
Montrer que et que
# 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:
Ce circuit fait tourner notre système de sorte que les mesures (le long de ) nous renseignent sur les caractéristiques de avant la rotation. Nous savons déjà que l'ordinateur quantique initialise les états à , ce qui correspond à . Voyons ce qui se passe lorsque nous mesurons la projection du spin le long de pour un état initialisé à . Nous montrons cette étape sur un simulateur pour vous encourager à explorer les statistiques d'autres circuits avec des initialisations différentes.
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())Output:
{'1': 4977, '0': 5023}
Ceci nous montre que pour un qubit initialement dans (ou de manière équivalente, un spin dans ) la probabilité de mesurer une projection le long de ou est d'environ 50-50. D'une certaine manière, c'est tout à fait logique. Après tout, si quelque chose pointait dans la direction z, il n'aurait pas de préférence particulière pour . Nous pourrions nous attendre à ce qu'il en soit de même si nous commençons par l'état (ou ). 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:
job = sampler_sv.run([qc], shots=10000)
print(job.result()[0].data.c.get_counts())Output:
{'0': 4935, '1': 5065}
Oui. De nouveau, nous trouvons une probabilité de 50-50 de mesurer une projection le long de . Par analogie avec les mesures le long de , nous pourrions soupçonner qu'une particule qui s'effondre dans un état certain le long de pourrait avoir une probabilité nulle d'être mesurée par la suite le long de . 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:
job = sampler_sv.run([qc])
print(job.result()[0].data.c.get_counts())
plot_histogram(job.result()[0].data.c.get_counts())Output:
{'00': 504, '11': 520}
Comme prévu, nous obtenons des résultats dans lesquels la projection se fait le long de , puis à nouveau le long de , et nous avons des résultats dans lesquels la projection se fait d'abord le long de , puis à nouveau le long de . Nous ne voyons pas de cas où la projection passe de à ou vice-versa. Nous pouvons recueillir nos observations et les utiliser pour développer d'autres opérateurs sous forme de matrices et d'autres vecteurs d'état.
Nous le savons :
- Les États ayant des projections définies le long de ou ont 50 % de chances d'avoir une projection le long de et 50 % de chances d'avoir une projection le long de .
- Les États ayant une projection définie le long de n'ont aucune chance de se retrouver plus tard avec une projection le long de , et vice-versa.
Nous pouvons utiliser ces résultats pour construire des états avec une projection positive définie le long de (que nous appelons ), et ceux avec une projection négative définie le long de (que nous appelons ). À partir de ces états, nous pouvons construire la matrice correspondant à , exactement comme nous l'avons fait pour . Nous laissons ces exercices à l'apprenant. De la même manière, on peut construire des expériences en effectuant des mesures le long de l'axe , déterminer les vecteurs pour et , et enfin obtenir une expression pour .
En rassemblant tous ces vecteurs et matrices, on obtient
Questions
Les enseignants peuvent demander des versions de ces cahiers avec les corrigés et des conseils sur le placement dans les programmes d'études communs en répondant à cette enquête rapide sur la façon dont les cahiers sont utilisés.
Concepts essentiels :
- Pour la particule spin-1/2, une mesure de la projection du spin sur un certain axe ne peut donner que l'un des deux résultats, souvent appelés "haut" et "bas".
- Les Qubits ne peuvent être mesurés que dans l'un des deux états, souvent appelés et .
- Nous pouvons modéliser l'expérience Stern-Gerlach sur les particules spin-1/2 en utilisant des qubits dans un ordinateur quantique.
- Des mesures répétées de la même observable physique de la même particule/qubit donneront 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 d'expériences analogues avec des ordinateurs quantiques pour dériver un système de vecteurs d'état et d'opérateurs matriciels qui décrivent le spin mécanique quantique.
Questions vrai/faux :
- T/F A partir d'observations expérimentales, le seul choix valable d'un vecteur pour représenter est
- T/F Si , le seul choix possible pour est (jusqu'à une phase globale).
- T/F Une particule mesurée dans l'état continuera à être trouvée dans l'état lors de mesures ultérieures le long de .
- T/F Une particule mesurée dans l'état continuera à être trouvée dans l'état lors de mesures ultérieures le long de .
- T/F Une particule mesurée dans l'état sera toujours retrouvée dans l'état lors de mesures ultérieures le long de .
Questions du MC :
-
Une particule initialement dans l'état a quelle probabilité d'être mesurée dans l'état ?
- a. 0 %
- b. 25 %
- c. Réduction de 50 %
- d. 71 %
- e. 100 %
-
Une particule initialement dans l'état a quelle probabilité d'être mesurée dans l'état ?
- a. 0 %
- b. 25 %
- c. Réduction de 50 %
- d. 71 %
- e. 100 %
-
L'état d'une particule spin-1/2 est le plus souvent associé à quel état de calcul quantique?
- a.
- b.
- c.
- d.
- e. Aucune des réponses ci-dessus
Questions à débattre :
- Trois amis discutent des mesures et des opérateurs quantiques. L'ami A dit : "Faire une mesure le long de et agir avec l'opérateur , c'est la même chose." L'ami B répond : "Ce sont des procédures différentes, mais elles aboutissent au même résultat" L'ami C répond : "Ils sont totalement différents; ils ont même des effets différents sur la plupart des États" Avec qui êtes-vous d'accord et pourquoi?
Problèmes à réponse libre :
- Compte tenu des observations expérimentales et de la syntaxe proposée :
montrent que jusqu'à une phase globale
Choisissez pour obtenir le résultat standard.
- Compte tenu des observations expérimentales et de la syntaxe proposée :
Et en utilisant le résultat du problème 3 :
montrent que jusqu'à une phase globale
Accusés de réception
[1] By Tatoute - Own work, CC BY-SA 4.0, https://commons.wikimedia.org/w/index.php?curid=34095239