Skip to main content
IBM Quantum Platform

El experimento Stern-Gerlach utilizando ordenadores cuánticos

Para este módulo de Qiskit en las aulas, los estudiantes deben tener un entorno Python en funcionamiento con los siguientes paquetes instalados:

  • qiskit v2.1.0 o más reciente
  • qiskit-ibm-runtime v0.40.1 o más reciente
  • qiskit-aer v0.17.0 o más reciente
  • qiskit.visualization
  • numpy
  • pylatexenc

Para configurar e instalar los paquetes anteriores, consulta la guía Instalar Qiskit. Para ejecutar trabajos en ordenadores cuánticos reales, los estudiantes deberán crear una cuenta en IBM Quantum® siguiendo los pasos de la guía Configure su cuenta IBM Cloud.

Este módulo fue probado y utilizó 2 segundos de tiempo QPU. Esto es sólo una estimación. Su uso real puede variar.

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

Vea el tutorial del módulo de la Dra. Katie McCormick a continuación, o haga clic aquí para verlo en YouTube.



En segundo plano

A principios del siglo XX, las pruebas de un comportamiento cuantizado a escala atómica eran cada vez más numerosas. Muchas interpretaciones acertadas de los datos, como la explicación de Max Planck de la catástrofe ultravioleta, y experimentos como el de Otto Stern y Walther Gerlach fueron decisivos para convencer al mundo de que era necesario un sistema de mecánica cuántica y de que ciertos fenómenos físicos están cuantizados. En el caso del experimento Stern-Gerlach (concebido por Stern en 1921 y realizado por Stern y Gerlach en 1922), el objetivo era comprobar la cuantización del momento angular en los átomos.

En esa misma época, el modelo de Bohr-Sommerfeld, una extensión del modelo de Bohr, predijo que los electrones existían en órbitas cuantizadas similares a las de los planetas alrededor del Sol.

Diagrama del modelo Bohr-Sommerfeld. Un punto central representa el núcleo de un átomo. Los círculos o elipses alrededor de ese punto representan orbitales atómicos, muy parecidos a las órbitas planetarias alrededor del sol. Las órbitas de mayor energía están más alejadas del núcleo.

Aunque en última instancia este tratamiento resultaría insuficiente para explicar el comportamiento mecánico cuántico del átomo, en líneas generales, sí predijo muchos fenómenos observados, como las líneas espectrales discretas de los átomos. Las órbitas cuantizadas de electrones con energías específicas corresponden a valores cuantizados de momento angular. Es este momento angular orbital el que Stern y Gerlach trataron de observar en su experimento, aunque el experimento se aplica a cualquier tipo de momento angular cuantizado, incluido el espín. A menudo se oye hablar del experimento de Stern-Gerlach aplicado a los giros. El experimento original se centró en 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, cabría esperar que una partícula de carga qq, masa mm y momento angular L\vec{L} tuviera un momento magnético μ\mu dado por

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

Resulta que casi la misma fórmula es válida para el momento angular mecánico cuántico, con la salvedad de añadir un cociente numérico relacionado con el tipo de momento angular, denominado factor g gg. Cuando se combinan diferentes tipos de momento angular, o se generaliza a un tipo arbitrario, a menudo se ve J\vec{J} utilizado en lugar de L\vec{L}, por lo que escribimos:

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

Para los objetos clásicos, g=1g=1. Para electrones, g2g\approx 2, y hay muchos valores para diversos núcleos y partículas subatómicas. El punto principal aquí es que un momento angular cuantizado significa un momento magnético cuantizado

Este momento magnético experimentará un par de torsión en un campo magnético:

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

Y experimentará una fuerza en un campo magnético con un gradiente distinto de cero:

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

A menudo consideraremos la expresión anterior un componente cada vez, por lo que puede ser conveniente pensar en su zz -componente:

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

Combinando las expresiones, podemos obtener

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

Stern y Gerlach no conocían el factor gg, pero incluso con él en la expresión, tenemos una fuerza igual a varias constantes conocidas o medibles multiplicadas por un momento angular. Por tanto, utilizando un campo magnético con un gradiente conocido y midiendo la desviación de una partícula a su paso por el campo, deberíamos obtener información sobre el momento angular. Este es el quid del experimento Stern-Gerlach.

Átomos de plata que viajan a través de un campo magnético no homogéneo y son desviados hacia arriba o hacia abajo en función de su espín. Clásicamente, esperaríamos una distribución continua en la pantalla, pero en el experimento vemos dos puntos distintos.

Fig. Experimento de Stern-Gerlach [1] : Átomos de plata que viajan a través de un campo magnético no homogéneo y son desviados hacia arriba o hacia abajo en función de su espín. Clásicamente, esperaríamos una distribución continua en la pantalla, pero en el experimento vemos dos puntos distintos.

Los átomos de plata neutra se calentaron en un horno. A medida que un haz de átomos de plata salía del horno, se utilizaban colimadores de haz para seleccionar únicamente los átomos que se desplazaban cerca del centro del campo magnético no homogéneo. Por supuesto, algunos átomos se desvían un poco a la izquierda o a la derecha, y experimentan un gradiente más débil en el campo, o ningún gradiente en absoluto. Por lo tanto, no nos preocupa demasiado el comportamiento de los átomos situados más a la izquierda o más a la derecha. Nos interesa saber qué ocurre con los átomos que se desplazan por el centro del canal, donde el gradiente del campo magnético producirá una fuerza que desviará los átomos únicamente en la dirección zz.

¿Qué debemos esperar, clásicamente?

¿Cómo se comportarían estos átomos si fueran exactamente como los voluminosos imanes clásicos? Puedes hacer el experimento. Imagine disparar pequeños imanes de neodimio contra un imán grande y potente. La orientación de los pequeños imanes es aleatoria. Pero al pasar junto al imán grande, se reorientan rápidamente para alinearse con el campo y son atraídas por el imán grande. La gran mayoría de los pequeños imanes se desvían hacia el imán grande. El observador más astuto podría preguntarse: "¿Y el ahorro de energía?"

De hecho, un momento magnético en un campo magnético externo tiene asociada una energía potencial:

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

Así, si un momento magnético girase en el campo magnético externo, se produciría un cambio de energía dado por:

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

En el caso especial de un pequeño imán perfectamente antialineado con el campo externo que da la vuelta y se alinea con él, esto correspondería a una disminución de la energía potencial:

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

¿Adónde va a parar esa energía? Un imán clásico, como un pequeño imán de neodimio de nevera, 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 cualesquiera, y al menos la orientación inicial sería aleatoria. Así que se disiparía una cantidad diferente de energía en forma de calor por cada imán diminuto. 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é podemos esperar al aplicar el pensamiento clásico a escalas atómicas?

Como mínimo, no ocurre lo mismo con 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 primera mecánica cuántica 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 sólo podría absorber unas 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 para un sistema con niveles de energía cuantizados. El exceso de energía no podía disiparse en forma de calor. ¿Y qué pasaría en su lugar?

Comprueba tu comprensión

Explica qué crees que ocurriría en una situación como la descrita. 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 campo magnético externo aplica un par que intenta hacer girar el pequeño imán para alinearlo con el campo externo. ¿Qué ocurre?

  • El minúsculo momento magnético giraría hacia la alineación con el campo externo. Pero cuando se alinea momentáneamente, tendría energía cinética de rotación que la mantendría girando más allá del campo y de nuevo fuera de alineación. Este comportamiento puede observarse incluso en grandes imanes clásicos. Pero en esos sistemas clásicos, la oscilación del pequeño momento magnético acaba por detenerse al disiparse la energía en calor. Pero en un sistema sin tal 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?

  • Una distribución suave desde una desviación máxima hacia el lado más fuerte del campo magnético (aquellas partículas que empezaron alineadas con el campo externo) hasta una desviación máxima hacia el lado más débil del campo (aquellas partículas que empezaron antialineadas con el campo externo), y todas las desviaciones intermedias, correspondientes a todas las orientaciones iniciales entre esos extremos.

    Diagrama de un haz de partículas que atraviesa un imán. Se desvían en diversos grados a lo largo de la dirección del campo magnético. Así que cuando golpean una pantalla distante forman una línea.

¿Qué predeciría la mecánica cuántica?

Quizá 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 lo estuviera su proyección sobre algún eje? La cuantización del momento angular como magnitud es interesante, pero se podría intentar argumentar a través de ella utilizando la intuición clásica, la forma en que las órbitas planetarias se establecieron en trayectorias fijas que no se cruzan entre sí, teniendo sólo ciertos momentos angulares permitidos. Pero, ¿y si ese vector de momento angular sólo pudiera apuntar exactamente a lo largo de zz o exactamente opuesto a zz, pero no tuviera ningún otro componente a lo largo de zz? ¿Y si, al medirlo en otra dirección, el vector sólo pudiera apuntar exactamente a lo largo de xx o exactamente en dirección opuesta a xx, y no tuviera ninguna componente intermedia? Eso sería extraño de un modo que confunde toda intuición clásica.

Comprueba tu comprensión

¿Qué tipo de distribución de partículas en una pantalla esperarías encontrar en este último caso, en el que la proyección del momento angular a lo largo de la dirección del campo está cuantizada? Siéntase libre de considerar sólo las partículas que pasan perfectamente por el centro del dispositivo, o incluir aquellas que se desvían ligeramente del centro hacia donde el gradiente es más débil. Sé explícito.

  • Las partículas del centro del dispositivo experimentarían un único campo no homogéneo y se mediría que todas tienen una de las dos orientaciones de sus momentos magnéticos. Por lo tanto, o bien se desviarían al máximo con el gradiente o al máximo contra el gradiente, y nada intermedio. Por supuesto, a ambos lados, donde el gradiente es más débil, la desviación sería menor. En posiciones laterales muy grandes, pueden quedar totalmente fuera del gradiente, y podría haber una única región de partículas no deflectadas.

    Diagrama de un haz de partículas que se desvía hacia arriba o hacia abajo, golpeando uno de los dos puntos de una pantalla, sin partículas entre estos dos máximos

¿Cómo nos ayudarán los qubits a probar esto?

La mayoría de los ordenadores cuánticos utilizan "qubits", los análogos cuánticos de los bits clásicos. Más concretamente, 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 utilizan sistemas de tres niveles (llamados "qutrits") o de muchos niveles (llamados "qudits"). Pero la mayor parte del trabajo se concentra en los qubits. En concreto, IBM® los ordenadores cuánticos utilizan lo que se denominan qubits transmon de frecuencia fija. 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 de mecánica cuántica que pueden interactuar con la luz y sobre los que se pueden realizar mediciones. De hecho, a menudo se encuentran analogías entre los estados de espín de la mecánica cuántica y los estados computacionales de un qubit. Por ejemplo, a menudo se ve el estado "spin-up" asociado al estado 0 computacional, y "spin-down" asociado al estado 1 computacional:

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

Podemos utilizar estas similitudes para observar un comportamiento mecánico cuántico en los ordenadores cuánticos IBM que imite el comportamiento mecánico cuántico del momento angular orbital o de espín en los átomos. Haremos observaciones similares utilizando combinaciones lineales de estos estados que nos permitan extender la discusión al momento angular a lo largo de cualquier dirección.


Primer experimento: una sola medición

En este primer experimento y a lo largo de todo el módulo, utilizaremos un marco para la computación cuántica conocido como "patrones Qiskit", que divide los flujos de trabajo en los siguientes pasos:

  • Paso 1: Asignar entradas clásicas a un problema cuántico
  • Paso 2: Optimizar el problema para la ejecución cuántica
  • Paso 3: Ejecutar utilizando primitivas de « IBM Quantum »
  • Etapa 4: Tratamiento posterior y análisis clásico

Por lo general, seguiremos estos pasos, aunque no siempre los etiquetemos explícitamente.

Paso 1: Asignar entradas clásicas a un problema cuántico

Aquí, las entradas clásicas son orientaciones de un espín antes de la medición en un dispositivo Stern-Gerlach. No hay que preocuparse demasiado por la naturaleza exacta del estado cuántico antes de la medición. Ese es el tema de otro módulo de las Aulas Qiskit, sobre el teorema de Bell.

Observe que los ordenadores cuánticos IBM miden estados a lo largo del eje zz. Así que este primer experimento será muy parecido al experimento de Stern-Gerlach con el gradiente de campo magnético a lo largo de zz. Más adelante veremos cómo cambiar el sistema para medir a lo largo de diferentes direcciones.

Comencemos haciendo el análogo de un estado de espín, es decir, alguna mezcla de |\uparrow\rangle y |\downarrow\rangle o equivalentemente de 0|0\rangle y 1|1\rangle. 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)

Output:

0.7032089086145691 0.7109832845047109

Ahora utilizaremos los ángulos anteriores como parámetros en un circuito cuántico. Estamos considerando sólo una partícula a la vez, por lo que utilizaremos sólo un qubit en nuestro circuito, y necesitaremos sólo 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")

Output:

Output of the previous code cell

Paso 2: Optimizar el problema para la ejecución cuántica

Para llevar a cabo nuestro experimento en un ordenador cuántico real, debemos iniciar el servicio de cómputo de IBM Quantum y seleccionar un ordenador cuántico (o un «backend»). A continuación, simplemente seleccionamos el ordenador cuántico menos ocupado de los que tenemos a nuestra disposición.

A continuación encontrará un código para guardar sus credenciales la primera vez que las utilice. Asegúrate de borrar esta información del cuaderno después de guardarlo en tu entorno, para que tus credenciales no se compartan accidentalmente cuando compartas el cuaderno. Consulte Configurar su cuenta IBM Cloud e Inicializar el servicio en un entorno no fiable para obtener más orientación.

# 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

Ahora debemos transpilar el circuito, lo que significa que debemos mapear nuestro circuito en las puertas base disponibles para nuestro ordenador cuántico elegido, y queremos optimizar nuestro circuito para que funcione en ese ordenador cuántico.

# 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 utilizando primitivas de « IBM Quantum »

Ahora queremos ejecutar esto en un ordenador cuántico real. Toda la sintaxis necesaria para ello se encuentra en el siguiente bloque de código. Si has agotado el tiempo asignado a los ordenadores cuánticos 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()

Utiliza el código siguiente si no puedes realizar el experimento en un ordenador cuántico 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: Posprocesamiento y análisis clásico

Para este experimento tan sencillo, el análisis clásico sólo consiste en visualizar el resultado experimental.

from qiskit.visualization import plot_histogram

print("counts = ", counts)
plot_histogram(counts)

Output:

counts =  {'0': 1}
Output of the previous code cell

Hicimos una medición y obtuvimos "0". No nos sorprende. Sabemos que estamos utilizando un ordenador cuántico compuesto por qubits y estamos muy acostumbrados a que los bits clásicos devuelvan un 0 o un 1. Pero hay que tener en cuenta que se trata del análogo en computación cuántica de los experimentos realizados con partículas con momentos magnéticos. Si hubiéramos esperado una dispersión uniforme entre 0 y +1, podría habernos sorprendido que obtuviéramos un extremo en nuestra primera medición. Esta sorprendente cuantización de los resultados del experimento de Stern-Gerlach nos condujo a una mejor comprensión de la naturaleza y, a su vez, nos ayudó a construir ordenadores cuánticos.

Veamos qué ocurre cuando hacemos un conjunto de mediciones.


Segundo experimento: Medición de muchas partículas

Para recopilar estadísticas de muchas mediciones de este tipo, no es necesario repetir los pasos 1 y 2. Podemos simplemente aumentar el número de disparos en nuestro experimento. Siéntase libre de jugar con el número de disparos en el caso 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 un ordenador cuántico real, descomenta el bloque anterior del primer experimento, y simplemente cambia num_shots = 1 a num_shots = 100 o más.

plot_histogram(counts)

Output:

Output of the previous code cell

Vemos que a veces medimos 0 y a veces medimos 1. Tenga en cuenta que nunca medimos nada más Puede cambiar el número de disparos, y observe que la probabilidad de medir 0 o 1 parece ser bastante consistente entre diferentes ejecuciones con diferentes números de disparos. Así pues, algo relacionado con la preparación del estado parece determinar la probabilidad de los resultados de las mediciones, aunque cualquier medición puede dar 0 o 1.


Tercer experimento: giros aleatorios en un horno

En el experimento de Stern-Gerlach, los investigadores no llegaron a especificar un ángulo en el que un vector de momento angular emergería del horno. Las orientaciones eran aleatorias (¡o algo aún más misterioso! Véase el módulo del Aula Qiskit sobre el teorema de Bell). Un análogo razonable de ese experimento sería que inicializáramos aleatoriamente los estados de nuestro qubit y realizáramos mediciones muchas veces.

Paso 1: Asignar 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 utilizando puertas con parámetros libres θ\theta y ϕ\phi. Los valores numéricos de esos parámetros se asignarán para 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")

Output:

Output of the previous code cell

Ejecutar un circuito cuántico durante un solo disparo y hacerlo para muchas configuraciones aleatorias es un flujo de trabajo inusual para un ordenador cuántico. Sin duda puede hacerse, pero para simplificar, utilizaremos aquí 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)

Output:

Output of the previous code cell

Así, vemos que el estado inicial aleatorio de los qubits (correspondiente a orientaciones aleatorias del momento angular en un experimento de Stern-Gerlach) produce números similares de estados 0 y 1 (como números similares de estados de espín arriba y espín abajo). Esto es exactamente lo que demostró el experimento original de Stern-Gerlach.


Cuarto experimento: Mediciones repetidas

Cuando un qubit comienza en un estado aleatorio, vemos que hay una probabilidad aproximada del 50-50 de medir un extremo sobre el otro. Pero, ¿qué le ocurre al estado del qubit (o al momento angular de la partícula) después de la medición? Para responder a eso, necesitaremos definir un circuito que nos permita hacer múltiples mediciones de los mismos qubits. Definamos un circuito que podamos utilizar para investigar esto. Querremos permitir la posibilidad de medir ambos estados 0|0\rangle y 1|1\rangle, por lo que necesitamos algo para rotar el estado inicial del qubit fuera del estado por defecto 0|0\rangle. En este caso, utilizaremos una puerta hadamard HH, ya que H0=12(0+1)H|0\rangle = \frac{1}{\sqrt{2}}(|0\rangle+|1\rangle). Nótese que, por defecto, ambas mediciones se realizarán a lo largo de zz.

from qiskit import QuantumCircuit

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

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

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

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

qc.draw("mpl")

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

num_shots = 1000
dist = sampler.run([qc_ibm], shots=num_shots).result()
# To run on a simulator, uncomment the line below and comment out the line above.
# dist = sampler_sim.run([qc_ibm], shots=num_shots).result()
counts = dist[0].data.c.get_counts()
print(counts)

Output:

{'00': 497, '11': 498, '01': 3, '10': 2}
# Step 4: Post-process
plot_histogram(counts)

Output:

Output of the previous code cell

