Qubit (Kubit)¶
Kubit je osnovna jedinica građe i funkcije kvantne informatike i predstavlja analogon klasičnim bit-ovima. Klasični bitovi mogu da imaju vrednosti 0 i 1, qubit može biti u linearnoj superpoziciji ova dva stanja!
Kvantno stanje kubita¶
Kubit predstavlja vektor u dvodimenzionalnom kompleksnom Hilbertovom prostoru . Ovaj Hilbertov prostor je razapet ortonormiranom računskom bazom i . Ove vektore zapisujemo kao
Generalno, stanje kubita (ket vektor) možemo zapisati kao
gde kompleksne amplitude zadovoljavaju uslov normalizacije
Gde smo već koristili i uveli Dirakovu bra-ket notaciju.
Sledeće pokušajmo sada da izvedemo jednačinu (3) direktno.
Prikaži računicu (klik)
Dobijanje jednačine (3) koristeći Dirakov zapis i osnovne definicije.

Opasnost (klik)
Do sada smo posmatrali dvodimenzioni sistem, tj. kubit sa računskom bazom . Ništa nas, međutim, ne sprečava da radimo sa sistemima koji imaju više od dva nivoa. Sistem sa tri nivoa zove se kutrit (qutrit), sa bazom , a uopšteno sistem sa nivoa zove se kudit (qudit) i živi u Hilbertovom prostoru . Njegovo opšte stanje pišemo kao
gde su kompleksne amplitude, a uslov normalizacije je direktna generalizacija jednačine (3).
Isti sadržaj možemo da spakujemo u manje fizičkih nosilaca, što u nekim algoritmima smanjuje broj potrebnih kapija i međukubitnih veza. Cena je teža kontrola: više nivoa znači i više kanala za greške i složenije kapije.
Postoji poduža lista hardverskih realizacija, a ovde izdvajamo dve reprezentativne:
Innsbruck grupa — kuditi na zarobljenim jonima (arXiv:2109.06903)
University of Waterloo (arXiv:2507.15799v2)
Blohova sfera¶
Koristeći sledeća dva ugla:
: polarni ugao, ,
: azimutalni ugao (relativna faza), ,
svako jednokubitno stanje se do na globalnu fazu može zapisati u obliku
gde svako moguće stanje i odabrani ugao pokazuje na površinu sfere radijusa 1. Kao što je prikazano na slici Slika 2.
Prikaži izvođenje (klik)
Kako iz opšteg stanja (2) dolazimo do oblika (5)?
Napišimo amplitude u polarnom obliku, i , gde su moduli, a faze:
Izvučemo zajedničku (globalnu) fazu ispred zagrade:
Globalna faza ne utiče ni na jednu verovatnoću, pa je slobodno odbacujemo. Uvedimo relativnu fazu :
Normalizacija (3) daje uz . Takve tačke leže na jediničnoj kružnici u prvom kvadrantu, pa ih prirodno parametrizujemo jednim uglom:
jer za i kosinus i sinus prolaze sve nenegativne vrednosti i zadovoljavaju . Time smo dobili (5). Polovina ugla (, a ne ) osigurava da pređe ceo opseg dok stanje putuje od severnog pola () do južnog pola ().

