Skip to main content
IBM Quantum Platform

A experiência de Stern-Gerlach utilizando computadores quânticos

Para este módulo do Qiskit in Classrooms, os alunos devem ter um ambiente de trabalho Python com os seguintes pacotes instalados:

  • qiskit v2.1.0 ou mais recente
  • qiskit-ibm-runtime v0.40.1 ou mais recente
  • qiskit-aer v0.17.0 ou mais recente
  • qiskit.visualization
  • numpy
  • pylatexenc

Para configurar e instalar os pacotes acima, consulte o guia Instalar o Qiskit. Para executar trabalhos em computadores quânticos reais, os alunos precisarão configurar uma conta no IBM Quantum® seguindo as etapas do guia Configurar sua conta IBM Cloud.

Esse módulo foi testado e usou 2 segundos de tempo de QPU. Essa é apenas uma estimativa. Seu uso real pode 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'

Assista ao passo a passo do módulo pela Dra. Katie McCormick abaixo, ou clique aqui para assisti-lo em YouTube.



Segundo plano

No início dos anos 1900, as evidências de comportamento quantizado em escalas atômicas estavam aumentando. Muitas interpretações bem-sucedidas de dados, como a explicação de Max Planck sobre a catástrofe do ultravioleta, e experimentos como o de Otto Stern e Walther Gerlach foram fundamentais para convencer o mundo de que um sistema de mecânica quântica era necessário e que certos fenômenos físicos são quantizados. No caso do experimento Stern-Gerlach (concebido por Stern em 1921 e realizado por Stern e Gerlach em 1922), o objetivo era verificar a quantização do momento angular nos átomos.

Na mesma época, um modelo predominante para o átomo era o modelo de Bohr-Sommerfeld, que era uma extensão do modelo de Bohr e, assim como o modelo de Bohr, previa que os elétrons existiam em determinadas órbitas quantizadas, semelhantes às órbitas dos planetas em torno do sol.

Diagrama do modelo Bohr-Sommerfeld. Um ponto central representa o núcleo de um átomo. Círculos ou elipses ao redor desse ponto representam orbitais atômicos, muito parecidos com as órbitas planetárias ao redor do sol. As órbitas de maior energia estão mais distantes do núcleo.

Embora, no final das contas, esse tratamento tenha se mostrado insuficiente para explicar o comportamento mecânico quântico do átomo, em termos gerais, ele previu muitos fenômenos observados, como as linhas espectrais discretas dos átomos. As órbitas quantizadas de elétrons com energias específicas correspondem a valores quantizados de momento angular. Foi esse momento angular orbital que Stern e Gerlach procuraram observar em seu experimento, embora o experimento se aplique a qualquer tipo de momento angular quantizado, incluindo o spin. Você pode ouvir falar com frequência do experimento de Stern-Gerlach aplicado a spins. O foco do experimento original era o momento angular orbital simplesmente porque George Uhlenbeck e Samuel Goudsmit não teorizariam a existência do spin até 1925.

Independentemente do tipo de momento angular, uma carga com momento angular tem um momento magnético. No tratamento clássico do movimento orbital, seria de se esperar que uma partícula com carga qq, massa mm e momento angular L\vec{L} tivesse um momento magnético μ\mu dado por

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

Acontece que quase a mesma fórmula é válida para o momento angular da mecânica quântica, com a ressalva de adicionar uma razão numérica relacionada ao tipo de momento angular, chamada de fator g gg. Ao combinar diferentes tipos de momento angular ou generalizar para um tipo arbitrário, é comum ver J\vec{J} usado em vez de L\vec{L}, então escrevemos:

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

Para objetos clássicos, g=1g=1. Para elétrons, g2g\approx 2, e há muitos valores para vários núcleos e partículas subatômicas. O ponto principal aqui é que o momento angular quantizado significa um momento magnético quantizado!

Esse momento magnético sofrerá um torque em um campo magnético:

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

E ele sofrerá uma força em um campo magnético com um gradiente diferente de zero:

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

Geralmente, consideraremos a expressão acima em um componente de cada vez, portanto, pode ser conveniente pensar em seu componente zz :

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

Combinando as expressões, podemos obter

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

Stern e Gerlach não conheciam o fator gg, mas mesmo com ele na expressão, temos uma força igual a várias constantes conhecidas ou mensuráveis vezes um momento angular. Portanto, usando um campo magnético com um gradiente conhecido e medindo a deflexão de uma partícula à medida que ela passa pelo campo, devemos obter informações sobre o momento angular. Esse é o ponto crucial do experimento Stern-Gerlach.

Átomos de prata viajando por um campo magnético não homogêneo e sendo desviados para cima ou para baixo, dependendo do seu giro. Classicamente, esperaríamos uma distribuição contínua na tela, mas no experimento vemos dois pontos distintos.

Fig. Experimento Stern-Gerlach [1] : Átomos de prata viajando por um campo magnético não homogêneo e sendo desviados para cima ou para baixo, dependendo do seu spin. Classicamente, esperaríamos uma distribuição contínua na tela, mas no experimento vemos dois pontos distintos.

