Transformada de Fourier cuántica
Para este módulo de Qiskit en las aulas, los estudiantes deben tener un entorno Python en funcionamiento con los siguientes paquetes instalados:
qiskitv2.1.0 o más recienteqiskit-ibm-runtimev0.40.1 o más recienteqiskit-aerv0.17.0 o más recienteqiskit.visualizationnumpypylatexenc
Para configurar e instalar los paquetes anteriores, consulta la guía Instalar Qiskit. Para ejecutar trabajos en ordenadores cuánticos reales, los estudiantes deberán crear una cuenta en IBM Quantum® siguiendo los pasos de la guía Configure su cuenta en IBM Cloud.
Este módulo fue probado y utilizó 13 segundos de tiempo QPU. Se trata de una estimación de buena fe; 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'Introducción
La transformada de Fourier es una herramienta omnipresente con aplicaciones en matemáticas, física, procesamiento de señales, compresión de datos y otros innumerables campos. Una versión cuántica de la transformada de Fourier, acertadamente denominada transformada cuántica de Fourier, constituye la base de algunos de los algoritmos cuánticos más importantes.
Hoy, tras un recordatorio de la transformada de Fourier clásica, hablaremos de cómo implementar la transformada de Fourier cuántica en un ordenador cuántico. A continuación, hablaremos de una de las aplicaciones de la transformada cuántica de Fourier a un algoritmo llamado algoritmo de estimación de fase. La estimación cuántica de fase es una subrutina del famoso algoritmo de factorización de Shor, al que a veces se hace referencia como la "joya de la corona" de la computación cuántica. Este módulo se basa en otro módulo sobre el algoritmo de Shor, pero también puede utilizarse de forma independiente. La transformada cuántica de Fourier es un algoritmo fascinante y útil por derecho propio
La transformada de Fourier clásica
Antes de pasar a la transformada cuántica de Fourier, recordemos la versión clásica. La transformada de Fourier es un método de transformación de una "base" a otra. Se puede pensar en dos bases como diferentes perspectivas del mismo problema: ambas son formas válidas de expresar una función, pero una u otra pueden ser más esclarecedoras, dependiendo del problema que se trate. Algunos ejemplos de pares de bases que se conectan mediante la transformada de Fourier son la posición y el momento, y el tiempo y la frecuencia.
Veamos un ejemplo de cómo la transformada de Fourier puede ayudarnos a averiguar qué nota está tocando un instrumento basándonos en su forma de onda de audio. Normalmente, vemos las formas de onda representadas en base temporal, es decir, la amplitud de la onda se expresa en función del tiempo.
Podemos transformar de Fourier esta forma de onda para pasar de la base temporal a la base frecuencial:
En la base de frecuencia, podemos ver fácilmente un pico claro en torno a 260 Hz. ¡Eso es un do central!
Ahora bien, es posible que haya podido determinar que se estaba tocando un Do central sin utilizar una transformada de Fourier, pero ¿qué ocurre si se tocan varias notas a la vez? Entonces, la forma de onda se complica cuando la trazamos en base temporal:
Pero el espectro de frecuencias identifica claramente tres picos:
Se trataba de un acorde de Do mayor, tocando las notas Do, Mi y Sol.
Este tipo de análisis de Fourier puede ayudarnos a extraer los componentes de frecuencia de cualquier tipo de señal complicada.
Transformada discreta de Fourier
La transformada de Fourier es útil para numerosas aplicaciones de tratamiento de señales. Pero en la mayoría de estas aplicaciones del mundo real (incluido el ejemplo de la música que hemos utilizado antes), queremos transformar un conjunto discreto de puntos de datos , no una función continua. En este caso, utilizamos la transformada discreta de Fourier. La transformada discreta de Fourier (DFT) actúa sobre un vector y lo mapea al vector según la fórmula:
donde tomamos . (Tenga en cuenta que hay otras convenciones que tienen un signo menos en el exponencial, así que tenga cuidado cuando vea la DFT en la naturaleza) Recordemos que es una función periódica, con período . Por tanto, al multiplicar por esta función, la transformada de Fourier es esencialmente una forma de descomponer la función (discreta) en una combinación lineal de sus funciones periódicas constituyentes, cada una con periodo .
La transformada de Fourier cuántica
Ya hemos visto cómo se utiliza la transformada de Fourier para representar una función como combinación lineal de un nuevo conjunto de las llamadas "funciones base" Las transformaciones de base también se realizan regularmente en los estados qubit. Por ejemplo, el estado de un único qubit puede expresarse en la base computacional , con estados de base y , o en la base con estados de base y . Ambas son igualmente válidas, pero una puede ser más natural que la otra, dependiendo del tipo de problema que se intente resolver.
Los estados Qubit también pueden expresarse en la base de Fourier, donde un estado se expresa en términos de una combinación lineal de los estados de la base de Fourier , en lugar de los estados habituales de la base computacional, . Para ello, es necesario aplicar una transformada cuántica de Fourier (QFT):
con como arriba, y es el número de estados básicos en su sistema cuántico. Tenga en cuenta que, dado que ahora estamos trabajando con qubits, qubits le da estados básicos, por lo que . Aquí, los estados básicos se escriben como un solo número donde varía de a , pero es más habitual ver los estados básicos expresados como , , ,..., , donde cada dígito binario representa el estado del qubit 0 a , de derecha a izquierda. Hay una forma fácil de convertir estos estados binarios en un solo número: ¡simplemente trátalos como números binarios! Por lo tanto, , , , , y así sucesivamente, hasta .
Desarrollar la intuición para los estados básicos de Fourier
Así pues, acabamos de repasar qué son los estados base computacionales y cómo se ordenan: son el conjunto de estados en los que cada qubit está en o , y los ordenamos desde el estado en el que todos los qubits están en , , hasta el estado en el que todos están en , .
Pero, ¿cómo dar sentido a los estados de la base de Fourier? Todos los estados de la base de Fourier son superposiciones iguales de todos los estados de la base computacional, pero cada estado difiere del otro en la periodicidad en la fase de los componentes. Para entenderlo más concretamente, veamos los cuatro estados de la base de Fourier de un sistema de dos qubits. El estado de Fourier más bajo es aquel cuya fase no varía en absoluto:
Podemos visualizar este estado trazando la amplitud compleja de cada uno de los términos. La línea roja guía al ojo para mostrarle cómo la fase de esta amplitud serpentea por el plano complejo en función del estado base de cálculo. Para , la fase permanece constante:
El siguiente estado de la base de Fourier es aquel cuyas fases de los componentes giran de a una sola vez:
Y podemos ver esta sinuosidad en el gráfico de la amplitud compleja frente al estado base computacional:
Así, cada estado tiene una fase que es radianes mayor que el estado que le precede cuando se ordenan de la forma estándar, ya que en este ejemplo tenemos cuatro estados base ( ). El siguiente estado base gira de 0 a 2 dos veces:
Por último, la componente de Fourier más alta es la que varía más rápidamente de fase. Para nuestro ejemplo con dos qubits, es aquel cuyas fases dan tres vueltas de 0 a :
En general, para un estado de qubit e , habrá e es estados de base de Fourier, cuya frecuencia en la variación de fase varía desde constante, para , hasta rápidamente variable para , completando vueltas alrededor de sobre la superposición de estados. Por lo tanto, cuando tomamos una QFT de un estado cuántico, esencialmente estamos haciendo el mismo análisis básico que hicimos para la forma de onda musical en la introducción. Estamos determinando los componentes de frecuencia de Fourier que contribuyen a crear el estado cuántico de interés.
Prueba algunos ejemplos de QFT
Intentemos seguir construyendo nuestra intuición para la transformada cuántica de Fourier haciendo un estado en la base computacional, y luego viendo qué ocurre cuando le aplicamos la QFT. Por ahora, nos limitaremos a tratar la QFT como una caja negra que aplicamos utilizando la QFTGate de la biblioteca de circuitos Qiskit. Más adelante veremos cómo se implementa.
Comenzamos cargando los paquetes necesarios y seleccionando un dispositivo en el que ejecutar nuestro circuito:
import numpy as np
from qiskit import QuantumCircuit
from qiskit.visualization import plot_histogram
from qiskit.circuit.library import QFTGate# Load the Qiskit Runtime service
from qiskit_ibm_runtime import QiskitRuntimeService
# Load the Runtime primitive and session
from qiskit_ibm_runtime import SamplerV2 as Sampler
service = QiskitRuntimeService()
# Use the least busy backend
# backend = service.least_busy(operational=True, simulator=False, min_num_qubits = 127)
backend = service.backend("ibm_pinguino2")
print(backend.name)Output:
ibm_pinguino2
Si no tienes tiempo disponible en tu cuenta o quieres utilizar un simulador por cualquier motivo, puedes ejecutar la celda que aparece a continuación para configurar un simulador que imitará el dispositivo cuántico que seleccionamos anteriormente:
# Load the backend sampler
from qiskit.primitives import BackendSamplerV2
# Load the Aer simulator and generate a noise model based on the currently-selected backend.
from qiskit_aer import AerSimulator
from qiskit_aer.noise import NoiseModel
noise_model = NoiseModel.from_backend(backend)
# Define a simulator using Aer, and use it in Sampler.
backend_sim = AerSimulator(noise_model=noise_model)
sampler_sim = BackendSamplerV2(backend=backend_sim)# Alternatively, load a fake backend with generic properties and define a simulator.
from qiskit.providers.fake_provider import GenericBackendV2
backend_gen = GenericBackendV2(num_qubits=18)
sampler_gen = BackendSamplerV2(backend=backend_gen)Estado de base computacional único
En primer lugar, vamos a intentar transformar un único estado de base computacional. Empezaremos creando un estado computacional aleatorio:
# Step 1: Map
qubits = 4
N = 2**qubits
qc = QuantumCircuit(qubits)
# flip state of random qubits to put in a random single computational basis state
for i in range(1, qubits):
if np.random.randint(0, 2):
qc.x(i)
# make a copy of the above circuit. (to be used when we apply the QFT in next part)
qc_qft = qc.copy()
qc.measure_all()
qc.draw("mpl")Output:
# Step 2: Transpile
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
target = backend.target
pm = generate_preset_pass_manager(target=target, optimization_level=3)
qc_isa = pm.run(qc)
# Step 3: Run the job on a real quantum computer OR try fake backend
sampler = Sampler(mode=backend)
pubs = [qc_isa]
# Run the job on real quantum device
job = sampler.run(pubs, shots=1000)
res = job.result()
counts = res[0].data.meas.get_counts()
# OR Run the job on the Aer simulator with noise model from real backend
# job = sampler_sim.run([qc_isa])
# res = job.result()
# counts = res[0].data.meas.get_counts()
# Step 4: Post-Process
plot_histogram(counts)Output:
Ahora, transformemos este estado en Fourier con QFTGate:
# Step 1: Map
qc_qft.compose(QFTGate(qubits), inplace=True)
qc_qft.measure_all()
qc_qft.draw("mpl")Output:
# Step 2: Transpile
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
target = backend.target
pm = generate_preset_pass_manager(target=target, optimization_level=3)
qc_isa = pm.run(qc_qft)
# Step 3: Run the job on a real quantum computer - try fake backend
sampler = Sampler(mode=backend)
pubs = [qc_isa]
# Run the job on real quantum device
job = sampler.run(pubs, shots=1000)
res = job.result()
counts = res[0].data.meas.get_counts()
# OR Run the job on the Aer simulator with noise model from real backend
# job = sampler_sim.run([qc_isa])
# res = job.result()
# counts = res[0].data.meas.get_counts()
# Step 4: Post-Process
plot_histogram(counts)Output:
Como puede ver, medimos las poblaciones de cada estado para que sean más o menos iguales, más o menos algo de ruido experimental y estadístico. Por tanto, si se toma la QFT de un único estado base computacional, el resultado es una superposición igual de todos los estados. Si está familiarizado con las transformadas de Fourier, probablemente esto no le sorprenda. Un principio básico que puede ayudarnos a establecer una conexión intuitiva entre una función y su transformada de Fourier es que la anchura de una función es inversamente proporcional a la anchura de su transformada de Fourier. Así, algo que está muy localizado en el tiempo, por ejemplo, como un pulso muy corto, requerirá una amplia gama de frecuencias para generar ese pulso. Esa señal será muy amplia en el espacio de Fourier.
Este hecho está relacionado con la incertidumbre cuántica El principio de incertidumbre de Heisenberg suele enunciarse como . Así, si la incertidumbre en ( ) es pequeña, la incertidumbre en el momento ( ) debe ser grande, y viceversa. Resulta que la transformación de la base de posición a la base de momento se realiza mediante una transformada de Fourier.
Nota: Ten en cuenta que estamos midiendo poblaciones en cada uno de los estados base, por lo que estamos perdiendo información sobre las fases relativas entre las distintas partes de la superposición. Así, mientras que la QFT de cualquier estado base computacional dará como resultado la misma dispersión uniforme de la población en todos los estados base, las fases no serán necesariamente las mismas.
Dos estados de base computacional
Veamos ahora qué ocurre cuando preparamos una superposición de estados de base computacional. ¿Cómo crees que será la transformada de Fourier en este caso?
Elijamos la superposición:
# Step 1: Map
qubits = 4
N = 2**qubits
qc = QuantumCircuit(qubits)
# To make this state, we just need to apply a Hadamard to the last qubit
qc.h(qubits - 1)
qc_qft = qc.copy()
qc.measure_all()
qc.draw("mpl")Output:
# First, let's go through steps 2-4 for the first circuit, qc
# Step 2: Transpile
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
target = backend.target
pm = generate_preset_pass_manager(target=target, optimization_level=3)
qc_isa = pm.run(qc)
# Step 3: Run the job on a real quantum computer - try fake backend
sampler = Sampler(mode=backend)
pubs = [qc_isa]
# Run the job on real quantum device
job = sampler.run(pubs, shots=1000)
res = job.result()
counts = res[0].data.meas.get_counts()
# OR run the job on the Aer simulator with noise model from real backend
# job = sampler_sim.run([qc_isa])
# res = job.result()
# counts = res[0].data.meas.get_counts()
# Step 4: Post-process
plot_histogram(counts)Output:
Ahora, transformemos este estado en Fourier con QFTGate:
# Step 1: Map
qc_qft.compose(QFTGate(qubits), inplace=True)
qc_qft.measure_all()
qc_qft.draw("mpl")Output:
# Step 2: Transpile
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
target = backend.target
pm = generate_preset_pass_manager(target=target, optimization_level=3)
qc_isa = pm.run(qc_qft)
# Step 3: Run the job on a real quantum computer OR try fake backend
sampler = Sampler(mode=backend)
pubs = [qc_isa]
# Run the job on real quantum device
job = sampler.run(pubs, shots=1000)
res = job.result()
counts = res[0].data.meas.get_counts()
# OR run the job on the Aer simulator with noise model from real backend
# job = sampler_sim.run([qc_isa])
# res = job.result()
# counts = res[0].data.meas.get_counts()
# Step 4: Post-process
plot_histogram(counts)Output:
Esta puede ser un poco más sorprendente. Parece que la QFT del estado es una superposición de todos los estados de la base par. Pero si pensamos de nuevo en nuestra visualización de cada estado base , y en cómo la fase de cada componente gira alrededor de veces, entonces la razón por la que obtenemos este resultado puede quedar clara.
Comprueba tu comprensión
Utilizando la pista anterior, explica por qué es previsible el resultado que obtuvimos para la teoría cuántica de campos de un campo de tipo « ».
El estado original tiene una fase relativa de 0 (o un múltiplo entero de ) entre las dos partes de la superposición. Así, sabemos que este estado tiene componentes de Fourier cuyas fases también coinciden de esa manera: las que tienen desplazamiento de fase 0 entre el término |0000> y el término |1000>. Cada estado de la base de Fourier se compone de términos cuya fase se acumula a un ritmo de , lo que significa que, ordenados de la forma habitual, cada término de la superposición tiene una fase de mayor que el término anterior. Así, en el punto medio , queremos que la fase sea un múltiplo entero de . Esto ocurre cuando es par.
¿Qué superposición de estados computacional correspondería a una teoría cuántica de campos con picos en cada número binario impar?
Si se tomara la QFT del estado , entonces se verían picos en cada estado binario impar.
Desglosar el algoritmo QFT
Ahora que hemos adquirido más intuición sobre la relación entre los estados de los qubits en la base computacional y la base de Fourier, profundicemos en el algoritmo QFT en sí. En otras palabras, ¿qué puertas implementamos realmente en el ordenador cuántico para lograr esta transformación?
Empecemos poco a poco, con un solo qubit. Entonces, eso significa que tendremos dos estados base. QFT transforma los estados de base computacional y en estados de base de Fourier y :
Comprueba tu comprensión
Utiliza la ecuación de la teoría cuántica de campos de la sección anterior para verificar estos dos estados de base de Fourier mencionados anteriormente.
La fórmula general de QFT es:
Para un único qubit ( ), , y . Así pues, tenemos
Echa un vistazo a esas dos ecuaciones. Es posible que ya conozcas una puerta cuántica que puede utilizarse para aplicar esta transformación. Es decir, existe una puerta que transforma los estados de base computacional y en los respectivos estados de base de Fourier y . ¡Es una puerta Hadamard! Esto queda aún más claro si introducimos una representación matricial de la operación QFT :
Si no estás familiarizado con esta notación para expresar un operador cuántico, ¡no pasa nada! Es una forma de representar una matriz , donde y indexan las columnas y filas de la matriz, de a , y es el valor de esa entrada concreta. Así, la entrada de la columna 0 y la fila 2, por ejemplo, sería .
En esta representación, cada uno de los estados base computacionales se asocia a uno de los vectores base:
Si desea conocer más a fondo esta representación, consulte la lección de John Watrous sobre sistemas múltiples en el curso Fundamentos de la información cuántica.
Intentemos construir la matriz para QFT . Utilizando la fórmula anterior, encontramos que
Para implementar esta matriz en un ordenador cuántico, tendremos que averiguar qué combinación de puertas aplicadas a qué qubits nos dará una transformación unitaria que coincida con la matriz anterior. Ya conocemos una de las puertas que serán necesarias: la Hadamard. Otra puerta que necesitaremos es la puerta de fase controlada, que aplica una fase relativa al estado del qubit objetivo, siempre que el qubit de control esté en el estado . En forma de matriz esto se ve así:
Dado que sólo se cambia el estado , en realidad no importa qué qubit se considera el "control" y cuál es el "objetivo" El resultado será el mismo en ambos casos.
Por último, también necesitaremos algunas puertas SWAP. Una puerta SWAP intercambia los estados de dos qubits. Eso parece:
El procedimiento para construir un circuito QFT en qubits es iterativo - primero se aplica la QFT a los qubits a , luego se añaden algunas puertas entre el qubit y los otros qubits . Pero para aplicar la QFT , primero hay que aplicar la QFT a los qubits 2 a , y luego añadir algunas puertas entre el qubit 1 y los qubits restantes a . Es como una muñeca rusa anidada: cada muñeca añade un factor de dos en la dimensión del circuito QFT, con la muñeca más pequeña en el centro, siendo QFT , o la puerta de Hadamard.
Para meter un muñeco dentro del siguiente de mayor tamaño, aumentando así la dimensión de la QFT en un factor de dos, se sigue siempre el mismo procedimiento:
- En primer lugar, aplique la QFT a los qubits de la parte inferior . Esta es tu "muñeca más pequeña" del juego de muñecas rusas que pronto meterás dentro de la siguiente muñeca más grande.
- Utilice el qubit siguiente como control y aplique puertas de fase controlada a cada uno de los qubits inferiores , con fases a los estados de base estándar de cada uno de los qubits restantes .
- Realiza un Hadamard en el mismo qubit superior que se utilizó como control en las puertas de fase.
- Utiliza las puertas SWAP para permutar el orden de los qubits de modo que el bit menos significativo (superior) se convierta en el más significativo (inferior), y todos los demás se desplacen uno hacia arriba.
Ya hemos estado utilizando la función QFTGate de la librería de circuitos Qiskit, pero ahora vamos a echar un vistazo al interior de algunas de estas puertas QFT para verificar el procedimiento anterior. Podemos hacerlo con decompose().
qc = QuantumCircuit(1)
qc.compose(QFTGate(1), inplace=True)
qc.decompose().draw("mpl")Output:
qc = QuantumCircuit(2)
qc.compose(QFTGate(2), inplace=True)
qc.decompose().draw("mpl")Output:
qc = QuantumCircuit(3)
qc.compose(QFTGate(3), inplace=True)
qc.decompose().draw("mpl")Output:
qc = QuantumCircuit(4)
qc.compose(QFTGate(4), inplace=True)
qc.decompose().draw("mpl")Output:
Así que, esperemos que a partir de las cuatro primeras QFT puedas empezar a ver cómo cada una está anidada dentro de la siguiente más grande. Sin embargo, te habrás dado cuenta de que algunas de las puertas de fase no son exactamente como se indica en el procedimiento que hemos descrito anteriormente, y los SWAPs no aparecen después de cada subrutina, sino que se encuentran al final de la QFT completa. Esto nos ahorra puertas innecesarias, que harían que el circuito tardara más y fuera más propenso a errores. En lugar de implementar el SWAP después de cada muñeca anidada, el circuito realiza un seguimiento de dónde debería estar cada estado de qubit y ajusta los qubits a los que está aplicando las puertas de fase en consecuencia. Luego, un último conjunto de SWAPs al final pone todo en su sitio.
Aplicar el QFT: Estimación de fase
Veamos cómo puede utilizarse la QFT para resolver un problema útil en computación cuántica. El cálculo de la transformada cuántica de Fourier inversa es un paso necesario en un algoritmo conocido como Estimación Cuántica de Fase (QPE), que es a su vez una subrutina en muchos otros algoritmos, incluida la "joya de la corona" de los algoritmos cuánticos, el algoritmo de factorización de Shor.
El objetivo del QPE es estimar los valores propios de un operador unitario. Los operadores unitarios son omnipresentes en la computación cuántica y, a menudo, encontrar los valores propios de sus vectores propios asociados es un paso necesario en un algoritmo más amplio. Dependiendo del problema, un valor propio puede representar una energía de un Hamiltoniano en un problema de tipo simulación, puede ayudarnos a encontrar factores primos de un número en el algoritmo de Shor o puede contener otra información esencial. QPE es una de las subrutinas más importantes y utilizadas en computación cuántica.
¿Qué tiene esto que ver con la transformada cuántica de Fourier? Bien, como recordarás, cualquier valor propio de un operador unitario tiene una magnitud . Así que podemos escribir cada valor propio como un número complejo con magnitud uno:
donde es un número real entre 0 y 1. Si desea más información sobre matrices unitarias, consulte la lección de John Watrous sobre el tema en Fundamentos de la información cuántica.
Nótese que es periódica en . Esto ya podría sugerirte que una QFT podría estar implicada, puesto que vimos lo útiles que son las QFT para analizar funciones periódicas. A continuación, recorreremos el algoritmo y veremos con precisión cómo entra en juego la QFT.
Cómo funciona QPE
En primer lugar, empezaremos con el algoritmo QPE más sencillo, que estima aproximadamente la fase con un solo dígito binario de precisión. En otras palabras, este algoritmo puede distinguir entre y , pero no puede hacerlo mejor. Aquí está el diagrama del circuito:
Los qubits se preparan en el estado , donde el qubit está en el estado y los qubits restantes están en el estado , que es un estado propio de . Después del primer Hadamard, el estado de los qubits pasa a ser:
La siguiente puerta es una puerta "controlada- ". Esto aplica la operación unitaria a los qubits inferiores que están en el estado si el qubit 0 está en el estado , pero no hace nada a si el qubit 0 está en el estado . Esto transforma los qubits al estado:
Algo extraño acaba de suceder: la puerta controlada- sólo utiliza el qubit como qubit de control, por lo que se podría pensar que esta puerta no cambiaría el estado del qubit 0 en absoluto. Pero de alguna manera, ¡lo hace! Aunque la operación se haya aplicado a los qubits inferiores, el efecto global de la puerta es cambiar la fase del qubit . Esto se conoce como "mecanismo de retroceso de fase" y se utiliza en muchos algoritmos cuánticos, incluidos los algoritmos de Deutsch-Josza y Grover. Si desea obtener más información sobre el mecanismo phase-kickback, consulte la lección de John Watrous sobre Algoritmos cuánticos de consulta en Fundamentos de los algoritmos cuánticos.
Después del retroceso de fase, aplicamos un Hadamard más al qubit , lo que da como resultado el estado:
Así, cuando midamos el qubit al final, mediremos con un 100% de certeza si y mediremos con un 100% de certeza si (y si nuestro ordenador cuántico es perfecto, sin ruido). Si es algo distinto de esto, la medición final es sólo probabilística y sólo nos dice una parte.
QPE con mayor precisión: más qubits
Podemos ampliar este sencillo concepto a un algoritmo más complicado con una precisión arbitraria. Si en lugar de utilizar sólo el qubit para medir la fase, utilizamos qubits a , y entonces podremos estimar la fase con bits de precisión. Veamos cómo funciona:
Este circuito QPE más preciso comienza igual que la versión de un solo bit: Se aplican Hadamards a los primeros qubits, y los qubits restantes se preparan en el estado , creando el estado:
Ahora se aplican los unitarios controlados. Qubit es el control para el mismo unitario que antes. Pero ahora, el qubit es el control para el unitario , que es simplemente aplicado dos veces. Así, el valor propio de es . En general, cada qubit desde 0 hasta será el control del unitario . Esto significa que cada uno de estos qubits experimentará un retroceso de fase de . Esto resulta en el estado:
Esto puede reescribirse como una suma sobre los estados base computacionales:
¿Le suena la suma? ¡Es un QFT! Recordemos la ecuación de una transformada cuántica de Fourier:
Entonces, si la fase para algún entero entre y , entonces tomando la QFT inversa de este estado resultará en el estado:
y de , podemos deducir .
Sin embargo, si no es un múltiplo entero, la QFT inversa sólo aproximará . Lo bien que se aproxime a será probabilístico, lo que significa que no siempre obtendremos la mejor aproximación, pero estará bastante cerca, y cuantos más qubits utilices, mejor será la aproximación que obtengas. Para saber cómo cuantificar esta aproximación de , consulte la lección de John Watrous sobre Estimación de fase y factorización en Fundamentos de algoritmos cuánticos.
Conclusión
Este módulo ofreció una visión general de lo que es una QFT, cómo se implementa en un ordenador cuántico y lo útil que puede ser para resolver problemas. Ya le dimos una idea de su utilidad cuando vimos cómo puede utilizarse en la estimación cuántica de fase para conocer los valores propios de una matriz unitaria.
Conceptos fundamentales
- La transformada cuántica de Fourier es el análogo cuántico de la transformada discreta de Fourier.
- La QFT es un ejemplo de transformación de bases.
- El procedimiento de estimación cuántica de fase se basa en el mecanismo de retroceso de fase de las operaciones unitarias controladas, así como en una QFT inversa.
- QFT y QPE son subrutinas ampliamente utilizadas en numerosos algoritmos cuánticos.
Preguntas
True/False
- T/F La transformada cuántica de Fourier es el análogo cuántico de la transformada discreta de Fourier (DFT) clásica.
- T/F QFT puede implementarse utilizando sólo puertas Hadamard y CNOT.
- T/F La QFT es un componente clave del algoritmo de Shor.
- T/F La salida de la Estimación Cuántica de Fase es un estado cuántico que representa el vector propio del operador.
- T/F QPE requiere el uso de la transformada cuántica de Fourier inversa (QFT ).
- T/F En QPE, si la fase es representable exactamente con bits, el algoritmo da el resultado correcto con probabilidad 1.
Respuestas breves
- ¿Cuántos qubits se necesitan para realizar una QFT en un sistema con puntos de datos?
- ¿Se puede utilizar la QFT en un estado que no sea un estado base de cálculo? Si es así, ¿qué ocurre?
- ¿Cómo afecta el número de qubits de control utilizados en QPE a la resolución de la estimación de fase resultante?
Problemas
- Utilice la multiplicación de matrices para verificar que los pasos del algoritmo QFT dan como resultado la matriz :
(¡No hace falta que lo hagas a mano!)
Problemas desafiantes
- Hacer un estado de cuatro qubits que sea una superposición igual de todas las bases computacionales impares: . A continuación, realice una QFT en el estado. ¿Cuál es el estado resultante? Explica por qué tu resultado tiene sentido, utilizando tus conocimientos de las transformadas de Fourier.