Slika 2:Blohova sfera sa severnim i južnim polom i , pritom gde je jednokubitno stanje iz jednačine (5) prikazano sa ljubičastom bojom sa primerom dva ugla . Ostale relevantne tačke na sferi poput i su takođe date. Za ukazane vrednosti uglova potrebno je konvertovati vrednosti uglova koristeći , i to za dati primer , , i .
Vaš prvi ‘kvantni’ kod u Python-u!¶
Hajde da generišemo jednokubitna stanja, kao i napravimo vizuelizaciju Blohove sfere.
# za numeričku manipulaciju nizova, vektori, matrice, tenzori
import numpy as np
# Računska baza |0> and |1> kao ket vektori (vektori kolone)
ket0 = np.array([[1], [0]], dtype=complex)
ket1 = np.array([[0], [1]], dtype=complex)
# prikaži definicije stanja
print("Stanje nula: ")
print(ket0)
print("Stanje jedan: ")
print(ket1)Hajde sad da definišemo stanje plus kao: i (vidi Slika 2) i to
stanje koje možemo da definišemo u Python-u kao
# Definisanje linearna superpozicija stanja: |+> = (|0> + |1>)/sqrt(2)
alpha = 1/np.sqrt(2)
beta = 1/np.sqrt(2)
psi = alpha * ket0 + beta * ket1
# prikaži definiciju stanja
print("|psi> =")
print(psi)Sada možemo da proverimo normalizaciju vektora (3) za ovaj primer direktno
izračunajući što je u kodu:
psi.conj().T @ psi:
# <psi|psi> što bi trebalo da nam da 1
norm = (psi.conj().T @ psi).item().real
print("norm =", round(norm, 6))Kod za vizuelizaciju Blohove sfere¶
Sada ćemo predstaviti kod koji vizualizuje različite vektore na Blohovoj sferi i generiše samu Slika 2. Kod se sastoji od više elemenata i sledećih:
import numpy as np
import matplotlib.pyplot as plt # vizuelizacija
from mpl_toolkits.mplot3d import Axes3D # vizuelizacija za 3D
%matplotlib inline # pomoćna funkcija za vizuelizaciju unutar Jupyter notebook okruženja
Moguće je automatski uraditi konverziju uglova iz stepeni u radijane i to:
# Biranje parametara ugla: po promeni potrebno je promeniti i ponoviti egzekuciju ovog i sledećih blokova
THETA = np.radians(45) # polarni ugao: 0 -> |0>, 180 deg -> |1>
PHI = np.radians(45) # azimutalni ugao oko z ose
# --- Uglovi -> Blohov vektor r = (sin th cos ph, sin th sin ph, cos th) -
x = np.sin(THETA) * np.cos(PHI)
y = np.sin(THETA) * np.sin(PHI)
z = np.cos(THETA)
r = np.array([x, y, z])
# prikaži vrednosti
print("Blohov Vektor r =", np.round(r, 3))
print("Dužina |r| =", round(float(np.linalg.norm(r)), 3), " (= 1 za čista stanja)")
Grafičke konverzije u cilju iscrtavanja:
# Grafično generisanje sferične mreže
u = np.linspace(0, 2*np.pi, 60) # azimutalna mreža
v = np.linspace(0, np.pi, 60) # polarna mreža
xs = np.outer(np.cos(u), np.sin(v))
ys = np.outer(np.sin(u), np.sin(v))
zs = np.outer(np.ones_like(u), np.cos(v))
# Kružnica za Ekvator i dva meridijana
circ = np.linspace(0, 2*np.pi, 200)Poslednji blok koji generiše sliku:
# krajnje generisanje grafika (celokupan kod je dosta tehnički i nije neophodno razumeti ga u detalje za ovaj kurs)
fig = plt.figure(figsize=(7.5, 7.5))
ax = fig.add_subplot(111, projection="3d")
ax.plot_surface(xs, ys, zs, color="black", alpha=0.08,
linewidth=0, rstride=2, cstride=2, antialiased=True, shade=False)
ax.plot(np.cos(circ), np.sin(circ), 0, color="#555555", lw=0.8, alpha=0.6) # equator
ax.plot(np.cos(circ), 0*circ, np.sin(circ), color="#bbbbbb", lw=0.6) # xz meridian
ax.plot(0*circ, np.cos(circ), np.sin(circ), color="#bbbbbb", lw=0.6) # yz meridian
L = 1.3
axis_kw = dict(lw=1.3, arrow_length_ratio=0.05)
for d, col in [((1,0,0), "#c0392b"), ((0,1,0), "#27ae60"), ((0,0,1), "#34495e")]:
dx, dy, dz = d
ax.quiver(0,0,0, L*dx, L*dy, L*dz, color=col, **axis_kw) # positive
ax.quiver(0,0,0, -L*dx, -L*dy, -L*dz, color=col, **axis_kw) # negative
# small axis letters at the positive tips
ax.text(1.45, 0, 0, r"$x$", color="#c0392b", fontsize=11, alpha=0.7)
ax.text(0, 1.42, 0, r"$y$", color="#27ae60", fontsize=11, alpha=0.7)
ax.text(0, 0, 1.45, r"$z$", color="#34495e", fontsize=11, alpha=0.7)
poles = [
(( 0, 0, 1), r"$|0\rangle$", "#34495e", ( 0.1, -0.1, 0.10)),
(( 0, 0,-1), r"$|1\rangle$", "#34495e", ( 0.1, -0.1, -0.12)),
(( 1, 0, 0), r"$|{+}\rangle$", "#c0392b", (0.14,-0.02, 0.10)),
((-1, 0, 0), r"$|{-}\rangle$", "#c0392b", (-0.30,0.00, 0.10)),
(( 0, 1, 0), r"$|{+}i\rangle$", "#27ae60", (0.02, 0.14, 0.10)),
(( 0,-1, 0), r"$|{-}i\rangle$", "#27ae60", (0.02,-0.28, 0.10)),
]
for (px,py,pz), lab, col, (ox,oy,oz) in poles:
ax.scatter(px, py, pz, color=col, s=55, edgecolors="white", linewidths=0.8, zorder=5)
ax.text(px+ox, py+oy, pz+oz, lab, color=col, fontsize=13, ha="center")
ax.quiver(0,0,0, r[0], r[1], r[2], color="#8e44ad", lw=3.0, arrow_length_ratio=0.12, zorder=6)
ax.scatter(*r, color="#8e44ad", s=45, zorder=6)
ax.text(r[0]*1.12, r[1]*1.12, r[2]*1.12+0.06, r"$|\psi\rangle$", color="#8e44ad", fontsize=14)
ax.plot([r[0], r[0]], [r[1], r[1]], [0, r[2]], color="#8e44ad", ls=":", lw=1)
ax.plot([0, r[0]], [0, r[1]], [0, 0], color="#8e44ad", ls=":", lw=1.2)
ARC = "#e67e22"
nx, ny = np.cos(PHI), np.sin(PHI) # xy-plane direction of the projection
tp = np.linspace(0, PHI, 40)
ax.plot(0.32*np.cos(tp), 0.32*np.sin(tp), 0, color=ARC, lw=1.8)
ax.text(0.46*np.cos(PHI/2), 0.46*np.sin(PHI/2), 0.0, r"$\varphi$",
color=ARC, fontsize=14, ha="center")
tt = np.linspace(0, THETA, 40)
ax.plot(0.40*np.sin(tt)*nx, 0.40*np.sin(tt)*ny, 0.40*np.cos(tt), color=ARC, lw=1.8)
tm = THETA/2
ax.text(0.52*np.sin(tm)*nx, 0.52*np.sin(tm)*ny, 0.52*np.cos(tm), r"$\theta$",
color=ARC, fontsize=14, ha="center")
a, b = np.cos(THETA/2), np.sin(THETA/2)
ax.set_title(rf"$|\psi\rangle = {a:.2f}\,|0\rangle + e^{{i\,{PHI:.2f}}}\,{b:.2f}\,|1\rangle$"
+ f"\n$\\theta={np.degrees(THETA):.0f}^\\circ,\\ \\varphi={np.degrees(PHI):.0f}^\\circ$",
fontsize=13, pad=8)
ax.set_box_aspect([1, 1, 1])
ax.set_xlim(-1.1, 1.1); ax.set_ylim(-1.1, 1.1); ax.set_zlim(-1.1, 1.1)
ax.set_axis_off()
ax.view_init(elev=18, azim=35)
plt.tight_layout()
plt.savefig("blohova_sfera.png", dpi=300, bbox_inches="tight")
plt.show()Izlaz ova 4 bloka koda je zapravo Slika 2.
Specijalna stanja na Blohovoj sferi¶
Najčešće izdvajamo šest posebnih čistih stanja koja leže na koordinatnim osama Blohove sfere. Zovemo ih stabilizatorska stanja i ona su temena oktaedra upisanog u sferu:
| Stanje | Definicija | ||
|---|---|---|---|
| severni pol | 0 | bilo koje | |
| južni pol | bilo koje | ||
| 0 | |||
Za polarne tačke i izbor za je proizvoljan, jer svi azimutalni uglovi opisuju isti pol.
Magična stanja¶
U literaturi se pod imenom „T stanje" ili „magično stanje" najčešće sreću tri predstavnika, koje je lako pomešati. Zato ih ovde izdvajamo zajedno:
| Stanje | Definicija | Blohov vektor | ||
|---|---|---|---|---|
| , | 0.789 | |||
| 0.854 | ||||
| 0.5 |