Os átomos de prata neutros foram aquecidos em um forno. À medida que um feixe de átomos de prata saía do forno, colimadores de feixe eram usados para selecionar apenas os átomos que viajavam perto do centro do campo magnético não homogêneo. É claro que alguns átomos se desviam um pouco para a esquerda ou para a direita e experimentam um gradiente mais fraco no campo, ou nenhum gradiente. Portanto, não estamos muito preocupados com o comportamento de átomos muito à esquerda ou à direita. Estamos interessados no que acontece com os átomos que se deslocam pelo centro do canal, onde o gradiente do campo magnético produzirá uma força que desvia os átomos somente na direção zz.

O que devemos esperar, classicamente?

Como esses átomos se comportariam se fossem exatamente como ímãs volumosos e clássicos? Você pode fazer o experimento. Imagine disparar pequenos ímãs de neodímio contra um ímã grande e potente. A orientação dos pequenos ímãs é aleatória. Porém, ao passarem pelo ímã grande, eles se reorientam rapidamente para se alinharem com o campo e são atraídos pelo ímã grande. A grande maioria dos ímãs minúsculos é desviada para o ímã grande. O observador mais astuto poderia perguntar: "E quanto à conservação de energia?"

De fato, um momento magnético em um campo magnético externo tem uma energia potencial associada a ele:

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

Portanto, se um momento magnético girasse no campo magnético externo, haveria uma mudança na energia dada por:

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

No caso especial de um pequeno ímã perfeitamente desalinhado com o campo externo, que se vira e se alinha com ele, isso corresponderia a uma diminuição na energia potencial:

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

Então, para onde vai essa energia? Um ímã clássico, como um pequeno ímã de neodímio de geladeira, tem muitas partículas e pode dissipar quase qualquer quantidade de energia como calor. Os ângulos inicial e final entre o momento magnético e o campo magnético externo podem ser quaisquer, e pelo menos a orientação inicial seria aleatória. Portanto, uma quantidade diferente de energia seria dissipada como calor para cada ímã minúsculo. Mas, classicamente, isso não é problema, pois um conjunto de partículas clássicas pode dissipar qualquer quantidade de energia como calor.

O que devemos esperar ao aplicar o pensamento clássico à escala atômica?

No mínimo, isso não é o mesmo para ímãs em escala atômica, porque há menos partículas em jogo, menos graus de liberdade pelos quais a energia pode ser dissipada. As propostas do início da mecânica quântica sugeriam ainda que a energia que pode ser absorvida por uma partícula individual, como o elétron, seria quantizada, o que significa que um elétron só poderia absorver algumas quantidades específicas de energia. Como as orientações iniciais aleatórias exigiriam a dissipação de quantidades aleatórias de energia, isso não deveria ser possível em um sistema com níveis de energia quantizados. O excesso de energia não podia ser dissipado como calor. Então, o que aconteceria em vez disso?

Verifique sua compreensão

Explique o que você acha que aconteceria em uma situação como a descrita acima. Ou seja, você tem um ímã atomicamente pequeno que não pode dissipar nenhuma energia como calor. Portanto, qualquer energia potencial magnética inicial deve permanecer no sistema. No entanto, um torque é aplicado por um campo magnético externo, que tenta girar o pequeno ímã para alinhá-lo com o campo externo. O que acontece?

  • O pequeno momento magnético giraria em direção ao alinhamento com o campo externo. Mas quando ele se alinha momentaneamente, ele teria energia cinética rotacional que o manteria girando além do campo e novamente fora de alinhamento. Esse comportamento pode ser observado até mesmo em grandes ímãs clássicos. Mas nesses sistemas clássicos, a oscilação do pequeno momento magnético acaba parando quando a energia é dissipada em calor. Mas em um sistema sem esse mecanismo dissipativo, a oscilação deve continuar indefinidamente.

Considerando o comportamento esperado na resposta acima, que distribuição de partículas magnéticas você esperaria ver na tela?

  • Uma distribuição suave de alguma deflexão máxima em direção ao lado mais forte do campo magnético (aquelas partículas que começaram alinhadas com o campo externo) até alguma deflexão máxima em direção ao lado mais fraco do campo (aquelas partículas que começaram desalinhadas com o campo externo) e todas as deflexões intermediárias, correspondentes a todas as orientações iniciais entre esses extremos.

    Diagrama de um feixe de partículas passando por um ímã. Eles são desviados em graus variados ao longo da direção do campo magnético. Portanto, quando atingem uma tela distante, formam uma linha.

O que a mecânica quântica preveria?

Talvez a mais estranha de todas as possibilidades seja a seguinte: E se o momento angular do elétron fosse quantizado, mas sua projeção em algum eixo também fosse quantizada? A quantização do momento angular como uma magnitude é interessante, mas pode-se tentar argumentar por meio da intuição clássica, da maneira como as órbitas planetárias se estabeleceram em trajetórias fixas que não se cruzam, tendo apenas determinados momentos angulares permitidos. Mas e se esse vetor de momento angular só pudesse apontar exatamente ao longo de zz ou exatamente oposto a zz, mas não tivesse nenhum outro componente ao longo de zz? E se, então, quando medido ao longo de uma direção diferente, o vetor só pudesse apontar inteiramente ao longo de xx ou inteiramente oposto a xx, e nada no meio? Isso seria estranho de uma forma que confunde toda a intuição clássica.

Verifique sua compreensão

Que tipo de distribuição de partículas em uma tela você esperaria encontrar nesse último caso, em que a projeção do momento angular ao longo da direção do campo é quantizada? Sinta-se à vontade para considerar apenas as partículas que passam perfeitamente pelo centro do dispositivo ou incluir aquelas que se desviam ligeiramente do centro para onde o gradiente é mais fraco. Apenas seja explícito.

  • As partículas no centro do dispositivo experimentariam um único campo não homogêneo e todas seriam medidas para ter uma de duas orientações para seus momentos magnéticos. Portanto, eles seriam desviados ao máximo com o gradiente ou ao máximo contra o gradiente, e nada no meio. É claro que, em ambos os lados, onde o gradiente é mais fraco, a deflexão seria menor. Em posições laterais muito grandes, elas podem estar totalmente fora do gradiente, e pode haver apenas uma única região de partículas não desviadas.

    Diagrama de um feixe de partículas sendo desviado para cima ou para baixo, atingindo um dos dois pontos em uma tela, sem partículas entre esses dois máximos

Como os qubits nos ajudarão a testar isso?

A maioria dos computadores quânticos usa "qubits" - os análogos quânticos dos bits clássicos. Mais especificamente, eles foram projetados para serem sistemas de dois níveis, análogos aos estados "ligado"/"desligado" dos bits clássicos. Existem paradigmas de computação quântica que usam sistemas de três níveis (chamados de "qutrits") ou sistemas de muitos níveis (chamados de "qudits"). Mas a maior parte do trabalho está concentrada em qubits. Em particular, os computadores quânticos IBM® usam o que é chamado de qubits de transmônio de frequência fixa. Eles são bem diferentes do momento angular orbital ou de rotação dos átomos. Mas, assim como o spin de um elétron, os qubits do IBM® são sistemas mecânicos quânticos que podem interagir com a luz e nos quais podem ser feitas medições. De fato, é comum encontrar analogias entre estados de spin da mecânica quântica e estados computacionais de um qubit. Por exemplo, é comum ver o estado "spin-up" associado ao estado 0 computacional e o "spin-down" associado ao estado 1 computacional:

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

Podemos usar essas semelhanças para observar o comportamento da mecânica quântica nos computadores IBM quânticos que imitam o comportamento da mecânica quântica do momento angular orbital ou de spin nos átomos. Faremos observações semelhantes usando combinações lineares desses estados que nos permitem estender a discussão ao momento angular em qualquer direção.


Primeira experiência: uma única medição

Neste primeiro experimento e em todo o módulo, usaremos uma estrutura para computação quântica conhecida como "padrões Qiskit", que divide os fluxos de trabalho nas seguintes etapas:

  • Etapa 1: mapear entradas clássicas para um problema quântico
  • Etapa 2: otimizar o problema para a execução quântica
  • Etapa 3: Executar usando as primitivas d IBM Quantum
  • Etapa 4: Pós-processamento e análise clássica

Em geral, seguiremos essas etapas, embora nem sempre possamos rotulá-las explicitamente.

Passo 1: Mapear entradas clássicas para um problema quântico

Aqui, as entradas clássicas são orientações de um spin antes da medição em um dispositivo Stern-Gerlach. Não se preocupe muito com a natureza exata do estado quântico antes da medição. Esse é o assunto de outro módulo do Qiskit Classrooms, sobre o teorema de Bell.

Observe que os computadores quânticos IBM medem os estados ao longo do eixo zz. Portanto, este primeiro experimento será muito parecido com o experimento de Stern-Gerlach com o gradiente de campo magnético ao longo de zz. Mais tarde, veremos como alterar o sistema para medir em diferentes direções.

Vamos começar fazendo o análogo de um estado de spin, ou seja, uma mistura de |\uparrow\rangle e |\downarrow\rangle ou, de forma equivalente, de 0|0\rangle e 1|1\rangle. Propusemos alguns valores iniciais. Mas fique à vontade para brincar com outros valores ou até mesmo com valores aleatórios.

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

Agora usaremos os ângulos acima como parâmetros em um circuito quântico. Estamos considerando apenas uma partícula de cada vez, portanto, usaremos apenas um qubit em nosso circuito e precisaremos de apenas um registro clássico.

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

Etapa 2: Otimizar o problema para execução quântica

Para realizar nosso experimento em um computador quântico real, precisamos carregar o Serviço de Computaçã IBM Quantum e selecionar um computador quântico (ou um “backend”). A seguir, simplesmente selecionamos o computador quântico menos ocupado que temos à disposição.

