El experimento de Stern-Gerlach con computadoras cuánticas
Para este módulo de Qiskit en el aula, los estudiantes deben tener un entorno Python funcional con los siguientes paquetes instalados:
qiskitv2.1.0 o más recienteqiskit-ibm-runtimev0.40.1 o más recienteqiskit-aerv0.17.0 o más recienteqiskit.visualizationnumpypylatexenc
Para configurar e instalar los paquetes anteriores, consulta la guía Instalar Qiskit. Para ejecutar trabajos en computadoras cuánticas reales, los estudiantes necesitarán crear una cuenta en IBM Quantum® siguiendo los pasos de la guía Configura tu cuenta de IBM Cloud.
Este módulo fue probado y utilizó 2 segundos de tiempo de QPU. Esto es solo una estimación. Tu uso real puede variar.
# 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'
Mira el recorrido del módulo con la Dra. Katie McCormick a continuación, o haz clic aquí para verlo en YouTube.
Contexto histórico
A principios del siglo XX, la evidencia del comportamiento cuantizado a escalas atómicas era cada vez mayor. Muchas interpretaciones exitosas de datos, como la explicación de Max Planck de la catástrofe ultravioleta, y experimentos como el realizado por Otto Stern y Walther Gerlach fueron fundamentales para convencer al mundo de que un sistema de mecánica cuántica era necesario, y de que ciertos fenómenos físicos están cuantizados. En el caso del experimento de Stern-Gerlach (concebido por Stern en 1921 y llevado a cabo por Stern y Gerlach en 1922), el objetivo era verificar la cuantización del momento angular en los átomos.
Por aquella época, el modelo predominante para el átomo era el modelo de Bohr-Sommerfeld, que era una extensión del modelo de Bohr y, al igual que éste, predecía que los electrones existían en ciertas órbitas cuantizadas similares a los planetas que orbitan el Sol.

Aunque en última instancia este tratamiento resultaría insuficiente para explicar el comportamiento cuántico del átomo, en términos generales sí predecía muchos fenómenos observados, como las líneas espectrales discretas de los átomos. Las órbitas cuantizadas de los electrones con energías específicas corresponden a valores cuantizados del momento angular. Es este momento angular orbital el que Stern y Gerlach buscaban observar en su experimento, aunque el experimento se aplica a cualquier tipo de momento angular cuantizado, incluido el espín. Es frecuente escuchar que el experimento de Stern-Gerlach se aplica a espines. El enfoque del experimento original era el momento angular orbital simplemente porque George Uhlenbeck y Samuel Goudsmit no teorizarían la existencia del espín hasta 1925.
Independientemente del tipo de momento angular, una carga con momento angular tiene un momento magnético. En el tratamiento clásico del movimiento orbital, se esperaría que una partícula de carga , masa y momento angular tuviera un momento magnético dado por
Resulta que casi la misma fórmula se aplica al momento angular cuántico, con la salvedad de añadir una razón numérica relacionada con el tipo de momento angular, llamada el factor g . Al combinar distintos tipos de momento angular, o al generalizar a un tipo arbitrario, se suele usar en lugar de , así que escribimos:
Para objetos clásicos . Para electrones, , y existen muchos valores para diversos núcleos y partículas subatómicas. El punto principal aquí es que ¡el momento angular cuantizado implica un momento magnético cuantizado!
Este momento magnético experimentará un torque en un campo magnético:
Y experimentará una fuerza en un campo magnético con un gradiente no nulo:
A menudo consideraremos la expresión anterior componente por componente, por lo que puede ser conveniente pensar en su componente :
Combinando expresiones, podemos obtener
Stern y Gerlach no conocían el factor , pero incluso con él en la expresión, tenemos una fuerza igual a varias constantes conocidas o medibles multiplicadas por un momento angular. Entonces, usando un campo magnético con un gradiente conocido y midiendo la deflexión de una partícula al pasar por el campo, deberíamos obtener información sobre el momento angular. Esta es la esencia del experimento de Stern-Gerlach.

