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

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 , de masse et de moment cinétique ait un moment magnétique donné par
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 . Lorsqu'on combine différents types de moments cinétiques, ou qu'on généralise à un type arbitraire, on utilise souvent à la place de , ce qui donne :
Pour les objets classiques, . Pour les électrons, , 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 :
Et il subira une force dans un champ magnétique à gradient non nul :
On considère souvent l'expression ci-dessus composante par composante ; il peut donc être pratique d'en examiner la composante :
En combinant les expressions, on peut obtenir
Stern et Gerlach ne connaissaient pas le facteur , 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.

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 .
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 :
Ainsi, si un moment magnétique venait à tourner dans le champ magnétique externe, la variation d'énergie serait :
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 :
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.

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 ou exactement dans le sens opposé à , sans aucune autre composante selon ? Et que si, mesuré selon une direction différente, le vecteur ne pouvait pointer qu'entièrement selon ou entièrement dans le sens opposé à , 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.

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 :
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 . Cette première expérience ressemblera donc beaucoup à l'expérience de Stern-Gerlach avec le gradient de champ magnétique selon . 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 et , ou de manière équivalente de et . 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")
É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}
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)
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 et . 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")
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)
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 et