Há um código abaixo para salvar suas credenciais na primeira utilização. Certifique-se de excluir essas informações do notebook depois de salvá-lo em seu ambiente, para que suas credenciais não sejam compartilhadas acidentalmente quando você compartilhar o notebook. Consulte Configurar sua conta IBM Cloud e Inicializar o serviço em um ambiente não confiável para obter mais orientações.

# 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

Agora precisamos transpilar o circuito, o que significa que devemos mapear nosso circuito nas portas de base disponíveis para o computador quântico escolhido, e queremos otimizar nosso circuito para ser executado nesse computador quâ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)

Etapa 3: Executar usando as primitivas d IBM Quantum

Agora queremos executar isso em um computador quântico real. Toda a sintaxe necessária para isso está no bloco de código abaixo. Se você tiver esgotado o tempo alocado em computadores quânticos reais ou se estiver sem conexão com a Internet, poderá descomentar o próximo bloco de código, que executará o código em um 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()

Use o código abaixo se não conseguir executar o experimento em um computador quâ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()

Etapa 4: Pós-processamento e análise clássica

Para esse experimento muito simples, a análise clássica consiste apenas em visualizar o resultado do experimento.

from qiskit.visualization import plot_histogram

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

Output:

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

Fizemos uma medição e obtivemos "0". Isso não é nenhuma surpresa para nós. Sabemos que estamos usando um computador quântico composto de qubits e estamos muito acostumados com bits clássicos que retornam um 0 ou um 1. Mas tenha em mente: esse é o análogo da computação quântica dos experimentos feitos com partículas com momentos magnéticos. Se tivéssemos esperado uma distribuição uniforme entre 0 e +1, talvez tivéssemos ficado surpresos com o fato de termos obtido um extremo em nossa primeira medição. Foi essa surpreendente quantização dos resultados do experimento Stern-Gerlach que nos levou a uma melhor compreensão da natureza e que, por sua vez, nos ajudou a construir computadores quânticos.

Vamos ver o que acontece quando fazemos um conjunto de medições.


Segundo experimento: Medindo muitas partículas

Para coletar estatísticas sobre muitas dessas medições, não é necessário repetir as etapas 1 e 2. Podemos simplesmente aumentar o número de disparos em nosso experimento. Sinta-se à vontade para brincar com o número de disparos no exemplo da etapa 3 abaixo.

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, se não for possível executar em um computador quântico real, descomente o bloco acima do primeiro experimento e simplesmente altere num_shots = 1 para num_shots = 100 ou mais.

plot_histogram(counts)

Output:

Output of the previous code cell

Vemos que às vezes medimos 0 e às vezes medimos 1. Observe que nunca medimos mais nada! Você pode alterar o número de disparos e observar que a probabilidade de medir 0 ou 1 parece ser bastante consistente entre diferentes execuções com diferentes números de disparos. Portanto, algo sobre a preparação do estado parece estar determinando a probabilidade dos resultados da medição, embora qualquer medição possa resultar em 0 ou 1.


Terceira experiência: giros aleatórios em um forno

No experimento Stern-Gerlach, os pesquisadores não conseguiram especificar um ângulo no qual um vetor de momento angular emergiria do forno. As orientações eram aleatórias (ou algo ainda mais misterioso! Consulte o módulo do Qiskit Classroom sobre o teorema de Bell). Um análogo razoável desse experimento seria inicializarmos aleatoriamente os estados do nosso qubit e fazermos medições várias vezes.

Passo 1: Mapear entradas clássicas para um problema quântico

O circuito que queremos construir é o mesmo de antes. A única diferença é que, desta vez, construiremos o circuito usando portas com parâmetros livres θ\theta e ϕ\phi. Os valores numéricos desses parâmetros serão então atribuídos a cada nova execução.

# 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

Executar um circuito quântico em apenas uma única tentativa e fazê-lo para muitas configurações aleatórias é um fluxo de trabalho incomum para um computador quântico. Isso certamente pode ser feito, mas, para simplificar, usaremos um simulador local aqui.

# 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

Assim, vemos que o estado inicial aleatório dos qubits (correspondente às orientações aleatórias do momento angular em um experimento de Stern-Gerlach) produz números semelhantes de estados 0 e 1 (como números semelhantes de estados de spin up e spin down). Isso é exatamente o que o experimento original de Stern-Gerlach demonstrou.


Quarta experiência: medições repetidas

Quando um qubit começa em um estado aleatório, vemos que há uma chance aproximada de 50-50 de medir um extremo em vez do outro. Mas o que acontece com o estado do qubit (ou com o momento angular da partícula) após a medição? Para responder a isso, precisaremos definir um circuito que nos permita fazer várias medições dos mesmos qubits. Vamos definir um circuito que podemos usar para investigar isso. Queremos permitir a possibilidade de medir ambos os estados 0|0\rangle e 1|1\rangle, portanto, precisamos de algo para girar o estado inicial do qubit para fora do estado padrão 0|0\rangle. Nesse caso, usaremos uma porta hadamard HH, pois H0=12(0+1)H|0\rangle = \frac{1}{\sqrt{2}}(|0\rangle+|1\rangle). Observe que, por padrão, ambas as medições serão feitas ao longo 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

Na figura acima, os compartimentos são rotulados como "00", "01" e assim por diante. Aqui, esses números se referem ao "2º resultado, 1º resultado". Portanto, "00" significa que ambas as medições produziram o estado 0|0\rangle, e "01" significa que a primeira medição produziu 1|1\rangle e a segunda produziu 0|0\rangle. A grande maioria dos qubits foi medida duas vezes para estar em 0|0\rangle ou duas vezes para estar em 1|1\rangle. Era muito raro que os qubits fossem medidos em um estado e depois medidos em outro estado, e os poucos casos em que isso aconteceu (~1%) se devem ao ruído. Nesse caso, esse ruído foi simulado de acordo com o comportamento do sistema quântico real. Essa correlação observada entre medições sucessivas também é observada em medições do tipo Stern-Gerlach de partículas com momento angular de spin. Se uma partícula for medida para ser "spin-up", uma medição subsequente logo depois disso produzirá novamente "spin-up" (até uma pequena variação devido ao ruído).

Isso pode parecer trivial. Afinal de contas, se um qubit é medido em um estado e, em seguida, eu o meço novamente, rapidamente, por que ele ainda não estaria nesse estado? Mas se realmente nos apegarmos a essa sutileza, ela poderá nos ajudar a selecionar algumas ferramentas matemáticas para descrever esse fenômeno.


Análise das experiências realizadas até o momento

Vamos coletar algumas observações de nossos experimentos até agora:

  • A medição de um sistema mecânico quântico produzirá apenas um de um conjunto de "valores permitidos". Para sistemas de dois níveis, como qubits ou spin-1/2 partículas, uma medição produzirá apenas um dos resultados binários.
  • Quando inicializamos aleatoriamente o estado do nosso sistema binário (como spin-1/2 partículas emergindo de um forno), qualquer um dos resultados da medição binária é possível.
  • Depois que uma medição é feita e o estado do sistema é conhecido, repetir a medição do mesmo observável físico não altera o estado! Ou seja, se obtivermos o estado 0 uma vez, quando medirmos novamente, ele ainda estará no estado 0 (até um pequeno ruído no sistema ~0.1 % a 1%).

Observe explicitamente que ainda não abordamos a natureza probabilística da mecânica quântica, nem dissemos nada sobre "colapsar" o estado em um estado próprio. Usando apenas as observações acima, pode ser tentador procurar uma operação matemática OO que deixe algum conjunto especial de estados mecânicos quânticos ψ|\psi\rangle inalterado até, talvez, uma constante: Oψ=cψO|\psi\rangle = c|\psi \rangle, já que medir ao longo de zz duas vezes produz o mesmo resultado. Em última análise, essa pesquisa não conseguirá descrever todos os comportamentos que veremos. Mas ela pode descrever algumas coisas, portanto, vamos continuar a analisá-la um pouco mais.

Essa operação existe de fato. A operação da matriz em alguns vetores altera os vetores, e a operação da matriz em outros vetores (vetores próprios) deixa o vetor inalterado até uma constante. Considere, por exemplo, a matriz MM e o vetor v|v\rangle, onde

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

e

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

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

Mas para outros vetores, como v=(12)|v'\rangle = \begin{pmatrix} 1\\2\end{pmatrix}, temos

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 tentar descrever o spin de uma partícula usando uma matriz e podemos tentar descrever os estados das partículas após a medição usando um vetor, chamado de "vetor de estado". Não é nada óbvio quais valores devem ser incluídos nessa matriz ou vetor de estado, mas a única propriedade que temos das medições até agora que poderíamos usar para rotular os estados seria a probabilidade de medir 0 ou 1 ("spin-up" ou "spin-down" no contexto das spin-1/2 partículas). Devemos considerar que as entradas nos vetores de estado devem estar relacionadas a essa probabilidade (exatamente a probabilidade, "amplitude da probabilidade" - o que significa que elevamos a entrada ao quadrado para obter a probabilidade, e assim por diante). Mas, neste momento, não temos certeza se as entradas nessas matrizes devem ser estritamente reais, complexas ou o quê. Por segurança, vamos tentar desenvolver uma estrutura na qual os vetores e as matrizes satisfaçam o seguinte:

  • Os operadores de matriz estão conectados para experimentar o máximo possível. Por exemplo, poderíamos associar os valores próprios de uma matriz de spin com as projeções de spin observadas experimentalmente.
  • Os vetores de estado devem ser conectados à probabilidade da seguinte forma: Se uma partícula estiver no vetor de estado A|A\rangle, a probabilidade de que uma medição subsequente encontre a partícula no estado B|B\rangle é PABAB2P_{AB}\equiv |\langle A| B \rangle|^2.

Isso nos dá muita liberdade para desenvolver nossas primeiras matrizes. Por exemplo, poderíamos tentar ingenuamente

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

Aqui, o 0|0\rangle \sim |\uparrow\rangle significa que há estados em computadores quânticos e em sistemas spin-1/2 que são muito semelhantes e são frequentemente mapeados uns aos outros. Obviamente, eles não são exatamente iguais, pois se referem a sistemas diferentes. Mas a álgebra que descreve esses sistemas de dois estados poderia estar em conformidade com as mesmas regras (alerta de spoiler: eles estão!). Observe que essa escolha aleatória já tem um atributo interessante. Note 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.

Ou seja, se uma partícula já estiver no estado 0|0\rangle, a probabilidade de que uma medição subsequente também produza 0|0\rangle é de 1 (exceto efeitos de ruído). Isso é excelente, pois já vimos que, uma vez que um estado está no estado 0 ou "spin-up", ele permanece lá na medição subsequente. A probabilidade acima deve ser de fato 100%.

Verifique sua compreensão

Por que a

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

uma opção melhor do que, por exemplo,

0=(20)?|0\rangle = \begin{pmatrix} 2 \\0 \end{pmatrix}?
  • Nossa tentativa de associar a probabilidade de uma medição com o produto interno ao quadrado significa que precisamos que a magnitude de cada vetor seja 1. Ou seja, vv2=1|\langle v|v\rangle|^2 = 1 para todos os v|v\rangle, já que a probabilidade de uma coisa no estado v|v\rangle estar no estado v|v\rangle é de 100%. Isso é conhecido como a "condição de normalização".

Por que a

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

uma opção melhor do que, por exemplo,

0=(01)?|0\rangle = \begin{pmatrix} 0 \\1 \end{pmatrix}?
  • Não é. Não há motivo para escolhermos inicialmente 0=(10)|0\rangle = \begin{pmatrix} 1 \\0 \end{pmatrix}. Pelo contrário, trata-se de uma convenção. No entanto, quando fazemos essa escolha, ela impõe certas restrições às escolhas subsequentes. Veja abaixo.

Lembre-se de que, nos experimentos acima, descobrimos que um qubit inicialmente em um estado 0|0\rangle permaneceu nesse estado após a medição subsequente. O mesmo se aplica a 1|1\rangle. Isso significa que um qubit que está em 0|0\rangle tem probabilidade zero de ser medido no estado 1|1\rangle (exceto pelos efeitos do ruído). Nossa conexão necessária entre produtos internos e probabilidades de medições nos diz que

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

Sem perda de generalidade, podemos escrever o vetor de estado 1=(ab)|1\rangle = \begin{pmatrix} a \\ b \end{pmatrix}. Então, podemos escrever

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.

A exigência de que P11=1P_{11} = 1, a chamada "condição de normalização", nos diz que b2=1|b|^2=1. Isso, por si só, só nos limita a b=eiϕb=e^{i\phi} para ϕR\phi \in \mathbb{R}. Acontece que há outros motivos para escolher b=1b=1 que estão além desta introdução ao tópico. Por enquanto, basta dizer que b=1b=1 é uma solução aceitável.

Já avançamos bastante em nossa análise. A escolha de uma forma para nossos vetores de estado nos permite construir uma matriz que descreve algo sobre os fenômenos físicos em ação aqui. Em particular, como o experimento original de Stern-Gerlach mediu uma divisão de trajetórias com base em componentes de momento angular de spin ao longo do eixo zz, gostaríamos de um operador que descrevesse exatamente isso: SzS_z. Outra conexão importante com o experimento é que, a partir da quantidade de deflexão, do tempo de viagem e da intensidade do campo magnético conhecido, podemos determinar a magnitude do componente zz de spin. Embora isso exija muitas suposições sobre a precisão da configuração experimental, aqui simplesmente reiteraremos que as componentes z medidas do momento angular do spin são ±/2\pm \hbar/2.

Então, estamos buscando uma matriz com valores próprios reais (satisfeitos por matrizes hermitianas) com valores próprios correspondentes a esses componentes de spin observados experimentalmente. Sem perda de generalidade, podemos escrever Sz=(s11s12s21s22)S_z = \begin{pmatrix} s_{11} & s_{12} \\ s_{21} & s_{22}\end{pmatrix}, e 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 e retirando o fator geral de /2\hbar/2, temos

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

Esse é o conhecido operador spin-z encontrado em todos os livros didáticos de mecânica quântica. Geralmente, isso é visto com o /2\hbar/2 removido e, nesse caso, é o operador "Pauli-z", normalmente denotado como σz\sigma_z :

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

Isso é útil, pois esse operador de Pauli (e as matrizes relacionadas) pode descrever muitos sistemas físicos que envolvem dois níveis ou dois resultados possíveis de medição, incluindo estados de qubits de transmônio em um computador quântico.

