Guías prácticas

Guía de introducción a la computación cuántica con MATLAB

Equipo local que utiliza computación cuántica con MATLAB.

MATLAB Support Package for Quantum Computing permite crear, simular y ejecutar algoritmos cuánticos.

Puerta de un solo qubit
Aplique una puerta de un solo qubit a un circuito cuántico. El valor indicado entre paréntesis () corresponde al índice del qubit al que se aplica la puerta.
  Objeto de circuito cuántico Representación gráfica Matriz
Sintaxis >> qc=quantumCircuit(xGate(1))

>> plot(qc)

>> getMatrix(qc)
Salida

NumQubits:1
Gates:[1×1 quantum.gate.SimpleGate]

Puerta de un solo qubit Descripción

xGate(1)

xGate = Rotación de π alrededor del eje x aplicada al qubit 1

yGate(1)

yGate = Rotación de π alrededor del eje y aplicada al qubit 1

zGate(1)

zGate = Rotación de π alrededor del eje z aplicada al qubit 1

sGate(1)

sGate = Rotación positiva de π/2 alrededor del eje z

tGate(1)

tGate = Rotación positiva de π/4 alrededor del eje z

tiGate(1)

tiGate = Rotación negativa de π/4 alrededor del eje z

hGate(1)

hGate = Puerta de Hadamard

idGate(1)

idGate = Puerta identidad (no realiza ninguna operación)

Las puertas de rotación son puertas de un solo qubit que aceptan dos argumentos. El primero es el índice del qubit al que se aplica la puerta; el segundo es el ángulo de rotación o la fase (θ) en radianes

Puerta de un solo qubit parametrizada

Descripción

rxGate(1,pi/2)

rxGate = Puerta de rotación alrededor del eje x

ryGate(1,pi/2)

ryGate = Puerta de rotación alrededor del eje y

rzGate(1,pi/2)

rzGate = Puerta de rotación alrededor del eje z

r1Gate(1,pi/2)

r1Gate = Puerta de rotación alrededor del eje z con fase global

Puertas con un solo qubit de control

Aplique una puerta con un solo qubit de control a un circuito cuántico. Estas puertas aceptan dos argumentos entre paréntesis (); el primero es el qubit de control y el segundo es el qubit objetivo. Si el qubit de control se encuentra en el estado |0>, la puerta no realiza ninguna operación. Si el qubit de control se encuentra en el estado |1>, la puerta especificada actúa sobre el qubit objetivo. >> cxGate(control,target)

Representación gráfica de un circuito cuántico compuesto por una puerta X controlada que actúa sobre dos qubits

Qubit con índice 1: qubit de control
Qubit con índice 2: qubit objetivo

Las puertas de rotación controladas son puertas de dos qubits que aceptan tres argumentos. El primero es el qubit de control, el segundo es el qubit objetivo, y el tercero es el ángulo de rotación o la fase (θ) en radianes.

Puerta de dos qubits

Descripción

cxGate(1,2)

cxGate o cnotGate = Rotación de π alrededor del eje x aplicada al qubit 2 si el qubit 1 se encuentra en el estado |1>

cyGate(1,2)

cyGate = Rotación de π alrededor del eje y aplicada al qubit 2 si el qubit 1 se encuentra en el estado |1>

czGate(1,2)

czGate = Rotación de π alrededor del eje z aplicada al qubit 2 si el qubit 1 se encuentra en el estado |1>

chGate(1,2)

chGate = Puerta de Hadamard controlada

Puerta de dos qubits parametrizada

Descripción

crxGate(1,2,pi/2)

crxGate = Puerta de rotación controlada alrededor del eje x

cryGate(1,2,pi/2)

cryGate = Puerta de rotación controlada alrededor del eje y

crzGate(1,2,pi/2)

crzGate = Puerta de rotación controlada alrededor del eje z

cr1Gate(1,2,pi/2)

cr1Gate = Puerta de rotación controlada alrededor del eje z con fase global

Puertas especiales

Puerta

Descripción

compositeGate (qc, [1,2])

Construye una puerta compuesta a partir de un circuito cuántico interno y devuelve un objeto CompositeGate. En el ejemplo, qc es el circuito cuántico interno.

ccxGate(1,2,3)

Puerta X doblemente controlada (puerta CCNOT o puerta de Toffoli)

mcxGate(1:3,4,5)

Puerta X multicontrolada.

El primer argumento corresponde a tres qubits de control (1,2,3), el segundo a un qubit objetivo (4), y el tercero a un qubit auxiliar (5). Esta puerta actúa sobre un solo qubit objetivo en función de los estados de los qubits de control. El número de qubits auxiliares determina el número de puertas simples.

