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