Antes de abordarmos outras operadoras e estados relacionados a essa, devemos tratar de um fato que muitas pessoas entendem errado. A ação do operador não é o mesmo que a medição. Em certo sentido, você pode dizer: "Claro que não! Um acontece no papel, como parte de um cálculo matemático, e o outro acontece em um laboratório, em sistemas físicos." Sim, isso é verdade, mas é mais do que isso. Fazer uma medição do componente zz do spin sempre produzirá um estado de "spin-up" ou "spin-down", independentemente do estado inicial do sistema. Vimos isso com os análogos da computação quântica 0|0\rangle e 1|1\rangle. Inicializamos os estados para que estivessem em centenas de orientações aleatórias, e as medições sempre resultaram em 0|0\rangle ou 1|1\rangle. Isso é conhecido como "colapso do estado" de medição para um estado próprio. Isso não acontece quando você aplica uma matriz a um estado. Experimente as perguntas abaixo para explorar isso.

Verifique sua compreensão

Suponha que você comece com uma partícula em um estado de spin

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

(a) O que você obtém se agir com o operador SzS_z nesse vetor de estado? (b) O que você obterá se fizer uma única medição do componente zz de spin dessa partícula? (c) O que você obterá se preparar muitas partículas idênticas a esse estado e fizer milhares de medições do componente zz do spin?

  • (a) Você obtém

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

    É isso. Não há resultado experimental. Basta aplicar a matriz ao vetor para obter um vetor ligeiramente diferente, que agora tem um novo sinal "-" e não tem mais uma magnitude de 1, pois tem um pré-fator /2\hbar/2.

    (b) Você obterá |\uparrow\rangle ou |\downarrow\rangle. Isso corresponde a observar uma projeção de spin no eixo zz de /2\hbar/2 ou /2-\hbar/2, respectivamente. Também podemos determinar a probabilidade de cada resultado, já 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}

    Portanto, embora o estado de spin-up seja 20% mais provável, qualquer um dos resultados é possível, e só obteremos um desses dois estados.

    (c) Aproximadamente 60% das medições produzirão partículas de spin-up e aproximadamente 40% das medições produzirão partículas de spin-down, de acordo com as probabilidades de medição calculadas na parte (b).

Verifique as respostas das partes (b) e (c) da questão anterior usando a analogia entre os estados de spin-up de um átomo e os estados de qubit:

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

Codifique os circuitos quânticos para criar o estado inicial desejado e, em seguida, use um hardware real ou um simulador para verificar os resultados de uma única medição e de um conjunto de centenas ou até milhares de medições.

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

Quinta experiência: Medindo diferentes observáveis

Até o momento, fizemos apenas medições ao longo do eixo z. Em um experimento de Stern-Gerlach, se quiséssemos medir ao longo, por exemplo, do eixo x, simplesmente orientaríamos o campo magnético não homogêneo para apontar ao longo do eixo xx e procuraríamos deflexões ao longo de xx na tela. IBM os computadores quânticos, entretanto, são projetados para fazer medições em apenas um eixo ( zz ). Para medir um estado ao longo de xx, precisamos realizar uma "mudança de base". Isso significa que devemos realizar uma operação que leve os estados ao longo de xx na esfera de Bloch para zz, e vice-versa. Há algumas formas de implementar isso, mas a forma preferida é uma porta Hadamard:

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

Verifique sua compreensão

Mostre que H0=+xH|0\rangle = |+\rangle_x e 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

Mostre que H1=xH|1\rangle = |-\rangle_x e 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

Esse circuito gira nosso sistema de modo que as medições (ao longo de zz ) nos informam sobre as características do xx antes da rotação. Já sabemos que o computador quântico inicializa os estados em 0|0\rangle, que corresponde a |\uparrow\rangle. Vamos ver o que acontece quando medimos a projeção do spin ao longo de xx para um estado inicialmente em |\uparrow\rangle. Mostramos essa etapa em um simulador para incentivá-lo a explorar as estatísticas de outros circuitos com diferentes inicializações.

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}

Isso nos mostra que, para um qubit inicialmente em 0|0\rangle (ou equivalentemente, um spin no |\uparrow\rangle ), a probabilidade de medir uma projeção ao longo de +x+x ou x-x é de aproximadamente 50-50. Em alguns aspectos, isso faz todo o sentido. Afinal, se algo estivesse apontando na direção z, não teria nenhuma preferência especial por ±x\pm x. Podemos esperar que o mesmo seja verdade se começarmos com o estado 1|1\rangle (ou |\downarrow\rangle ). Vamos verificar:

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

Sim! Novamente, encontramos uma probabilidade de 50-50 de medir uma projeção ao longo de ±x\pm x. Em analogia com as medições ao longo de zz, podemos suspeitar ainda que uma partícula que entra em colapso em um estado definitivamente ao longo de +x+x pode ter probabilidade zero de ser medida posteriormente ao longo de x-x. Vamos verificar:

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 esperado, obtemos resultados nos quais a projeção está ao longo de +x+x e, posteriormente, novamente ao longo de +x+x, e temos resultados nos quais a projeção está inicialmente ao longo de x-x e, posteriormente, novamente ao longo de x-x. Não observamos casos em que a projeção muda de +x+x para x-x ou vice-versa. Podemos coletar nossas observações e usá-las para desenvolver outros operadores em formas de matriz e outros vetores de estado.