En la figura anterior, los contenedores están etiquetados como "00", "01" y así sucesivamente. Aquí, estos números se refieren al "2º resultado, 1º resultado". Así, "00" significa que ambas mediciones dieron como resultado el estado 0|0\rangle, y "01" significa que la primera medición dio como resultado 1|1\rangle, y la segunda 0|0\rangle. La gran mayoría de los qubits se midieron dos veces en 0|0\rangle o dos veces en 1|1\rangle. Era muy raro que los qubits se midieran en un estado y luego se midiera que estaban en otro, y los pocos casos en los que ocurrió (~1%) se deben al ruido. En este caso, ese ruido se ha simulado de acuerdo 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 se mide el "spin-up" de una partícula, una medición posterior, poco después, volverá a arrojar "spin-up" (hasta 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 vuelvo a medir, rápidamente, ¿por qué no iba a seguir en ese estado? Pero si realmente nos fijamos en esta sutileza, puede ayudarnos a seleccionar algunas herramientas matemáticas para describir este fenómeno.


Análisis de los experimentos realizados hasta ahora

Recopilemos algunas observaciones de nuestros experimentos hasta ahora:

  • La medición de un sistema mecánico cuántico sólo arrojará uno de un conjunto de "valores permitidos". Para los sistemas de dos niveles, como los qubits o las partículas de spin-1/2, una medición sólo arrojará uno de los resultados binarios.
  • Cuando inicializamos aleatoriamente el estado de nuestro sistema binario (como spin-1/2 partículas que salen de un horno), cualquiera de los resultados de medición binarios 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, cuando volvemos a medir sigue estando en el estado 0 (hasta cierto ruido menor en el sistema ~0.1 % a 1%).

Obsérvese explícitamente que aún no hemos abordado la naturaleza probabilística de la mecánica cuántica, ni hemos dicho nada sobre "colapsar" el estado a un estado propio. Utilizando sólo las observaciones anteriores, podría ser tentador buscar una operación matemática OO que deje algún conjunto especial de estados mecánicos cuánticos ψ|\psi\rangle sin cambios hasta quizás una constante: Oψ=cψO|\psi\rangle = c|\psi \rangle, ya que midiendo a lo largo de zz dos veces se obtiene el mismo resultado. En última instancia, esa búsqueda no logrará describir todos los comportamientos que veremos. Pero puede describir algunas cosas, así que seguiremos un poco más.

Existe una operación de este tipo. La operación matricial sobre algunos vectores modifica los vectores, y la operación matricial sobre otros vectores (vectores propios) deja el vector inalterado hasta una constante. Tomemos por ejemplo la matriz MM y el vector v|v\rangle donde

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

y

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

Observar que

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

Pero para otros vectores, por ejemplo v=(12)|v'\rangle = \begin{pmatrix} 1\\2\end{pmatrix}, tenemos

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

Podemos intentar describir el espín de una partícula mediante una matriz, y podemos intentar describir los estados de las partículas tras la medición mediante un vector, llamado "vector de estado". No está nada claro qué valores deberían ir en dicha matriz o vector de estado, pero la única propiedad que tenemos de las mediciones hasta ahora que podríamos utilizar para etiquetar los estados sería la probabilidad de medir 0 o 1 ("spin-up" o "spin-down" en el contexto de las partículas de spin-1/2 ). Debemos considerar que las entradas en los vectores de estado deben estar relacionadas con esta probabilidad (exactamente la probabilidad, "amplitud de probabilidad" - lo que significa que elevamos al cuadrado la entrada para obtener la probabilidad, y así sucesivamente). Pero en este punto, no estamos seguros de si las entradas de 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 se conectan para experimentar en la medida de lo posible. Por ejemplo, podríamos asociar los valores propios de una matriz de espín con las proyecciones de espín observadas experimentalmente.
  • Los vectores de estado deben conectarse a la probabilidad de la siguiente manera: Si una partícula se encuentra en el vector de estado A|A\rangle, la probabilidad de que una medición posterior encuentre a la partícula en el estado B|B\rangle es PABAB2P_{AB}\equiv |\langle A| B \rangle|^2.

Esto nos da mucha libertad para desarrollar nuestras primeras matrices. Por ejemplo, podríamos intentar ingenuamente

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

Aquí el 0|0\rangle \sim |\uparrow\rangle significa que hay estados en los ordenadores cuánticos y en los sistemas spin-1/2 que son muy similares y a menudo se mapean entre sí. Evidentemente, no son exactamente iguales, ya que se refieren a sistemas diferentes. Pero el álgebra que describe estos sistemas de dos estados podría ajustarse a las mismas reglas (alerta de spoiler: ¡lo hacen!). Ten en cuenta que esta elección aleatoria ya tiene un buen atributo. Observar que

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

Es decir, si una partícula ya se encuentra en el estado 0|0\rangle, la probabilidad de que una medición posterior también arroje 0|0\rangle es 1 (salvo efectos del ruido). Esto es excelente, porque ya hemos visto que una vez que un estado está en el estado 0 o "spin-up", permanece allí en una medición posterior. La probabilidad anterior debería ser efectivamente del 100%.

Comprueba tu comprensión

¿Por qué

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

una mejor opción que, digamos,

0=(20)?|0\rangle = \begin{pmatrix} 2 \\0 \end{pmatrix}?
  • Nuestro intento de asociar la probabilidad de una medida con el producto interior al cuadrado significa que necesitamos que la magnitud de cada vector sea 1. Es decir, vv2=1|\langle v|v\rangle|^2 = 1 para todo v|v\rangle, ya que la probabilidad de que una cosa en el estado v|v\rangle esté en el estado v|v\rangle es del 100%. Esto se conoce como "condición de normalización".

¿Por qué

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

una mejor opción que, digamos,

0=(01)?|0\rangle = \begin{pmatrix} 0 \\1 \end{pmatrix}?
  • No lo es. No hay ninguna razón por la que tengamos que elegir inicialmente 0=(10)|0\rangle = \begin{pmatrix} 1 \\0 \end{pmatrix}. Se trata más bien de una convención. Sin embargo, una vez tomada esa decisión, impone ciertas limitaciones a las decisiones posteriores. Lea la información siguiente.

Recordemos que en los experimentos anteriores, descubrimos que un qubit inicialmente en un estado 0|0\rangle permanecía en ese estado tras una medición posterior. Lo mismo ocurre con 1|1\rangle. Esto significa que un qubit que está en 0|0\rangle tiene probabilidad cero de ser medido en el estado 1|1\rangle (salvo los efectos del ruido). Nuestra conexión requerida entre productos internos y probabilidades de medidas nos dice entonces que

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

Sin pérdida de generalidad, podemos escribir el vector de estado 1=(ab)|1\rangle = \begin{pmatrix} a \\ b \end{pmatrix}. Entonces podemos escribir

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

El requisito de que P11=1P_{11} = 1, la llamada "condición de normalización" nos dice que b2=1|b|^2=1. Esto por sí mismo sólo nos limita a b=eiϕb=e^{i\phi} para ϕR\phi \in \mathbb{R}. Resulta que hay otras razones para elegir b=1b=1 que van más allá de esta introducción al tema. Por ahora, baste decir que b=1b=1 es una solución aceptable.

Hemos avanzado bastante en nuestro análisis. La elección de una forma para nuestros vectores de estado nos permite construir una matriz que describa algo sobre los fenómenos físicos en juego. En particular, dado que el experimento original de Stern-Gerlach midió una división de trayectorias basada en componentes de momento angular de espín a lo largo del eje zz, nos gustaría un operador que describiera exactamente eso: SzS_z. Otra conexión clave con el experimento es que a partir de la cantidad de desviación, el tiempo de viaje y la intensidad de campo magnético conocida, podemos determinar la magnitud de la componente zz de espín. Aunque esto requiere muchas suposiciones sobre la precisión del montaje experimental, aquí nos limitaremos a reiterar que los componentes z medidos del momento angular de espín son ±/2\pm \hbar/2.

Entonces estamos buscando una matriz con valores propios reales (satisfechos por matrices Hermitianas) con valores propios correspondientes a estos componentes de espín observados experimentalmente. Sin pérdida de generalidad, podemos escribir Sz=(s11s12s21s22)S_z = \begin{pmatrix} s_{11} & s_{12} \\ s_{21} & s_{22}\end{pmatrix}, y podemos exigir:

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

Combinando, y sacando el factor global de /2\hbar/2, tenemos

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

Se trata del conocido operador de espín-z que aparece en todos los manuales de mecánica cuántica. A menudo se ve con el /2\hbar/2 eliminado, en cuyo caso es el operador "Pauli-z", típicamente denotado σz\sigma_z :

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

Esto es útil, ya que este operador de Pauli (y las matrices relacionadas) pueden describir muchos sistemas físicos que implican dos niveles o dos posibles resultados de la medición, incluidos los estados de los qubits transmon en un ordenador cuántico.

Antes de pasar a otros operadores y estados relacionados con éste, debemos abordar un hecho que mucha gente entiende mal. La acción del operador no es lo mismo que la medición. En cierto sentido, podría decirse: "¡Claro que no! Una ocurre sobre el papel como parte de un cálculo matemático, y la otra ocurre en un laboratorio sobre sistemas físicos" Sí, es cierto, pero es más que eso. Si se mide el componente zz del espín, siempre se obtendrá un estado de "espín arriba" o "espín abajo", independientemente del estado inicial del sistema. Lo vimos con los análogos de la computación cuántica 0|0\rangle y 1|1\rangle. Inicializamos los estados para que estuvieran en cientos de orientaciones aleatorias, y las mediciones siempre daban como resultado 0|0\rangle o 1|1\rangle. Esto se conoce como medición que "colapsa el estado" a un estado propio. Esto no ocurre cuando se aplica una matriz a un estado. Pruebe las preguntas que figuran a continuación.

Comprueba tu comprensión

Supongamos que comenzamos con una partícula en un estado de espín

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

(a) ¿Qué se obtiene si se actúa con el operador SzS_z sobre este vector de estados? (b) ¿Qué se obtiene si se realiza una única medida de la componente zz del espín de esta partícula? (c) ¿Qué se obtiene si se preparan muchas partículas idénticas a este estado y se realizan miles de medidas de la componente zz del espín?

  • (a) Se obtiene

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

    Eso es todo. No hay ningún resultado experimental. Basta con aplicar la matriz al vector y se obtiene un vector ligeramente diferente que ahora tiene un nuevo signo "-", y ya no tiene una magnitud de 1, puesto que tiene un prefactor /2\hbar/2.

    (b) Obtendrá |\uparrow\rangle o |\downarrow\rangle. Esto corresponde a la observación de una proyección de espín sobre el eje zz de /2\hbar/2 o /2-\hbar/2, respectivamente. También podemos determinar la probabilidad de cada resultado, ya que

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

    Así que, aunque el estado de espín hacia arriba es un 20% más probable, cualquiera de los dos resultados es posible, y sólo obtendremos uno de estos dos estados.

    (c) Aproximadamente el 60% de las medidas producirán partículas con espín hacia arriba, y aproximadamente el 40% de las medidas producirán partículas con espín hacia abajo, de acuerdo con las probabilidades de medida calculadas en la parte (b).

Comprueba las respuestas a las partes (b) y (c) de la pregunta anterior utilizando la analogía entre los estados de espín de un átomo y los estados qubit:

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

Codifique circuitos cuánticos para crear el estado inicial deseado y, a continuación, utilice hardware real o un simulador para comprobar los resultados de una sola medición y de un conjunto de cientos o incluso miles de mediciones.

  • #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: Medición de diferentes observables

Hasta ahora sólo 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 no homogéneo para que apuntara a lo largo del eje xx, y buscaríamos desviaciones a lo largo de xx en la pantalla. IBM sin embargo, los ordenadores cuánticos están diseñados para realizar mediciones a lo largo de un solo eje ( zz ). Para medir un estado a lo largo de xx debemos realizar un "cambio de base". Esto significa que debemos realizar una operación que lleve los estados a lo largo de xx en la esfera de Bloch a zz, y viceversa. Hay varias formas de hacerlo, pero la preferida es la puerta de Hadamard:

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

Comprueba tu comprensión

Demuestre que H0=+xH|0\rangle = |+\rangle_x y que H+x=0H|+\rangle_x = |0\rangle

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

Demuestre que H1=xH|1\rangle = |-\rangle_x y que Hx=1H|-\rangle_x = |1\rangle

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

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

qc.draw("mpl")

Output:

Output of the previous code cell

Este circuito hace girar nuestro sistema de modo que las mediciones (a lo largo de zz ) nos informan sobre las características de xx antes de la rotación. Ya sabemos que el ordenador cuántico inicializa los estados en 0|0\rangle que corresponde a |\uparrow\rangle. Veamos qué ocurre cuando medimos la proyección del espín a lo largo de xx para un estado inicialmente en |\uparrow\rangle. Mostramos este paso en un simulador para animarte a explorar las estadísticas de otros circuitos con diferentes inicializaciones.

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}