qftGate(1:3)

Puerta de transformada cuántica de Fourier (QFT)

En las puertas siguientes, el primer y segundo argumentos corresponden a los índices de los qubits, y el tercero a la fase (θ), excepto en swapGate, que tiene dos argumentos. Intercambiar los dos qubits objetivo no modifica la operación de ninguna de las puertas siguientes.

Puerta

Descripción

rxxGate(1,2,pi/2)

Puerta de acoplamiento Ising XX

ryyGate(1,2,pi/2)

Puerta de acoplamiento Ising YY

rzzGate(1,2,pi/2)

Puerta de acoplamiento Ising ZZ

swapGate(1,2)

Intercambia los valores de los qubits.

Operaciones con circuitos cuánticos

Operación

Ejemplo

Salida

plot = Representa gráficamente un circuito cuántico

>> gates=[hGate(1); cxGate(1,2)];

>> bell=quantumCircuit(gates, name="bell"); % circuit

>> plot(bell) %plot

inv = Inversa de un circuito cuántico o una puerta

>> bell_inverted=inv(bell); plot(bell_inverted)
getMatrix = Representación matricial de un circuito cuántico o una puerta >> getMatrix(bell)
Representación matricial de un circuito cuántico o una puerta
generateQASM = Genera código QASM >> generateQASM(bell)

"OPENQASM 3.0;
include "stdgates.inc"; qubit[2] q; bit[2] c; h q[0]; cx q[0],q[1];
c=measure q;"

simulate(circuit, inputState), = Simula el circuito, permite especificar su estado cuántico inicial y devuelve un objeto QuantumState >> simulate(bell)

BasisStates: [4×1 string]
Amplitudes: [4×1 double]
NumQubits: 2

unpack = Descompone las puertas compuestas contenidas en un circuito cuántico

>> not_custom=[cxGate(1,2)];

>> qc_inner=quantumCircuit(cnot_custom);

>> gate_appended=[hGate(1) compositeGate(qc_inner,[1 2]) compositeGate(qc_inner,[2 3])];

>> circ=quantumCircuit(gates_appended);

>> plot(circ) %packed composite gate

>> plot(unpack(circ, "recursive"))

Operaciones con circuitos cuánticos simulados

Operación

Ejemplo

Salida

Inicializar el estado cuántico del circuito de modo que el qubit 1 (el qubit superior en la representación gráfica del circuito) se establezca en |1> y el segundo en |0>

S=simulate(bell,"10")

QuantumState with properties:
BasisStates: [4×1 string]
Amplitudes: [4×1 double]
NumQubits: 2

Mostrar los estados base de salida y sus amplitudes

S.BasisStates
S.Amplitudes

BasisStates: "00" "01" "10" "11"
Amplitudes: 0.7071 0 0 -0.7071

Mostrar el estado final del circuito, como la base en la que se representa cada qubit

f=formula(S)

f2=formula(S,Basis="X")

ans = "0.70711 * |00> + -0.70711
* |11>"
ans = "0.70711 * |+-> + 0.70711 *
|-+>"

Mostrar los estados posibles y la probabilidad de medir cada estado

[states,P]=querystates(S)

states = "00"   P= 0.5
    "11"          0.5
Muestrear aleatoriamente el estado cuántico del circuito con cualquier número de ejecuciones

M=randsample(S,50);
T=table(M.Counts,M.Probabilities,M.MeasuredStates,

VariableNames= ["Counts",
"\{*}Probabilities\{*}", "States"])

ans =
2×3 table
Counts Probabilities States
28        0.56        "00"
22        0.44        "11"

Función

Descripción

dev=QuantumDeviceAWS("SV1", Region=reg, S3Path=bucketPath)

Realiza conexión a un dispositivo Amazon Braket especificando el nombre del dispositivo, la región y la ruta del bucket de S3 donde se almacenarán los resultados

dev=QuantumDeviceIBM("ibmq_qasm_simulator", ... AccountName=myAccountName, FileName=myFileName);

Realiza conexión a un dispositivo cuántico de IBM especificando el nombre del dispositivo y las credenciales de la cuenta

fetchDetails(device)

Obtiene información adicional sobre el dispositivo

task=run(circuit, dev);

Crea una tarea para ejecutar el circuito en el dispositivo

wait(task)

Comprueba el estado de una tarea

meas=fetchOutput(task);

Recupera el resultado de la ejecución del circuito

>> Visualizaciones

Matrix representation of |0>

is [1;0] >> plotBlochSphere([1;0])

>> plot(qftGate(1:3))

>> histogram(states)

>> GitHub con ejemplos