Nós sabemos:

  • Os estados com projeções definidas ao longo de +z+z ou z-z têm 50% de chance de ter uma projeção ao longo de +x+x e 50% de chance de ter uma projeção ao longo de x-x.
  • Os estados com uma projeção definida ao longo de +x+x têm zero chance de, mais tarde, serem descobertos com uma projeção ao longo de x-x, e vice-versa.

Podemos usar esses resultados para construir estados com uma projeção definida e positiva ao longo de xx (que chamamos de +x|+x\rangle ) e aqueles com projeção definida e negativa ao longo de xx (que chamamos de x|-x\rangle ). A partir desses estados, podemos construir a matriz correspondente a SxS_x, exatamente como fizemos para SzS_z. Deixamos isso como exercício para o aluno. Da mesma forma, é possível construir experimentos que façam medições ao longo do eixo yy, determinar vetores para +y|+y\rangle e y|-y\rangle e, por fim, obter uma expressão para SyS_y.

Juntando todos esses vetores e matrizes, temos

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

Perguntas

Os instrutores podem solicitar versões desses cadernos com chaves de resposta e orientação sobre a colocação em currículos comuns preenchendo esta pesquisa rápida sobre como os cadernos estão sendo usados.

Conceitos críticos:

  • Para spin-1/2 partículas, uma medição da projeção do spin em algum eixo só pode produzir um de dois resultados, geralmente chamados de "para cima" e "para baixo".
  • Os Qubits só podem ser medidos em um de dois estados, geralmente chamados de 0|0\rangle e 1|1\rangle.
  • Podemos modelar o experimento Stern-Gerlach em spin-1/2 partículas usando qubits em um computador quântico.
  • Medições repetidas do mesmo observável físico da mesma partícula/qubit produzirão o mesmo resultado (a menos que o sistema seja perturbado por ruído).
  • Podemos usar os resultados do experimento Stern-Gerlach ou de experimentos análogos com computadores quânticos para derivar um sistema de vetores de estado e operadores de matriz que descrevem o spin mecânico quântico.

Questões verdadeiro/falso:

  1. T/F A partir de observações experimentais, a única opção válida de um vetor para representar |\uparrow\rangle é (10)\begin{pmatrix}1 \\ 0\end{pmatrix}
  2. T/F Se =(10)|\uparrow\rangle = \begin{pmatrix}1 \\ 0\end{pmatrix}, a única opção para |\downarrow\rangle é (01)\begin{pmatrix}0 \\ 1\end{pmatrix} (até uma fase global).
  3. T/F Uma partícula medida para estar no estado 0|0\rangle continuará a ser encontrada no estado 0|0\rangle em medições subsequentes ao longo de zz.
  4. T/F Uma partícula medida para estar no estado 0|0\rangle continuará a ser encontrada no estado 0|0\rangle em medições subsequentes ao longo de xx.
  5. T/F Uma partícula medida para estar no estado 0|0\rangle sempre será encontrada no estado +x|+\rangle_x em medições subsequentes ao longo de xx.

Perguntas do MC:

  1. Uma partícula inicialmente em |\uparrow\rangle tem qual probabilidade de ser medida no estado +x|+x\rangle?

    • a. 0%
    • b. 25%
    • c. 50%
    • d. 71%
    • e. 100%
  2. Uma partícula inicialmente em |\uparrow\rangle tem qual probabilidade de ser medida no estado |\downarrow\rangle?

    • a. 0%
    • b. 25%
    • c. 50%
    • d. 71%
    • e. 100%
  3. O estado |\uparrow\rangle de uma partícula spin-1/2 é mais comumente associado a qual estado de computação quântica?

    • a. +|+\rangle
    • b. |-\rangle
    • c. 0|0\rangle
    • d. 1|1\rangle
    • e. Nenhuma das opções acima

Questões para discussão:

  1. Três amigos estão discutindo medições e operadores quânticos. O amigo A diz: "Fazer uma medição em zz e agir com o operador σz\sigma_z são a mesma coisa." O amigo B diz: "Bem, são procedimentos diferentes, mas têm o mesmo resultado" O amigo C diz: "Eles são totalmente diferentes; eles até têm efeitos diferentes na maioria dos estados" Com quem você concorda e por quê?

Problemas de resposta livre:

  1. Considerando as observações experimentais e a sintaxe proposta:

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}

mostram que, até uma fase global

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

Escolha α=0\alpha = 0 para obter o resultado padrão.

  1. Considerando as observações experimentais e a sintaxe proposta:

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}

E usando o resultado do problema do desafio 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

mostram que, até uma fase global

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

Reconhecimento

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

Esta página foi útil?
Relate um bug, erro de digitação ou solicite conteúdo no GitHub.