Esto nos muestra que para un qubit inicialmente en 0|0\rangle (o equivalentemente, un espín en |\uparrow\rangle ) la probabilidad de medir una proyección a lo largo de +x+x o x-x es aproximadamente 50-50. En cierto modo, esto tiene mucho sentido. Después de todo, si algo apuntara a lo largo de la dirección z, no tendría ninguna preferencia particular por ±x\pm x. Podríamos esperar lo mismo si empezamos con el estado 1|1\rangle (o |\downarrow\rangle ). Comprobémoslo:

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

Output of the previous code cell
job = sampler_sv.run([qc], shots=10000)
print(job.result()[0].data.c.get_counts())

Output:

{'0': 4935, '1': 5065}

¡Sí! De nuevo, encontramos una probabilidad del 50-50 de medir proyecciones a lo largo de ±x\pm x. Por analogía con las mediciones a lo largo de zz, podríamos sospechar además que una partícula que colapsa a un estado definitivamente a lo largo de +x+x podría tener probabilidad cero de ser medida posteriormente a lo largo de x-x. Comprobémoslo:

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:

Output of the previous code cell
job = sampler_sv.run([qc])
print(job.result()[0].data.c.get_counts())
plot_histogram(job.result()[0].data.c.get_counts())

Output:

{'00': 504, '11': 520}
Output of the previous code cell

