Implementare Qiskit
În lecția anterioară, am aruncat o primă privire asupra claselor Statevector și Operator din Qiskit și le-am folosit pentru a simula operații și măsurători pe qubiți individuali.
În această secțiune, vom folosi aceste clase pentru a explora comportamentul mai multor qubiți.
# Added by doQumentation — required packages for this notebook
!pip install -q numpy qiskit
from qiskit import __version__
print(__version__)
2.1.1
Vom începe prin a importa clasele Statevector și Operator, precum și funcția de radical pătrat din NumPy.
De acum înainte, în general, vom importa toate pachetele necesare la începutul fiecărei lecții.
from qiskit.quantum_info import Statevector, Operator
from numpy import sqrt
Produse tensoriale
Clasa Statevector are o metodă tensor, care returnează produsul tensorial al acelui Statevector cu un altul, furnizat ca argument.
Argumentul este interpretat ca factorul tensorial din dreapta.
De exemplu, mai jos creăm doi vectori de stare care reprezintă și și folosim metoda tensor pentru a crea un nou vector,
Observă că folosim metoda from_label pentru a defini stările și în loc să le definim manual.
zero = Statevector.from_label("0")
one = Statevector.from_label("1")
psi = zero.tensor(one)
display(psi.draw("latex"))
Alte etichete permise includ "+" și "-" pentru stările plus și minus, precum și "r" și "l" (prescurtări pentru "right" și "left") pentru stările
Aici, "+", "-" sau "right" și "left" provin din contextul spinului mecanic cuantic, în care o componentă a spinului poate indica spre stânga sau spre dreapta într-un experiment; nu se referă la cel mai din dreapta sau cel mai din stânga qubit în sistemele cu mai mulți qubiți. Iată un exemplu de produs tensorial al lui și
plus = Statevector.from_label("+")
minus_i = Statevector.from_label("l")
phi = plus.tensor(minus_i)
display(phi.draw("latex"))
O alternativă este folosirea operației ^ pentru produse tensoriale, care produce, în mod firesc, aceleași rezultate.
display((plus ^ minus_i).draw("latex"))
Clasa Operator are, de asemenea, o metodă tensor (și o metodă from_label), după cum vedem în exemplele de mai jos.
H = Operator.from_label("H")
Id = Operator.from_label("I")
X = Operator.from_label("X")
display(H.tensor(Id).draw("latex"))
display(H.tensor(Id).tensor(X).draw("latex"))
Din nou, ca și în cazul vectorilor, operația ^ este echivalentă.
display((H ^ Id ^ X).draw("latex"))
Stările compuse pot fi evoluate folosind operații compuse, exact cum ne-am aștepta — la fel cum am văzut pentru sistemele individuale în lecția anterioară. De exemplu, codul următor calculează starea pentru (care a fost deja definită mai sus).
display(phi.evolve(H ^ Id).draw("latex"))
Iată un cod care definește o operație și calculează pentru Pentru claritate, aceasta este o operație în care qubitul din stânga este controlul, iar qubitul din dreapta este ținta. Rezultatul este starea Bell
CX = Operator([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 0, 1], [0, 0, 1, 0]])
psi = plus.tensor(zero)
display(psi.evolve(CX).draw("latex"))
Măsurători parțiale
În lecția anterioară, am folosit metoda measure pentru a simula o măsurătoare a unui vector de stare cuantică.
Această metodă returnează două elemente: rezultatul simulat al măsurătorii și noul Statevector corespunzător acestei măsurători.
În mod implicit, measure măsoară toți qubiții din vectorul de stare.
Alternativ, putem furniza o listă de numere întregi ca argument, ceea ce face ca doar acei indici de qubiți să fie măsurați.
Pentru a demonstra acest lucru, codul de mai jos creează starea
și măsoară qubitul numărul 0, care este cel mai din dreapta qubit. (Qiskit numerotează qubiții începând de la 0, de la dreapta la stânga. Vom reveni la această convenție de numerotare în lecția următoare.)
w = Statevector([0, 1, 1, 0, 1, 0, 0, 0] / sqrt(3))
display(w.draw("latex"))
result, state = w.measure([0])
print(f"Measured: {result}\nState after measurement:")
display(state.draw("latex"))
result, state = w.measure([0, 1])
print(f"Measured: {result}\nState after measurement:")
display(state.draw("latex"))
Measured: 0
State after measurement:
Measured: 00
State after measurement: