Guides de référence

Guide de démarrage pour le Quantum Computing avec MATLAB

Illustration d'une machine desktop utilisant l'informatique quantique avec MATLAB.

MATLAB Support Package for Quantum Computing vous permet de développer, de simuler et d'exécuter des algorithmes quantiques.

Porte à qubit unique
Appliquez une porte à qubit unique à un circuit quantique. Le nombre entre parenthèses (« () ») correspond à l'indice du qubit auquel la porte est appliquée.
  Objet de circuit quantique Graphique Matrice
Syntaxe >> qc=quantumCircuit (xGate(1))

>> plot(qc)

>> getMatrix(qc)
Sorties

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

Porte à qubit unique Description

xGate(1)

xGate = rotation de π autour de l'axe x appliquée au qubit 1

yGate(1)

yGate = rotation de π autour de l'axe y appliquée au qubit 1

zGate(1)

zGate = rotation de π autour de l'axe z appliquée au qubit 1

sGate(1)

sGate = rotation positive de π/2 autour de l'axe z

tGate(1)

tGate = rotation positive de π/4 autour de l'axe z

tiGate(1)

tGate = rotation négative de π/4 autour de l'axe z

hGate(1)

hGate = porte de Hadamard

idGate(1)

idGate = porte d'identité (aucune action)

Les portes de rotation sont des portes à qubit unique qui prennent deux arguments : le premier est l'indice du qubit auquel la porte est appliquée et le second est l'angle de rotation ou la phase (θ) en radians.

Porte à qubit unique paramétrée

Description

rxGate(1,pi/2)

rxGate = porte de rotation autour de l'axe x

ryGate(1,pi/2)

ryGate = porte de rotation autour de l'axe y

rzGate(1,pi/2)

rzGate = porte de rotation autour de l'axe z

r1Gate(1,pi/2)

r1Gate = porte de rotation autour de l'axe z avec phase globale

Portes avec un qubit de contrôle

Appliquez une porte comportant un qubit de contrôle à un circuit quantique. Ces portes comportent deux arguments entre parenthèses (« () ») : le premier correspond au qubit de contrôle et le second au qubit cible. Si le qubit de contrôle se trouve dans l'état |0>, la porte n'effectue aucune action. Si le qubit de contrôle se trouve dans l'état |1>, la porte spécifiée agit sur le qubit cible. >> cxGate(control,target)

Représentation graphique d'un circuit quantique composé d'une porte X contrôlée agissant sur deux qubits

Qubit d'indice 1 : qubit de contrôle
Qubit d'indice 2 : qubit cible

Les portes de rotation contrôlées sont des portes à deux qubits qui prennent trois arguments : le premier correspond au qubit de contrôle, le second au qubit cible et le troisième définit l'angle de rotation ou la phase (θ) en radians.

Porte à deux qubits

Description

cxGate(1,2)

cxGate ou cnotGate = rotation de π autour de l'axe x appliquée au qubit 2 si le qubit 1 est dans l'état |1>

cyGate(1,2)

cyGate = rotation de π autour de l'axe y appliquée au qubit 2 si le qubit 1 est dans l'état |1>

czGate(1,2)

czGate = rotation de π autour de l'axe z appliquée au qubit 2 si le qubit 1 est dans l'état |1>

chGate(1,2)

chGate = porte de Hadamard contrôlée

Porte à deux qubits paramétrée

Description

crxGate(1,2,pi/2)

crxGate = porte contrôlée de rotation autour de l'axe x

cryGate(1,2,pi/2)

cryGate = porte contrôlée de rotation autour de l'axe y

crzGate(1,2,pi/2)

crzGate = porte contrôlée de rotation autour de l'axe z

cr1Gate(1,2,pi/2)

cr1Gate = porte contrôlée de rotation autour de l'axe z avec phase globale

Portes spéciales

Porte

Description

compositeGate (qc, [1,2])

Construit une porte composite à partir d'un circuit quantique interne et renvoie un objet CompositeGate. Dans l'exemple, qc représente le circuit quantique interne.

ccxGate(1,2,3)

Porte X contrôlée (porte CCNOT ou porte de Toffoli)

mcxGate(1:3,4,5)

Porte X à contrôles multiples

Le premier argument correspond à trois qubits de contrôle (1, 2, 3), le deuxième à un qubit cible (4) et le troisième à des qubits auxiliaires (5). Cette porte agit sur un seul qubit cible en fonction des états des qubits de contrôle, avec un certain nombre de qubits auxiliaires déterminant le nombre de portes simples.

qftGate(1:3)

Porte QFT (transformée de Fourier quantique)

Dans les portes ci-dessous, les premier et deuxième arguments correspondent aux indices des qubits, et le troisième à la phase (θ), à l'exception de la porte swapGate qui comporte deux arguments. Le fait d'intervertir les deux qubits cibles ne modifie pas le fonctionnement de l'ensemble des portes suivantes.

Porte

Description

rxxGate(1,2,pi/2)

Porte de couplage d'Ising XX

ryyGate(1,2,pi/2)

Porte de couplage d'Ising YY

rzzGate(1,2,pi/2)

Porte de couplage d'Ising ZZ

swapGate(1,2)

Permute les valeurs des qubits.

Opérations sur les circuits quantiques

Opération

Exemple

Sorties

plot = Dessiner un circuit quantique

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

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

>> plot(bell) %plot

inv = Inverse d'un circuit ou d'une porte quantique

>> bell_inverted=inv(bell); plot(bell_inverted)
getMatrix = Représentation matricielle d'un circuit ou d'une porte quantique >> getMatrix(bell)
représentation matricielle d'un circuit ou d'une porte quantique
generateQASM = Générer le code 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), Simuler un circuit, spécifier l'état quantique initial du circuit et renvoyer un objet QuantumState >> simulate(bell)

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

unpack = Décomposer les portes composites au sein d'un circuit quantique

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

Simulation d'opérations sur les circuits quantiques

Opération

Exemple

Sorties

Initialiser l'état quantique du circuit de sorte que le qubit 1 (qubit du haut sur le schéma du circuit) soit défini sur l'état |1> et le deuxième sur |0>

S = simulate(bell,"10")

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

Afficher les états de base des sorties et leurs amplitudes

S.BasisStates
S.Amplitudes

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

Afficher l'état final du circuit, notamment la base dans laquelle chaque qubit est représenté

f = formula(S)

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

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

Afficher les états possibles et la probabilité de mesurer chacun d'entre eux

[states,P] = querystates(S)

states = "00"   P= 0.5
    "11"          0.5
Échantillonner de manière aléatoire l'état quantique du circuit avec un nombre quelconque de tirages

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"

Fonction

Description

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

Se connecter à un dispositif Amazon Braket en spécifiant le nom du dispositif, la région et le chemin d'accès au compartiment S3 où stocker les résultats

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

Se connecter à un dispositif quantique IBM en spécifiant le nom du dispositif et les identifiants du compte

fetchDetails(device)

Obtenir des informations complémentaires sur le dispositif

task=run(circuit, dev);

Créer une tâche pour exécuter le circuit sur le dispositif

wait(task)

Vérifier l'état d'une tâche

meas=fetchOutput(task);

Récupérer le résultat de l'exécution du circuit

>> Visualisations

Représentation matricielle de |0>

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

>> plot(qftGate(1:3))

>> histogram(states)

>> Exemples sur GitHub