больше кодовввв

This commit is contained in:
2025-11-19 11:27:58 +03:00
parent 8fbcb933a6
commit 7c58e681b2
5 changed files with 739 additions and 0 deletions

69
task8/qft.py Normal file
View 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()