Cheat Sheets

Erste Schritte beim Quantencomputing mit MATLAB

Abbildung eines Desktopcomputers, auf dem Quantencomputing mit MATLAB ausgeführt wird.

Mit dem MATLAB Support Package for Quantum Computing können Sie Quantenalgorithmen entwickeln, simulieren und ausführen.

1-Qubit-Gatter
Wenden Sie ein 1-Qubit-Gatter in einem Quantenschaltkreis an. Der Wert in Klammern () steht für den Qubit-Index, auf den das Gatter angewendet wird.
  Quantenschaltkreis-Objekt Plot Matrix
Syntax >> qc=quantumCircuit(xGate(1))

>> plot(qc)

>> getMatrix(qc)
Ausgabe

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

1-Qubit-Gatter Beschreibung

xGate(1)

xGate = π-Rotation um die x-Achse auf Qubit 1

yGate(1)

yGate = π-Rotation um die y-Achse auf Qubit 1

zGate(1)

zGate = π-Rotation um die z-Achse auf Qubit 1

sGate(1)

sGate = π/2 positive Rotation um die z-Achse

tGate(1)

tGate = π/4 positive Rotation um die z-Achse

tiGate(1)

tiGate = π/4 negative Rotation um die z-Achse

hGate(1)

hGate = Hadamard-Gatter

idGate(1)

idGate = Identitätsgatter (tut nichts)

Die Rotationsgatter sind Gatter mit einem Qubit und zwei Eingabeargumenten. Das Erste ist der Qubit-Index, auf den das Gatter angewendet wird, und das Zweite ist der Rotationswinkel oder die Rotationsphase (θ) in Radian.

Parametrisiertes 1-Qubit-Gatter

Beschreibung

rxGate(1,pi/2)

rxGate = Rotationsgatter an der x-Achse

ryGate(1,pi/2)

ryGate = Rotationsgatter an der y-Achse

rzGate(1,pi/2)

rzGate = Rotationsgatter an der z-Achse

r1Gate(1,pi/2)

r1Gate = Rotationsgatter an der z-Achse mit globaler Phase

Gatter mit einem Kontroll-Qubit

Wenden Sie ein Gatter mit einem Kontroll-Qubit auf einen Quantenschaltkreis an. Diese Gatter haben zwei Argumente in Klammern (). Das Erste ist das Kontroll-Qubit und das Zweite ist das Ziel-Qubit. Ist das Kontroll-Qubit im Zustand |0>, tut das Gatter nichts. Ist das Kontroll-Qubit im Zustand |1>, wirkt das angegebene Gatter am Ziel-Qubit. >> cxGate(control,target)

Plot eines Quantenschaltkreises aus kontrolliertem x-Gatter, das an zwei Qubits wirkt

Qubit-Index 1: Kontroll-Qubit
Qubit-Index 2: Ziel-Qubit

Die kontrollierten Rotationsgatter sind zwei Qubit-Gatter mit drei Eingabeargumenten. Das Erste ist das Kontroll-Qubit, das Zweite ist das Ziel-Qubit und das Dritte ist der Rotationswinkel oder die Rotationsphase (θ) in Radian.

2-Qubit-Gatter

Beschreibung

cxGate(1,2)

cxGate oder cnotGate = π-Rotation um die x-Achse zu Qubit 2, falls Qubit 1 in Zustand |1> ist

cyGate(1,2)

cyGate = π-Rotation um die y-Achse zu Qubit 2, falls Qubit 1 im Zustand |1> ist

czGate(1,2)

czGate = π-Rotation um die z-Achse zu Qubit 2, falls Qubit 1 im Zustand |1> ist

chGate(1,2)

chGate = kontrolliertes Hadamard-Gatter

Parametrisiertes 2-Qubit-Gatter

Beschreibung

crxGate(1,2,pi/2)

crxGate = kontrolliertes Rotationsgatter an der x-Achse

cryGate(1,2,pi/2)

cryGate = kontrolliertes Rotationsgatter an der y-Achse

crzGate(1,2,pi/2)

crzGate = kontrolliertes Rotationsgatter an der z-Achse

cr1Gate(1,2,pi/2)

cr1Gate = kontrolliertes Rotationsgatter an der z-Achse mit globaler Phase

