Schede riassuntive

Guida introduttiva alla computazione quantistica con MATLAB

Illustrazione di una macchina desktop che utilizza il calcolo quantistico con MATLAB.

MATLAB Support Package for Quantum Computing consente di creare, simulare ed eseguire algoritmi quantistici.

Porta a singolo qubit
Applica una porta a singolo qubit a un circuito quantistico. La quantità tra parentesi () indica l’indice del qubit a cui viene applicata la porta.
  Oggetto quantumCircuit Grafico Matrice
Sintassi >> qc=quantumCircuit(xGate(1))

>> plot(qc)

>> getMatrix(qc)
Output

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

Porta a singolo qubit Descrizione

xGate(1)

xGate = rotazione di π attorno all’asse x applicata al qubit 1

yGate(1)

yGate = rotazione di π attorno all’asse y applicata al qubit 1

zGate(1)

zGate = rotazione di π attorno all’asse z applicata al qubit 1

sGate(1)

sGate = rotazione positiva di π/2 attorno all’asse z

tGate(1)

tGate = rotazione positiva di π/4 attorno all’asse z

tiGate(1)

tiGate = rotazione negativa di π/4 attorno all’asse z

hGate(1)

hGate = porta di Hadamard

idGate(1)

idGate = porta identità (non esegue alcuna operazione)

Le porte di rotazione sono porte a singolo qubit con due argomenti. Il primo è l’indice del qubit a cui viene applicata la porta, mentre il secondo è l’angolo di rotazione o la fase (θ) espressa in radianti.

Porta parametrizzata a singolo qubit

Descrizione

rxGate(1,pi/2)

rxGate = porta di rotazione attorno all’asse x

ryGate(1,pi/2)

ryGate = porta di rotazione attorno all’asse y

rzGate(1,pi/2)

rzGate = porta di rotazione attorno all’asse z

r1Gate(1,pi/2)

r1Gate = porta di rotazione attorno all’asse z con fase globale

Porte con un qubit di controllo

Applica una porta con un qubit di controllo a un circuito quantistico. Queste porte hanno due argomenti tra parentesi (); il primo è il qubit di controllo e il secondo è il qubit di destinazione. Se il qubit di controllo si trova nello stato |0>, la porta non esegue alcuna operazione. Se il qubit di controllo si trova nello stato |1>, la porta specificata agisce sul qubit di destinazione. >> cxGate(control,target)

Grafico di un circuito quantistico costituito da una porta X controllata che agisce su due qubit

Indice del qubit 1: qubit di controllo
Indice del qubit 2: qubit di destinazione

Le porte di rotazione controllate sono porte a due qubit con tre argomenti. Il primo è il qubit di controllo, il secondo è il qubit di destinazione e il terzo è l’angolo di rotazione o la fase (θ) espressa in radianti.

Porta due qubit

Descrizione

cxGate(1,2)

cxGate o cnotGate = rotazione di π attorno all’asse x sul qubit 2 se il qubit 1 si trova nello stato |1>

cyGate(1,2)

cyGate = rotazione di π attorno all’asse y sul qubit 2 se il qubit 1 si trova nello stato |1>

czGate(1,2)

czGate = rotazione di π attorno all’asse z sul qubit 2 se il qubit 1 si trova nello stato |1>

chGate(1,2)

chGate = porta di Hadamard controllata

Porta parametrizzata a due qubit

Descrizione

crxGate(1,2,pi/2)

crxGate = porta di rotazione controllata attorno all’asse x

cryGate(1,2,pi/2)

cryGate = porta di rotazione controllata attorno all’asse y

crzGate(1,2,pi/2)

crzGate = porta di rotazione controllata attorno all’asse z

cr1Gate(1,2,pi/2)

cr1Gate = porta di rotazione controllata attorno all’asse z con fase globale

Porte speciali

Porta

Descrizione

compositeGate (qc, [1,2])

Costruisce una porta composta a partire da un circuito quantistico interno e restituisce un oggetto CompositeGate. Nell’esempio, qc rappresenta il circuito quantistico interno.

ccxGate(1,2,3)

Porta X controllata da due qubit (porta CCNOT o di Toffoli)

mcxGate(1:3,4,5)

Porta X a controllo multiplo

Il primo argomento è costituito da tre qubit di controllo (1, 2, 3), il secondo argomento è un qubit di destinazione (4) e il terzo argomento è un qubit ancilla (5). Questa porta agisce su un singolo qubit di destinazione in base agli stati dei qubit di controllo e utilizza un numero di qubit ancilla che determina il numero di porte semplici.

qftGate(1:3)

Porta della trasformata di Fourier quantistica (QFT)

Nelle porte qui sotto, il primo e il secondo argomento sono gli indici dei qubit, mentre il terzo è la fase (θ), eccetto swapGate, che ha due argomenti. La sostituzione dei due qubit di destinazione in tutte le porte riportate di seguito non modifica il funzionamento delle porte stesse.

Porta

Descrizione

rxxGate(1,2,pi/2)

Porta di accoppiamento di Ising XX

ryyGate(1,2,pi/2)

Porta di accoppiamento di Ising YY

rzzGate(1,2,pi/2)

Porta di accoppiamento di Ising ZZ

swapGate(1,2)

Scambia i valori dei qubit

Operazioni sui circuiti quantistici

Operazione

Esempio

Output

plot = rappresentazione di un circuito quantistico

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

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

>> plot(bell) %plot

inv = esecuzione dell’inverso di un circuito quantistico o di una porta

>> bell_inverted=inv(bell);

plot(bell_inverted)

getMatrix = rappresentazione matriciale di un circuito quantistico o di una porta >> getMatrix(bell)
Rappresentazione matriciale di un circuito quantistico o di una porta
generateQASM = generazione di codice 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), simulazione del circuito, definizione dello stato quantistico iniziale del circuito e restituzione di un oggetto QuantumState >> simulate(bell)

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

unpack = scomposizione delle porte composite all’interno di un circuito quantistico

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

>> qc_inner=quantumCircuit(cnot_custom);

>> gates_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"))

Operazioni sui circuiti quantistici simulate

Operazione

Esempio

Output

Inizializzazione dello stato quantistico del circuito in modo che il qubit 1 (il qubit superiore nel grafico del circuito) sia impostato su |1> e il secondo su |0>

S=simulate(bell,"10")

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

Visualizzazione degli stati di output di base e le relative ampiezze

S.BasisStates
S.Amplitudes

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

Visualizzazione dello stato finale del circuito, ad esempio la base in cui rappresentare ciascun qubit

f=formula(S)

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

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

Visualizzazione degli stati possibili e della probabilità di misurare ciascuno stato

[states,P]=querystates(S)

states = "00" P= 0.5
     "11" 0.5
Esecuzione di un campionamento casuale dello stato quantistico del circuito con un numero qualsiasi di shot

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"

Funzione

Descrizione

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

Connessione a un dispositivo Amazon Braket specificando il nome del dispositivo, la regione e il percorso del bucket S3 in cui memorizzare i risultati

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

Connessione a un dispositivo quantistico IBM specificando il nome del dispositivo e le credenziali dell’account

fetchDetails(device)

Acquisizione di ulteriori informazioni sul dispositivo

task=run(circuit, dev);

Creazione di un’attività per eseguire il circuito sul dispositivo

wait(task)

Verifica dello stato di un’attività

meas=fetchOutput(task);

Recupero del risultato dell’esecuzione del circuito

>> Visualizzazioni

Matrix representation of |0>

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

>> plot(qftGate(1:3))

>> histogram(states)

>> GitHub con esempi