больше кодовввв
This commit is contained in:
69
task8/qft.py
Normal file
69
task8/qft.py
Normal file
@@ -0,0 +1,69 @@
|
||||
"""
|
||||
Реализация Квантового Преобразования Фурье (QFT) для произвольного числа кубитов n.
|
||||
"""
|
||||
|
||||
import cirq
|
||||
import numpy as np
|
||||
|
||||
|
||||
# === Функция построения схемы QFT ===
|
||||
def qft_circuit(n: int) -> cirq.Circuit:
|
||||
"""Создаёт схему квантового преобразования Фурье (QFT) для n кубитов."""
|
||||
qubits = [cirq.LineQubit(i) for i in range(n)]
|
||||
circuit = cirq.Circuit()
|
||||
|
||||
# Для каждого кубита применяем Hadamard и контролируемые фазовые повороты
|
||||
for i in range(n):
|
||||
circuit.append(cirq.H(qubits[i]))
|
||||
for j in range(i + 1, n):
|
||||
angle = 1 / (2 ** (j - i))
|
||||
circuit.append(cirq.CZ(qubits[j], qubits[i]) ** angle)
|
||||
|
||||
# После всех поворотов меняем порядок кубитов на обратный
|
||||
for i in range(n // 2):
|
||||
circuit.append(cirq.SWAP(qubits[i], qubits[n - i - 1]))
|
||||
|
||||
return circuit
|
||||
|
||||
|
||||
# === Главная функция ===
|
||||
def main():
|
||||
n = 4 # число кубитов
|
||||
input_state_str = "0111"
|
||||
|
||||
print(f"=== Квантовое преобразование Фурье (QFT) для {n} кубитов ===")
|
||||
print(f"Исходное состояние: |{input_state_str}>")
|
||||
|
||||
# --- Создаём кубиты ---
|
||||
qubits = [cirq.LineQubit(i) for i in range(n)]
|
||||
circuit = cirq.Circuit()
|
||||
|
||||
# Переводим строку в установку нужных кубитов в |1>
|
||||
for i, bit in enumerate(
|
||||
reversed(input_state_str)
|
||||
): # reversed, чтобы младший бит был справа
|
||||
if bit == "1":
|
||||
circuit.append(cirq.X(qubits[i])) # применяем оператор X (NOT)
|
||||
|
||||
# --- Добавляем саму QFT ---
|
||||
circuit += qft_circuit(n)
|
||||
|
||||
print("\nСхема:")
|
||||
print(circuit)
|
||||
|
||||
# --- Симуляция ---
|
||||
simulator = cirq.Simulator()
|
||||
result = simulator.simulate(circuit)
|
||||
state = result.final_state_vector
|
||||
|
||||
# --- Вычисляем фазы ---
|
||||
phases = np.angle(state)
|
||||
|
||||
print("\n=== Результирующее состояние (амплитуды и фазы) ===")
|
||||
for i, (amp, phi) in enumerate(zip(state, phases)):
|
||||
if abs(amp) > 1e-9: # пропускаем элементы с амплитудой близкой к 0
|
||||
print(f"|{i:0{n}b}>: amp={abs(amp):.3f}, phase={phi:.3f} rad")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user