Spezialgatter

Gatter

Beschreibung

compositeGate (qc, [1,2])

Erstellt ein Verbundgatter aus einem inneren Quantenschaltkreis und gibt ein CompositeGate-Objekt zurück. qc ist der innere Quantenschaltkreis im Beispiel.

ccxGate(1,2,3)

Kontrolliertes kontrolliertes x-Gatter (CCNOT- oder Toffoli-Gatter)

mcxGate(1:3,4,5)

Mehrfach kontrolliertes x-Gatter

Das erste Argument sind die drei Kontroll-Qubits (1,2,3), das zweite Argument ist ein Ziel-Qubit (4) und das dritte Argument ist ein Ancilla-Qubit (5). Dieses Gatter wirkt auf ein einzelnes Ziel-Qubit basierend auf den Zuständen der Kontroll-Qubits, mit einer Anzahl von Ancilla-Qubits, die die Anzahl der einfachen Gatter bestimmt

qftGate(1:3)

Quanten-Fourier-Transformation (QFT)-Gatter

In den unten stehenden Gattern sind das erste und zweite Argument die Qubit-Indizes und das dritte Argument ist die Phase (θ), außer bei swapGate, das zwei Argumente besitzt. Das Tauschen der beiden Ziel-Qubits in allen unten stehenden Gattern bewirkt keine Änderung der Gatteroperation.

Gatter

Beschreibung

rxxGate(1,2,pi/2)

Ising-XX-Kopplungsgatter

ryyGate(1,2,pi/2)

Ising-YY-Kopplungsgatter

rzzGate(1,2,pi/2)

Ising-ZZ-Kopplungsgatter

swapGate(1,2)

Tauscht die Werte der Qubits

Operation des Quantenschaltkreises

Operation

Beispiel

Ausgabe

plot = einen Quantenschaltkreis zeichnen

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

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

>> plot(bell) %plot

inv = Inverse eines Quantenschaltkreises oder Gatters

>> bell_inverted = inv(bell);

plot(bell_inverted)

getMatrix = Matrixdarstellung eines Quantenschaltkreises oder Gatters >> getMatrix(bell)
Matrixdarstellung eines Quantenschaltkreises oder Gatters
generateQASM = QASM-Code generieren >> 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), Schaltkreis simulieren und anfänglichen Quantenzustand des Schaltkreises spezifizieren und QuantumState-Objekt zurückgeben >> simulate(bell)

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

unpack = Verbundgatter innerhalb eines Quantenschaltkreises entpacken

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

Simulierte Operationen des Quantenschaltkreises

Operation

Beispiel

Ausgabe

Quantenzustand des Schaltkreises initialisieren, wo Qubit 1 (oberstes Qubit im Schaltkreis-Plot) auf |1> und Qubit 2 auf |0> gesetzt ist

S=simulate(bell,"10")

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

Basiszustände der Ausgabe und ihre Amplituden anzeigen

S.BasisStates
S.Amplitudes

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

finalen Zustand des Schaltkreises anzeigen, z. B. die Basis, in der jedes Qubit darzustellen ist

f=formula(S)

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

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

mögliche Zustände und Wahrscheinlichkeit des Messens jedes Zustands anzeigen

[states,P]=querystates(S)

states = "00"   P= 0.5
    "11"          0.5
auf Zufallsbasis den Quantenzustand des Schaltkreises mit beliebiger Anzahl von Messungen (Shots) abtasten

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"

Funktion

Beschreibung

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

mit einem Amazon Braket-Gerät verbinden, dabei Gerätenamen, Region und S3-Bucket-Pfad zum Speichern von Ergebnissen angeben

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

mit einem IBM-Quantengerät verbinden, dabei Gerätenamen und Konto-Anmeldedaten angeben

fetchDetails(device)

zusätzliche Informationen zum Gerät beziehen

task=run(circuit, dev);

Task erstellen, um den Schaltkreis auf dem Gerät auszuführen

wait(task)

Status eines Tasks überprüfen

meas=fetchOutput(task);

Ergebnis der Schaltkreisausführung abrufen

>> Visualisierungen

Matrixdarstellung von |0>

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

>> plot(qftGate(1:3))

>> histogram(states)

>> GitHub mit Beispielen