Como era de esperar, obtenemos resultados en los que la proyección es a lo largo de +x+x, y más tarde vuelve a ser a lo largo de +x+x, y tenemos resultados en los que la proyección es inicialmente a lo largo de x-x y más tarde vuelve a ser a lo largo de x-x. No vemos casos en los que la proyección pase de +x+x a x-x o viceversa. Podemos recopilar nuestras observaciones y utilizarlas para desarrollar más operadores en forma de matriz y más vectores de estado.

Lo sabemos:

  • Los Estados con proyecciones definidas a lo largo de +z+z o z-z tienen un 50% de probabilidades de tener una proyección a lo largo de +x+x y un 50% de probabilidades de tener una proyección a lo largo de x-x.
  • Los Estados con una proyección definida a lo largo de +x+x tienen cero posibilidades de que más tarde se descubra que tienen una proyección a lo largo de x-x, y viceversa.

Podemos utilizar estos resultados para construir estados con una proyección definida y positiva a lo largo de xx (a los que llamamos +x|+x\rangle ), y aquellos con una proyección definida y negativa a lo largo de xx (a los que llamamos x|-x\rangle ). A partir de esos estados, podemos construir la matriz correspondiente a SxS_x, exactamente igual que hicimos para SzS_z. Dejamos esto como ejercicio para el alumno. Del mismo modo, se pueden construir experimentos realizando mediciones a lo largo del eje yy, determinar vectores para +y|+y\rangle y y|-y\rangle, y finalmente obtener una expresión para SyS_y.

Juntando todos estos vectores y matrices, tenemos

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

Preguntas

Los profesores pueden solicitar versiones de estos cuadernos con claves de respuestas y orientaciones sobre su colocación en planes de estudios comunes rellenando esta rápida encuesta sobre cómo se están utilizando los cuadernos.

Conceptos fundamentales:

  • Para la partícula spin-1/2, una medición de la proyección del espín sobre algún eje sólo puede arrojar uno de dos resultados, a menudo denominados "arriba" y "abajo".
  • Los qubits sólo pueden medirse en uno de dos estados, a menudo denominados 0|0\rangle y 1|1\rangle.
  • Podemos modelizar el experimento de Stern-Gerlach sobre partículas spin-1/2 utilizando qubits en un ordenador cuántico.
  • Las mediciones repetidas del mismo observable físico de la misma partícula/qubit darán el mismo resultado (a menos que el sistema esté perturbado por ruido).
  • Podemos utilizar los resultados del experimento de Stern-Gerlach o de los experimentos análogos con ordenadores cuánticos para derivar un sistema de vectores de estado y operadores matriciales que describan el espín mecánico cuántico.

Preguntas de verdadero o falso:

  1. T/F Partiendo de observaciones experimentales, la única elección válida para un vector que represente |\uparrow\rangle es (10)\begin{pmatrix}1 \\ 0\end{pmatrix}
  2. T/F Si =(10)|\uparrow\rangle = \begin{pmatrix}1 \\ 0\end{pmatrix}, la única opción para |\downarrow\rangle es (01)\begin{pmatrix}0 \\ 1\end{pmatrix} (hasta una fase global).
  3. T/F Una partícula medida en el estado 0|0\rangle seguirá encontrándose en el estado 0|0\rangle en mediciones posteriores a lo largo de zz.
  4. T/F Una partícula medida en el estado 0|0\rangle seguirá encontrándose en el estado 0|0\rangle en mediciones posteriores a lo largo de xx.
  5. T/F Una partícula medida en el estado 0|0\rangle se encontrará siempre en el estado +x|+\rangle_x en mediciones posteriores a lo largo de xx.

Preguntas del moderador:

  1. ¿Qué probabilidad tiene una partícula inicialmente en |\uparrow\rangle de ser medida en el estado +x|+x\rangle?

    • a. 0 %
    • b. 25 %
    • c. 50 %
    • d. 71%
    • decir, 100 %
  2. ¿Qué probabilidad tiene una partícula inicialmente en |\uparrow\rangle de ser medida en el estado |\downarrow\rangle?

    • a. 0 %
    • b. 25 %
    • c. 50 %
    • d. 71%
    • decir, 100 %
  3. El estado |\uparrow\rangle de una partícula spin-1/2 es el más comúnmente asociado ¿con qué estado de computación cuántica?

    • a. +|+\rangle
    • b. |-\rangle
    • c. 0|0\rangle
    • d. 1|1\rangle
    • decir, Ninguno de los anteriores

Preguntas para el debate:

  1. Tres amigos discuten sobre mediciones y operadores cuánticos. El amigo A dice: "Hacer una medición a lo largo de zz y actuar con el operador σz\sigma_z son la misma cosa" El amigo B dice: "Bueno, son procedimientos diferentes, pero tienen el mismo resultado" El amigo C dice: "Son totalmente diferentes; incluso tienen efectos distintos en la mayoría de los estados" ¿Con quién está de acuerdo y por qué?

Problemas de respuesta libre:

  1. Dadas las observaciones experimentales y la sintaxis propuesta:

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

muestran que hasta una fase global

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

Elija α=0\alpha = 0 para obtener el resultado estándar.

  1. Dadas las observaciones experimentales y la sintaxis propuesta:

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

Y usando el resultado del problema 3:

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

muestran que hasta una fase global

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

Acuses de recibo

[1] Por Tatoute - Obra propia, CC BY-SA 4.0, https://commons.wikimedia.org/w/index.php?curid=34095239

¿Le ha resultado útil esta página?
Informe de un error, de una errata o solicite contenido en GitHub.