Fig. Experimento de Stern-Gerlach[1]: Átomos de plata viajando a través de un campo magnético inhomogéneo, siendo deflectados hacia arriba o hacia abajo según su espín. Clásicamente, esperaríamos una distribución continua en la pantalla, pero en el experimento vemos dos puntos distintos.
Átomos de plata neutros fueron calentados en un horno. A medida que un haz de átomos de plata salía del horno, se usaron colimadores de haz para seleccionar únicamente los átomos que viajaban cerca del centro del campo magnético inhomogéneo. Por supuesto, algunos átomos se desvían un poco hacia la izquierda o la derecha, y experimentan un gradiente más débil del campo, o ningún gradiente en absoluto. Por eso, no nos preocupamos demasiado por el comportamiento de los átomos que se alejan mucho hacia los lados. Nos interesa lo que ocurre con los átomos que viajan por el centro del canal, donde el gradiente del campo magnético generará una fuerza que deflecta los átomos únicamente en la dirección .
¿Qué deberíamos esperar, clásicamente?
¿Cómo se comportarían estos átomos si fueran exactamente como imanes clásicos y voluminosos? Puedes hacer el experimento mentalmente. Imagina lanzar pequeños imanes de neodimio junto a un imán grande y poderoso. La orientación de los imanes pequeños es aleatoria. Pero al pasar junto al imán grande, se reorientan rápidamente para alinearse con el campo y son atraídos hacia él. La gran mayoría de los imanes pequeños son deflectados hacia el imán grande. El observador más perspicaz podría preguntar: "¿Y qué pasa con la conservación de la energía?"
Efectivamente, un momento magnético en un campo magnético externo tiene una energía potencial asociada:
Entonces, si un momento magnético rotara en el campo magnético externo, habría un cambio de energía dado por:
En el caso especial de un pequeño imán perfectamente antialineado con el campo externo que gira y se alinea con él, esto correspondería a una disminución de la energía potencial:
¿Y adónde va esa energía? Un imán clásico, como un pequeño imán de nevera de neodimio, tiene muchas partículas y puede disipar casi cualquier cantidad de energía en forma de calor. Los ángulos inicial y final entre el momento magnético y el campo magnético externo podrían ser cualquiera, y al menos la orientación inicial sería aleatoria. Así, se disiparía una cantidad diferente de energía en forma de calor para cada imán pequeño. Pero clásicamente esto no supone ningún problema, ya que un conjunto de partículas clásicas puede disipar cualquier cantidad de energía en forma de calor.
¿Qué deberíamos esperar aplicando el pensamiento clásico a escalas atómicas?
Al menos esto no es igual para los imanes a escala atómica, porque hay menos partículas en juego, menos grados de libertad a través de los cuales se puede disipar la energía. Las propuestas de la mecánica cuántica temprana sugerían además que la energía que puede absorber una partícula individual, como el electrón, estaría cuantizada, lo que significa que un electrón solo podría absorber unas pocas cantidades específicas de energía. Dado que las orientaciones iniciales aleatorias requerirían la disipación de cantidades aleatorias de energía, esto no debería ser posible en un sistema con niveles de energía cuantizados. El exceso de energía no podría disiparse en forma de calor. Entonces, ¿qué ocurriría en su lugar?
Comprueba tu comprensión
Lee las preguntas a continuación, piensa en tus respuestas y luego haz clic en los triángulos para revelar las soluciones.
Explica lo que crees que ocurriría en una situación como la descrita anteriormente. Es decir, tienes un imán atómicamente pequeño que no puede disipar energía en forma de calor. Por lo tanto, cualquier energía potencial magnética inicial debe permanecer en el sistema. Sin embargo, un torque es aplicado por un campo magnético externo, que intenta rotar el pequeño imán para alinearlo con el campo externo. ¿Qué ocurre?
Respuesta:
El pequeño momento magnético rotaría hacia la alineación con el campo externo. Pero cuando momentáneamente se alinea, tendría energía cinética rotacional que lo seguiría haciendo rotar más allá del campo y de vuelta fuera de la alineación. Este comportamiento incluso puede observarse en imanes clásicos grandes. Pero en esos sistemas clásicos, la oscilación del pequeño momento magnético eventualmente se detiene a medida que la energía se disipa en calor. Pero en un sistema sin ese mecanismo disipativo, la oscilación debería continuar indefinidamente.
Dado el comportamiento esperado en la respuesta anterior, ¿qué distribución de partículas magnéticas esperarías ver en la pantalla?
Respuesta:
Una distribución suave desde alguna deflexión máxima hacia el lado más fuerte del campo magnético (aquellas partículas que resultaron estar alineadas con el campo externo) hasta alguna deflexión máxima hacia el lado más débil del campo (aquellas partículas que comenzaron antialineadas con el campo externo), y cada deflexión intermedia, correspondiente a cada orientación inicial entre esos extremos.

¿Qué predice la mecánica cuántica?
Quizás la más extraña de todas las posibilidades sería la siguiente: ¿y si el momento angular del electrón estuviera cuantizado, pero también su proyección sobre algún eje estuviera cuantizada? La cuantización del momento angular como magnitud es interesante, pero uno podría intentar argumentarla usando la intuición clásica, de la forma en que las órbitas planetarias se estabilizan en trayectorias fijas que no se cruzan, teniendo solo ciertos momentos angulares permitidos. Pero ¿y si ese vector de momento angular solo pudiera apuntar exactamente a lo largo de o exactamente opuesto a , pero sin tener ninguna otra componente a lo largo de ? ¿Y si al medirse a lo largo de una dirección diferente, el vector solo pudiera apuntar completamente a lo largo de o completamente opuesto a , sin nada intermedio? Eso sería extraño de una manera que desafía toda intuición clásica.
Comprueba tu comprensión
Lee la pregunta a continuación, piensa en tu respuesta y luego haz clic en el triángulo para revelar la solución.
¿Qué tipo de distribución de partículas en una pantalla esperarías encontrar en este último caso, donde la proyección del momento angular a lo largo de la dirección del campo está cuantizada? Puedes considerar solo las partículas que pasan perfectamente por el centro del dispositivo, o incluir también las que se desvían ligeramente hacia donde el gradiente es más débil. Solo sé explícito.
Respuesta:
Las partículas en el centro del dispositivo experimentarían un único campo inhomogéneo y se mediría que todas tienen una de dos orientaciones para sus momentos magnéticos. Por lo tanto, serían deflectadas máximamente con el gradiente o máximamente contra el gradiente, sin nada intermedio. Por supuesto, hacia los lados, donde el gradiente es más débil, la deflexión sería menor. En posiciones laterales muy grandes, podrían estar completamente fuera del gradiente, y podría haber solo una única región de partículas no deflectadas.