Slika 3:Šest stabilizatorskih stanja čine temena oktaedra upisanog u Blohovu sferu. Tri magična stanja su takođe prikazana: (zlatna) probija sferu kroz centar strane, dok (ljubičasta) i (tirkizna) leže na sredinama ivica oktaedra.
Prikaži kod za generisanje Slika 3 (klik)
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D # 3D projekcija
from mpl_toolkits.mplot3d.art3d import Poly3DCollection # trougaone strane oktaedra
%matplotlib inline
# --- mreža sfere i pomoćna kružnica -----------------------------------
u = np.linspace(0, 2*np.pi, 60) # azimutalna mreža
v = np.linspace(0, np.pi, 60) # polarna mreža
xs = np.outer(np.cos(u), np.sin(v))
ys = np.outer(np.sin(u), np.sin(v))
zs = np.outer(np.ones_like(u), np.cos(v))
circ = np.linspace(0, 2*np.pi, 200)
fig = plt.figure(figsize=(7.5, 7.5))
ax = fig.add_subplot(111, projection="3d")
# --- providna SIVA sfera ----------------------------------------------
ax.plot_surface(xs, ys, zs, color="black", alpha=0.06,
linewidth=0, rstride=2, cstride=2, antialiased=True, shade=False)
# --- blede vodeće kružnice --------------------------------------------
ax.plot(np.cos(circ), np.sin(circ), 0, color="#555555", lw=0.8, alpha=0.5) # ekvator
ax.plot(np.cos(circ), 0*circ, np.sin(circ), color="#bbbbbb", lw=0.6) # xz meridijan
ax.plot(0*circ, np.cos(circ), np.sin(circ), color="#bbbbbb", lw=0.6) # yz meridijan
# --- tri ose, oba smera -----------------------------------------------
L = 1.3
axis_kw = dict(lw=1.3, arrow_length_ratio=0.05)
for d, col in [((1,0,0), "#c0392b"), ((0,1,0), "#27ae60"), ((0,0,1), "#34495e")]:
dx, dy, dz = d
ax.quiver(0,0,0, L*dx, L*dy, L*dz, color=col, **axis_kw)
ax.quiver(0,0,0, -L*dx, -L*dy, -L*dz, color=col, **axis_kw)
ax.text(1.45, 0, 0, r"$x$", color="#c0392b", fontsize=11, alpha=0.7)
ax.text(0, 1.42, 0, r"$y$", color="#27ae60", fontsize=11, alpha=0.7)
ax.text(0, 0, 1.45, r"$z$", color="#34495e", fontsize=11, alpha=0.7)
# --- OKTAEDAR: 8 trougaonih strana (po jedan pol sa svake ose) --------
faces = [[(sx,0,0), (0,sy,0), (0,0,sz)]
for sx in (1,-1) for sy in (1,-1) for sz in (1,-1)]
ax.add_collection3d(Poly3DCollection(faces, facecolor="#2980b9",
edgecolor="none", alpha=0.16))
# --- ivice oktaedra = tri kvadrata u koordinatnim ravnima -------------
for sq in [[(1,0,0), (0,1,0), (-1,0,0), (0,-1,0), (1,0,0)], # xy kvadrat
[(1,0,0), (0,0,1), (-1,0,0), (0,0,-1), (1,0,0)], # xz kvadrat
[(0,1,0), (0,0,1), (0,-1,0), (0,0,-1), (0,1,0)]]: # yz kvadrat
a = np.array(sq)
ax.plot(a[:,0], a[:,1], a[:,2], color="#1f5f8b", lw=1.6)
# --- šest temena + oznake sopstvenih stanja ---------------------------
poles = [
(( 0, 0, 1), r"$|0\rangle$", "#34495e", ( 0.16, -0.16, 0.10)),
(( 0, 0,-1), r"$|1\rangle$", "#34495e", ( 0.16, -0.16, -0.12)),
(( 1, 0, 0), r"$|{+}\rangle$", "#c0392b", ( 0.14, -0.02, 0.10)),
((-1, 0, 0), r"$|{-}\rangle$", "#c0392b", (-0.30, 0.00, 0.10)),
(( 0, 1, 0), r"$|{+}i\rangle$", "#27ae60", ( 0.02, 0.14, 0.10)),
(( 0,-1, 0), r"$|{-}i\rangle$", "#27ae60", ( 0.02, -0.28, 0.10)),
]
for (px,py,pz), lab, col, (ox,oy,oz) in poles:
ax.scatter(px, py, pz, color=col, s=55, edgecolors="white", linewidths=0.8, zorder=5)
ax.text(px+ox, py+oy, pz+oz, lab, color=col, fontsize=13, ha="center")
# ================= TRI MAGIČNA STANJA =================================
# Dva "tipa" (do na Klifordovu ekvivalenciju):
# * T-tip -> centar STRANE oktaedra: |T> na (1,1,1)/sqrt3
# * H-tip -> sredina IVICE oktaedra: |H> na (1,0,1)/sqrt2, |A>=T|+> na (1,1,0)/sqrt2
COL_T = "#d4a017" # zlatna – T-tip
COL_H = "#8e44ad" # ljubičasta – H-tip (Hadamardovo svojstveno stanje)
COL_A = "#16a085" # tirkizna – A-tip = T|+> (takođe H-tip klasa)
# --- |T> : T-tip, centar +++ strane ----------------------------------
T = np.array([1, 1, 1]) / np.sqrt(3) # na sferi
face_c = np.array([1, 1, 1]) / 3 # težište +++ trougaone strane
ax.add_collection3d(Poly3DCollection( # istakni +++ stranu kroz koju |T> probija
[[(1,0,0), (0,1,0), (0,0,1)]], facecolor=COL_T,
edgecolor="#b8860b", lw=1.2, alpha=0.22))
ax.plot([face_c[0], T[0]], [face_c[1], T[1]], [face_c[2], T[2]],
color="#b8860b", ls=":", lw=1.3, zorder=6) # linija „probijanja"
ax.quiver(0,0,0, *T, color=COL_T, lw=2.6, arrow_length_ratio=0.12, zorder=7)
ax.scatter(*T, color=COL_T, s=62, edgecolors="white", linewidths=0.8, zorder=8)
ax.text(T[0]+0.10, T[1]+0.06, T[2]+0.16, r"$|T\rangle$",
color="#b8860b", fontsize=14, ha="center", zorder=8)
# --- |H> : Hadamardovo svojstveno stanje, sredina +X/+Z ivice --------
H = np.array([1, 0, 1]) / np.sqrt(2)
ax.plot([1, 0], [0, 0], [0, 1], color=COL_H, lw=3.2, zorder=6) # istaknuta ivica
ax.quiver(0,0,0, *H, color=COL_H, lw=2.6, arrow_length_ratio=0.12, zorder=7)
ax.scatter(*H, color=COL_H, s=62, edgecolors="white", linewidths=0.8, zorder=8)
ax.text(H[0]+0.12, H[1]-0.02, H[2]+0.12, r"$|H\rangle$",
color=COL_H, fontsize=14, ha="center", zorder=8)
# --- |A> = T|+> : sredina +X/+Y ivice (na ekvatoru) ------------------
A = np.array([1, 1, 0]) / np.sqrt(2)
ax.plot([1, 0], [0, 1], [0, 0], color=COL_A, lw=3.2, zorder=6) # istaknuta ivica
ax.quiver(0,0,0, *A, color=COL_A, lw=2.6, arrow_length_ratio=0.12, zorder=7)
ax.scatter(*A, color=COL_A, s=62, edgecolors="white", linewidths=0.8, zorder=8)
ax.text(A[0]+0.06, A[1]+0.16, A[2]+0.06, r"$|A\rangle$",
color=COL_A, fontsize=13, ha="center", zorder=8)
# ======================================================================
# --- kozmetika --------------------------------------------------------
ax.set_title("Šest stabilizatorskih stanja (temena oktaedra) i tri magična stanja:\n"
r"$|T\rangle$ (centar strane), $|H\rangle$ i $|A\rangle$ (sredine ivica)",
fontsize=11.5, pad=6)
ax.set_box_aspect([1, 1, 1])
ax.set_xlim(-1.1, 1.1); ax.set_ylim(-1.1, 1.1); ax.set_zlim(-1.1, 1.1)
ax.set_axis_off()
ax.view_init(elev=22, azim=35)
plt.tight_layout()
plt.savefig("oktaedar.png", dpi=300, bbox_inches="tight")
plt.show()Interpretacija stanja kao verovatnoća¶
Naposletku, hajde da damo definiciju koja daje verovatnoću nekog ishoda
kao kvadrat modula kompleksnog skalarnog broja
Za recimo:
da stanje se pronađe u stanju ,
da stanje se pronađe u stanju .
Izračunajmo primer za stanje .
Prikaži računicu (klik)

Pomoću sledećeg koda možemo uraditi račun numerički:
# Računska baza |0> and |1> kao ket vektori (vektori kolone)
ket0 = np.array([[1], [0]], dtype=complex)
ket1 = np.array([[0], [1]], dtype=complex)
# Definisanje linearna superpozicija stanja: |+> = (|0> + |1>)/sqrt(2)
alpha = 1/np.sqrt(2)
beta = 1/np.sqrt(2)
psi = alpha * ket0 + beta * ket1
# Verovatnoća da izmerimo ishod k u računskoj bazi
p0 = abs((ket0.conj().T @ psi).item())**2
p1 = abs((ket1.conj().T @ psi).item())**2
print("p(0) =", round(p0, 3))
print("p(1) =", round(p1, 3))Očekivani rezultat bi trebalo da bude i za oba slučaja. Ukoliko saberemo ove verovatnoće, one bi trebalo da izađu na .
Kao što vidimo, kvantna mehanika je u stvari neka vrsta generalizovane teorije verovatnoće sa posebnim pravilima gde kvadrati koeficijenata linearne superpozicije svi treba da se saberu na 1, što predstavlja zakon očuvanja ukupne verovatnoće.
Vežbe¶
Reši sledeće zadatke koristeći samo gradivo iz ove lekcije: definiciju kubita i normalizaciju (3), Dirakovu bra-ket notaciju, Blohovu sferu (5), tabelu specijalnih stanja i Bornovo pravilo (11).
Zagrevanje: normalizacija i verovatnoće¶
Rešenje
Uslov normalizacije (3) daje , tj.
Kratak Python kod koji proverava rešenje.
alpha = 0.5
beta = np.sqrt(3)/2
psi = alpha*ket0 + beta*ket1
norm = (psi.conj().T @ psi).item().real
print("beta =", round(beta, 4), " |psi|^2 =", round(norm, 6)) # 0.866 1.0Rešenje
Po Bornovom pravilu (11) je i . Zbir je , kao što i treba.
psi = 0.5*ket0 + (np.sqrt(3)/2)*ket1
p0 = abs((ket0.conj().T @ psi).item())**2
p1 = abs((ket1.conj().T @ psi).item())**2
print("p(0) =", round(p0, 3), " p(1) =", round(p1, 3)) # 0.25 0.75Rešenje
Ovde je i . Pošto je , dobijamo . Znak minus je relativna faza i ne utiče na merenje u računskoj bazi.
psi = (1/np.sqrt(2))*ket0 - (1/np.sqrt(2))*ket1
p0 = abs((ket0.conj().T @ psi).item())**2
p1 = abs((ket1.conj().T @ psi).item())**2
print("p(0) =", round(p0, 3), " p(1) =", round(p1, 3)) # 0.5 0.5Rešenje
Pošto je , sledi , pa je stanje normirano. Dalje je i . Kvadrat modula „pojede“ fazu .
psi = (1/np.sqrt(2))*ket0 + (1j/np.sqrt(2))*ket1 # 1j je imaginarna jedinica
norm = (psi.conj().T @ psi).item().real
p0 = abs((ket0.conj().T @ psi).item())**2
p1 = abs((ket1.conj().T @ psi).item())**2
print("|psi|^2 =", round(norm, 6), " p(0) =", round(p0, 3), " p(1) =", round(p1, 3))Blohova sfera: uglovi, vektori, stanja¶
Rešenje
— vrh na pozitivnoj -osi, što odgovara stanju .
THETA = np.radians(90)
PHI = np.radians(90)
r = np.array([np.sin(THETA)*np.cos(PHI),
np.sin(THETA)*np.sin(PHI),
np.cos(THETA)])
print("r =", np.round(r, 3)) # [0. 1. 0.] -> |+i>Rešenje
Iz i realnih, pozitivnih amplituda sledi i . Provera: . ✓
theta = 2*np.arccos(np.sqrt(3)/2)
print("theta =", round(np.degrees(theta), 1), "stepeni, phi = 0") # 60.0
print("provera sin(theta/2) =", round(np.sin(theta/2), 3)) # 0.5Faze, geometrija i opšte formule¶
Rešenje
, jer je . Globalna faza nestaje pri kvadriranju modula.
psi = 0.5*ket0 + (np.sqrt(3)/2)*ket1
gamma = 1.234
psi_g = np.exp(1j*gamma) * psi # ista fizika, druga globalna faza
p0 = abs((ket0.conj().T @ psi ).item())**2
p0_g = abs((ket0.conj().T @ psi_g).item())**2
print("p(0) bez faze =", round(p0, 6), " sa fazom =", round(p0_g, 6)) # istoRešenje
i . Pošto je , verovatnoće zavise samo od polarnog ugla . Provera: .
theta = np.radians(60)
for phi_deg in [0, 30, 90, 200]: # menjamo samo phi
phi = np.radians(phi_deg)
psi = np.cos(theta/2)*ket0 + np.exp(1j*phi)*np.sin(theta/2)*ket1
p0 = abs((ket0.conj().T @ psi).item())**2
p1 = abs((ket1.conj().T @ psi).item())**2
print("phi =", phi_deg, " p0,p1 =", round(p0,4), round(p1,4))
# uvek 0.75 0.25 -> cos^2(30) = 0.75Jovan Odavić · dzovan90 [at] gmail [dot] com · www.jovanodavic.com