Kvantumszámítógép-szimuláció a qubiteket állapotvektorokkal (vektorok), a kvantumkapukat pedig unitér mátrixokkal (mátrixszorzás) reprezentáljuk. Íme egy egyszerű, 2-qubites példaprogram egy Bell-állapot (összefonódott állapot) előállítására és mérésére.
Állapotvektorok: A qubiteket kétdimenziós komplex vektorok írják le. Két qubit együttes állapotát a tenzorszorzás (np.kron) segítségével számítjuk ki, így kapunk egy 4-dimenziós vektort.
Mátrixok: A kvantumlogikai kapuk (mint a Hadamard vagy a CNOT) unitér mátrixok. Az állapot megváltoztatását mátrixszorzással (np.dot) végezzük.
Mérés: A kvantummechanika szabályai szerint a mérés kimenetelének valószínűségét az állapotvektor elemeinek négyzete határozza meg, a konkrét végeredményt pedig a np.random.choice segítségével szimuláljuk ezen valószínűségek alapján.
-------------------------------
import numpy as np
# 1. Alapállapotok definiálása
zero = np.array([1.0, 0.0], dtype=complex)
one = np.array([0.0, 1.0], dtype=complex)
# 2. Kvantumkapuk definiálása
H_gate = (1 / np.sqrt(2)) * np.array([[1, 1], [1, -1]], dtype=complex)
CNOT_gate = np.array([[1, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 0, 1],
[0, 0, 1, 0]], dtype=complex)
# 3. Kvantumrendszer inicializálása: |00> állapot
# A tenzorszorzás (np.kron) segítségével hozzuk létre a többqubites állapotokat
initial_state = np.kron(zero, zero)
# 4. Áramkör szimulációja lépésről lépésre
# 1. lépés: Hadamard kapu alkalmazása az első qubitesre
# Az I_gate az identitásmátrix, ami jelzi, hogy a 2. qubitemmel nem történik semmi
I_gate = np.eye(2, dtype=complex)
step1_gate = np.kron(H_gate, I_gate)
state_after_H = np.dot(step1_gate, initial_state)
# 2. lépés: CNOT kapu alkalmazása (1. qubit a vezérlő, 2. a cél)
final_state = np.dot(CNOT_gate, state_after_H)
print("A rendszer végső állapota:\n", np.round(final_state, 4))
# 5. Eredmények mérése (valószínűségi eloszlás számítása)
# A valószínűség az amplitúdók abszolútértékének négyzete
probabilities = np.abs(final_state) ** 2
# Eredmények megjelenítése
outcomes = ['00', '01', '10', '11']
print("\nMérési valószínűségek:")
for outcome, prob in zip(outcomes, probabilities):
print(f"{outcome}: {prob:.4f}")
# 6. Szimulált mérés
measured_outcome = np.random.choice(outcomes, p=probabilities)
print(f"\nA szimuláció során mért érték: {measured_outcome}")
-------------
Eredmény
----------
A rendszer végső állapota:
[0.7071+0.j 0. +0.j 0. +0.j 0.7071+0.j]
Mérési valószínűségek:
00: 0.5000
01: 0.0000
10: 0.0000
11: 0.5000
A szimuláció során mért érték: 00
** Process exited - Return Code: 0 **
Nincsenek megjegyzések:
Megjegyzés küldése