¿Cómo nos ayudarán los qubits a poner esto a prueba?
La mayoría de las computadoras cuánticas usan "qubits", los análogos cuánticos de los bits clásicos. Más específicamente, están diseñados para ser sistemas de dos niveles, análogos a los estados "encendido"/"apagado" de los bits clásicos. Existen paradigmas de computación cuántica que hacen uso de sistemas de tres niveles (los llamados "qutrits") o sistemas de muchos niveles (llamados "qudits"). Pero la mayor parte del trabajo se concentra en los qubits. En particular, las computadoras cuánticas de IBM® usan los llamados qubits transmon de frecuencia fija. Estos son bastante diferentes del momento angular orbital o de espín de los átomos. Pero al igual que el espín de un electrón, los qubits de IBM® son sistemas cuántico-mecánicos que pueden interactuar con la luz y sobre los cuales se pueden realizar mediciones. De hecho, a menudo se encuentran analogías entre los estados del espín cuántico y los estados computacionales de un qubit. Por ejemplo, frecuentemente se ve el estado "espín hacia arriba" asociado al estado computacional 0, y "espín hacia abajo" asociado al estado computacional 1:
Podemos usar estas similitudes para observar el comportamiento cuántico en las computadoras cuánticas de IBM que imita el comportamiento cuántico del momento angular orbital o de espín en los átomos. Haremos observaciones similares usando combinaciones lineales de estos estados que nos permiten extender la discusión al momento angular en cualquier dirección.
Primer experimento: Una sola medición
En este primer experimento y a lo largo del módulo, usaremos un marco de trabajo para la computación cuántica conocido como "patrones de Qiskit" (Qiskit patterns), que divide los flujos de trabajo en los siguientes pasos:
- Paso 1: Mapear las entradas clásicas a un problema cuántico
- Paso 2: Optimizar el problema para la ejecución cuántica
- Paso 3: Ejecutar usando las Primitivas de Qiskit Runtime
- Paso 4: Postprocesamiento y análisis clásico
En general seguiremos estos pasos, aunque no siempre los etiquetaremos explícitamente.
Paso 1: Mapear las entradas clásicas a un problema cuántico
Aquí, las entradas clásicas son las orientaciones de un espín antes de la medición en un dispositivo de Stern-Gerlach. No te preocupes demasiado por la naturaleza exacta del estado cuántico antes de la medición. Ese es el tema de otro módulo de Qiskit Classrooms, sobre el teorema de Bell.
Ten en cuenta que las computadoras cuánticas de IBM miden estados a lo largo del eje . Por lo tanto, este primer experimento será muy similar al experimento de Stern-Gerlach con el gradiente del campo magnético a lo largo de . Veremos cómo cambiar el sistema para medir a lo largo de diferentes direcciones más adelante.
Empecemos construyendo el análogo de un estado de espín, es decir, alguna mezcla de y o equivalentemente de y . Hemos propuesto algunos valores iniciales. Pero siéntete libre de jugar con otros valores o incluso con valores aleatorios.
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
Ahora usaremos los ángulos anteriores como parámetros en un circuito cuántico. Consideramos solo una partícula a la vez, por lo que usaremos solo un qubit en nuestro circuito y necesitaremos solo un registro clásico.
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")
Paso 2: Optimizar el problema para la ejecución cuántica
Para ejecutar nuestro experimento en una computadora cuántica real, necesitamos cargar el Servicio de Qiskit Runtime y seleccionar una computadora cuántica (o un "backend"). A continuación, simplemente seleccionamos la computadora cuántica menos ocupada disponible para nosotros.
A continuación hay código para guardar tus credenciales en el primer uso. Asegúrate de eliminar esta información del notebook después de guardarla en tu entorno, para que tus credenciales no se compartan accidentalmente al compartir el notebook. Consulta Configura tu cuenta de IBM Cloud e Inicializa el servicio en un entorno no confiable para más orientación.
# 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
Ahora debemos transpilar el circuito, lo que significa que debemos mapear nuestro circuito a las compuertas base disponibles para nuestra computadora cuántica elegida, y queremos optimizar nuestro circuito para ejecutarlo en esa computadora cuántica.
# 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)
Paso 3: Ejecutar usando las Primitivas de Qiskit Runtime
Ahora queremos ejecutar esto en una computadora cuántica real. Toda la sintaxis necesaria para eso está en el bloque de código a continuación. Si has agotado tu tiempo asignado en computadoras cuánticas reales, o si no tienes conexión a internet, puedes descomentar el siguiente bloque de código, que ejecutará el código en un simulador 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()
Usa el código a continuación si no puedes ejecutar el experimento en una computadora cuántica real.
# 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()
Paso 4: Postprocesamiento y análisis clásico
Para este experimento muy simple, el análisis clásico consiste únicamente en visualizar el resultado experimental.
from qiskit.visualization import plot_histogram
print("counts = ", counts)
plot_histogram(counts)
counts = {'0': 1}
Hicimos una medición y obtuvimos "0". Esto no nos sorprende. Sabemos que estamos usando una computadora cuántica compuesta de qubits y estamos muy acostumbrados a que los bits clásicos devuelvan un 0 o un 1. Pero ten en cuenta que esto es el análogo cuántico computacional de los experimentos realizados con partículas con momentos magnéticos. Si hubiéramos esperado una distribución uniforme entre 0 y +1, podría habernos sorprendido obtener un extremo en nuestra primera medición. Es esta sorprendente cuantización de resultados en el experimento de Stern-Gerlach lo que nos llevó a una mejor comprensión de la naturaleza, y que a su vez nos ayudó eventualmente a construir computadoras cuánticas.
Veamos qué ocurre cuando hacemos un conjunto de mediciones.
Segundo experimento: Midiendo muchas partículas
Para recopilar estadísticas de muchas de estas mediciones, no necesitamos repetir los pasos 1 y 2. Simplemente podemos aumentar el número de disparos en nuestro experimento. Siéntete libre de jugar con el número de disparos en la instancia del paso 3 a continuación.
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()
Como antes, si no puedes ejecutar en una computadora cuántica real, descomenta el bloque anterior del primer experimento y simplemente cambia num_shots = 1 a num_shots = 100 o más.
plot_histogram(counts)
Vemos que a veces medimos 0 y a veces medimos 1. ¡Nota que nunca medimos nada más! Podrías cambiar el número de disparos y observar que la probabilidad de medir 0 o 1 parece ser bastante consistente entre diferentes ejecuciones con distintos números de disparos. Por lo tanto, algo en la preparación del estado parece estar determinando la probabilidad de los resultados de medición, aunque cualquier medición individual podría arrojar 0 o 1.
Tercer experimento: Espines aleatorios en un horno
En el experimento de Stern-Gerlach, los investigadores no podían especificar el ángulo con el que un vector de momento angular emergía del horno. Las orientaciones eran aleatorias (¡o algo aún más misterioso! Consulta el módulo de Qiskit Classroom sobre el teorema de Bell). Un análogo razonable de ese experimento sería inicializar aleatoriamente los estados de nuestro qubit y realizar mediciones muchas veces.
Paso 1: Mapear las entradas clásicas a un problema cuántico
El circuito que queremos construir es el mismo que antes. La única diferencia es que esta vez construiremos el circuito usando compuertas con parámetros libres y . Los valores numéricos de esos parámetros se asignarán en cada nueva ejecución.
# 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")
Ejecutar un circuito cuántico con un solo disparo y hacerlo para muchas configuraciones aleatorias es un flujo de trabajo inusual para una computadora cuántica. Sin duda se puede hacer, pero para simplificar, aquí usaremos un simulador 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)
Vemos entonces que el estado inicial aleatorio de los qubits (que corresponde a orientaciones aleatorias del momento angular en un experimento de Stern-Gerlach) produce cantidades similares de estados 0 y 1 (análogas a cantidades similares de estados de espín arriba y espín abajo). Esto es exactamente lo que mostró el experimento original de Stern-Gerlach.
Cuarto experimento: Mediciones repetidas
Cuando un qubit comienza en un estado aleatorio, vemos que hay aproximadamente un 50-50 de probabilidad de medir uno u otro extremo. Pero ¿qué le sucede al estado del qubit (o al momento angular de la partícula) después de la medición? Para responder eso, necesitaremos definir un circuito que nos permita hacer múltiples mediciones del mismo qubit. Definamos un circuito que podamos usar para investigar esto. Querremos permitir la posibilidad de medir ambos estados y , por lo que necesitamos algo que rote el estado inicial del qubit desde el estado predeterminado . En este caso, usaremos una compuerta Hadamard , ya que . Nota que, de forma predeterminada, ambas mediciones serán a lo largo 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)
{'00': 497, '11': 498, '01': 3, '10': 2}
# Step 4: Post-process
plot_histogram(counts)
En la figura anterior, las barras están etiquetadas como "00", "01", etc. Aquí, estos números se refieren al "2.º resultado, 1.er resultado". Entonces "00" significa que ambas mediciones dieron el estado , y "01" significa que la primera medición dio y la segunda dio . La gran mayoría de los qubits fueron medidos en dos veces, o en dos veces. Fue muy raro que un qubit se midiera en un estado y luego en otro, y los pocos casos en que eso ocurrió (~1%) se deben al ruido. En este caso, ese ruido se ha simulado en concordancia con el comportamiento del sistema cuántico real. Esta correlación observada entre mediciones sucesivas también se observa en mediciones de tipo Stern-Gerlach de partículas con momento angular de espín. Si una partícula se mide como "espín arriba", una medición subsiguiente poco después dará nuevamente "espín arriba" (salvo una pequeña variación debida al ruido).
Esto puede parecer trivial. Al fin y al cabo, si un qubit se mide en un estado y luego lo mido de nuevo rápidamente, ¿por qué no iba a seguir en ese estado? Pero si nos detenemos en esta sutileza, puede ayudarnos a elegir las herramientas matemáticas para describir este fenómeno.
Análisis de los experimentos hasta ahora
Recojamos algunas observaciones de nuestros experimentos hasta el momento:
- La medición de un sistema mecánico cuántico solo arrojará uno de un conjunto de "valores permitidos". Para sistemas de dos niveles como los qubits o las partículas de espín-1/2, una medición solo dará uno de los dos resultados binarios.
- Cuando inicializamos aleatoriamente el estado de nuestro sistema binario (como partículas de espín-1/2 que emergen de un horno), cualquiera de los dos resultados de medición es posible.
- Una vez realizada una medición y conocido el estado del sistema, repetir la medición del mismo observable físico no cambia el estado. Es decir, si obtenemos el estado 0 una vez, al medir de nuevo sigue siendo el estado 0 (salvo un pequeño ruido en el sistema de ~0.1% a 1%).
Nota explícitamente que aún no hemos abordado la naturaleza probabilística de la mecánica cuántica, ni hemos dicho nada sobre el "colapso" del estado a un autoestado. Usando solo las observaciones anteriores, puede ser tentador buscar una operación matemática que deje cierto conjunto especial de estados cuánticos sin cambios salvo quizás una constante: , dado que medir a lo largo de dos veces da el mismo resultado. En última instancia, esa búsqueda no logrará describir todos los comportamientos que veremos. Pero sí puede describir algunas cosas, así que la seguiremos un poco más.
Existe tal operación. La operación matricial sobre algunos vectores los modifica, y sobre otros vectores (autovectores) los deja sin cambios salvo una constante. Tomemos como ejemplo la matriz y el vector donde
y
Nota que
Pero para otros vectores, digamos , tenemos
Podríamos intentar describir el espín de una partícula mediante una matriz, y los estados de las partículas después de la medición mediante un vector, llamado "vector de estado". No es para nada obvio qué valores deben ir en dicha matriz o vector de estado, pero la única propiedad que tenemos de las mediciones hasta ahora que podríamos usar para etiquetar estados sería la probabilidad de medir 0 o 1 ("espín arriba" o "espín abajo" en el contexto de partículas de espín-1/2). Debemos considerar que las entradas en los vectores de estado deben estar relacionadas con esta probabilidad (exactamente la probabilidad, "amplitud de probabilidad" —es decir, elevamos la entrada al cuadrado para obtener la probabilidad, y así sucesivamente). Pero en este punto, no sabemos si las entradas en estas matrices deben ser estrictamente reales, complejas, o qué. Para estar seguros, intentemos desarrollar un marco en el que los vectores y las matrices satisfagan lo siguiente:
- Los operadores matriciales están conectados al experimento en la mayor medida posible. Por ejemplo, podríamos asociar los autovalores de una matriz de espín con las proyecciones de espín observadas experimentalmente.
- Los vectores de estado deben estar conectados a la probabilidad de la siguiente manera: si una partícula se encuentra en el vector de estado , la probabilidad de que una medición subsiguiente encuentre la partícula en el estado es .
Esto nos da mucha libertad para desarrollar nuestras primeras matrices. Por ejemplo, podríamos ingenuamente intentar
Aquí el significa que hay estados en las computadoras cuánticas y en los sistemas de espín-1/2 que son muy similares y a menudo se mapean entre sí. Obviamente no son exactamente iguales, ya que se refieren a sistemas diferentes. Pero el álgebra que describe estos sistemas de dos estados podría seguir las mismas reglas (adelanto: ¡así es!). Nota que esta elección aleatoria ya tiene un atributo conveniente. Observa que
Es decir, si una partícula ya está en el estado , la probabilidad de que una medición subsiguiente también dé es 1 (sin considerar efectos de ruido). Esto es excelente, porque ya vimos que una vez que un estado está en 0 o "espín arriba", permanece ahí en mediciones subsiguientes. La probabilidad anterior debería ser, efectivamente, del 100%.
Comprueba tu comprensión
Lee las preguntas a continuación, piensa en tus respuestas y luego haz clic en los triángulos para revelar las soluciones.
¿Por qué es
una mejor elección que, por ejemplo,
Respuesta:
Nuestro intento de asociar la probabilidad de una medición con el cuadrado del producto interno significa que necesitamos que la magnitud de cada vector sea 1. Es decir, para todo , ya que la probabilidad de que algo en el estado esté en el estado es del 100%. Esto se conoce como "condición de normalización".
¿Por qué es
una mejor elección que, por ejemplo,
Respuesta:
No lo es. No hay ninguna razón por la que inicialmente debamos elegir . Es más bien una convención. Sin embargo, una vez que hacemos esa elección, sí impone ciertas restricciones en las elecciones subsiguientes. Ver a continuación.
Recuerda que en los experimentos anteriores encontramos que un qubit inicialmente en el estado permanecía en ese estado en mediciones subsiguientes. Lo mismo aplica para . Esto significa que un qubit que está en tiene probabilidad cero de ser medido en el estado (sin considerar los efectos del ruido). La conexión requerida entre productos internos y probabilidades de medición nos dice entonces que
Sin pérdida de generalidad, podemos escribir el vector de estado . Entonces podemos escribir
El requisito de que , la llamada "condición de normalización", nos dice que . Esto por sí solo solo nos limita a para . Resulta que hay otras razones para elegir que están más allá de esta introducción al tema. Por ahora, baste decir que es una solución aceptable.
Hemos avanzado bastante en nuestro análisis. Elegir una forma para nuestros vectores de estado nos permite construir una matriz que describe algo sobre los fenómenos físicos en juego aquí. En particular, dado que el experimento original de Stern-Gerlach midió una separación de trayectorias basada en componentes del momento angular de espín a lo largo del eje , nos gustaría un operador que describa exactamente eso: . Otra conexión clave con el experimento es que, a partir de la cantidad de deflexión, el tiempo de vuelo y la intensidad conocida del campo magnético, podemos determinar la magnitud de la componente del espín. Aunque esto requiere muchas suposiciones sobre la precisión del montaje experimental, aquí simplemente reiteraremos que las componentes del momento angular de espín medidas son .
Entonces buscamos una matriz con autovalores reales (satisfecha por matrices hermitianas) cuyos autovalores correspondan a estas componentes de espín observadas experimentalmente. Sin pérdida de generalidad, podemos escribir , y podemos requerir:
Combinando, y extrayendo el factor global de , tenemos
Este es el conocido operador espín-z que aparece en todos los libros de texto de mecánica cuántica. Con frecuencia se ve sin el factor , en cuyo caso es el operador "Pauli-z", típicamente denotado :
Esto es útil, ya que este operador de Pauli (y las matrices relacionadas) puede describir muchos sistemas físicos que involucran dos niveles o dos posibles resultados de medición, incluidos los estados de los qubits de transmon en una computadora cuántica.
Antes de pasar a otros operadores y estados relacionados con este, debemos abordar un hecho que mucha gente entiende mal. La acción de un operador no es lo mismo que una medición. En cierto sentido, podrías decir: "¡Claro que no! Una ocurre en papel como parte de un cálculo matemático, y la otra ocurre en un laboratorio sobre sistemas físicos." Sí, eso es cierto, pero va más allá de eso. Realizar una medición de la componente del espín siempre dará un estado "espín arriba" o "espín abajo", independientemente del estado inicial del sistema. Lo vimos con los análogos de computación cuántica y . Inicializamos estados en cientos de orientaciones aleatorias, y las mediciones siempre dieron o . Esto se conoce como el "colapso del estado" a un autoestado por efecto de la medición. Esto no ocurre cuando aplicas una matriz a un estado. Intenta las preguntas a continuación para explorar esto.
Comprueba tu comprensión
Lee la(s) pregunta(s) a continuación, piensa en tu respuesta y luego haz clic en el triángulo para revelar la solución.
Supón que comienzas con una partícula en un estado de espín
(a) ¿Qué obtienes si actúas con el operador sobre este vector de estado? (b) ¿Qué obtienes si realizas una sola medición de la componente del espín de esta partícula? (c) ¿Qué obtienes si preparas muchas partículas idénticas a este estado y realizas miles de mediciones de la componente del espín?
Respuestas:
(a) Obtienes
Eso es todo. No hay ningún resultado experimental. Simplemente aplicas la matriz al vector y obtienes un vector ligeramente diferente que ahora tiene un nuevo signo "-", y ya no tiene magnitud 1, ya que tiene un prefactor .
(b) Obtendrás o . Esto corresponde a observar una proyección del espín en el eje de o , respectivamente. También podemos determinar la probabilidad de cada resultado, ya que
Así que, si bien el estado de espín arriba es un 20% más probable, cualquier resultado es posible, y solo obtendremos uno de estos dos estados.
(c) Aproximadamente el 60% de las mediciones darán partículas de espín arriba y aproximadamente el 40% darán partículas de espín abajo, según las probabilidades de medición calculadas en el apartado (b).
Verifica las respuestas de los apartados (b) y (c) de la pregunta anterior usando la analogía entre los estados de espín arriba de un átomo y los estados de un qubit:
Codifica circuitos cuánticos para crear el estado inicial deseado y luego usa hardware real o un simulador para comprobar los resultados de una sola medición y a partir de un conjunto de cientos o incluso miles de mediciones.
Respuesta:
#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.
Quinto experimento: Medir diferentes observables
Hasta ahora solo hemos realizado mediciones a lo largo del eje z. En un experimento de Stern-Gerlach, si quisiéramos medir a lo largo de, digamos, el eje x, simplemente orientaríamos el campo magnético inhomogéneo para que apunte a lo largo del eje y buscaríamos deflexiones a lo largo de en la pantalla. Sin embargo, los computadores cuánticos de IBM están diseñados para realizar mediciones a lo largo de un único eje (). Para medir un estado a lo largo de debemos realizar un "cambio de base". Esto significa que debemos aplicar una operación que lleve los estados a lo largo de en la esfera de Bloch a , y viceversa. Hay varias formas de implementar esto, pero la preferida es la puerta Hadamard:
Comprueba tu comprensión
Lee la(s) pregunta(s) a continuación, piensa en tu respuesta y luego haz clic en el triángulo para revelar la solución.
Demuestra que y que
Respuesta: