[PYTHON] Qiskit: Quanten-Fourier-Transformation

Überblick

Die Quanten-Fourier-Transformation ist eine Implementierung einer diskreten Fourier-Transformation auf einer Quantenschaltung. Ich werde die ausführliche Erklärung dem Nachschlagewerk und anderen Websites überlassen, und hier möchte ich sie mit Qiskit implementieren. Es ist komplett ein Denkmal, also mach dir keine Sorgen um die Details. In Zukunft möchte ich andere Algorithmen mit diesem Code implementieren.

code

python


# coding: utf-8

from qiskit import QuantumRegister, QuantumCircuit, ClassicalRegister
from math import log2, pi
import numpy as np


class QFT:

    def __init__(self, numQubit):
        self.numQubit = numQubit

    def construct_circuit(self, circuit=None, inverse=False):
        if circuit is None:
            circuit = QuantumCircuit(range(self.numQubit))
        if not inverse:
            self._input_initial_state(circuit)
            self._qft(circuit)
            self._swap_registers(circuit)
            return circuit
        elif inverse:
            self._swap_registers(circuit)
            self._qft(circuit, inverse=True)
            self._input_initial_state(circuit, inverse=True)
            return circuit

    def _input_initial_state(self, circuit, inverse=False):
        if not inverse:
            for j in range(self.numQubit):
                circuit.h(j)
                circuit.u1(-pi / float(2 ** j), j)
        elif inverse:
            for j in range(self.numQubit):
                circuit.u1(-pi / float(2 ** j), j)
                circuit.h(j)

    def _qft(self, circuit, inverse=False):
        if not inverse:
            for j in range(self.numQubit):
                circuit.h(j)
                for k in range(j + 1, self.numQubit):
                    circuit.cu1(pi / float(2 ** (k - j)), k, j)
        elif inverse:
            for j in range(self.numQubit).__reversed__():
                for k in range(j + 1, self.numQubit).__reversed__():
                    circuit.cu1(pi / float(2 ** (k - j)), k, j)
                circuit.h(j)
        circuit.barrier()

    def _swap_registers(self, circuit):
        for j in range(int(np.floor(self.numQubit / 2.))):
            circuit.swap(j, self.numQubit - j - 1)

Verweise

[1]Qiskit textbook

Recommended Posts

Qiskit: Quanten-Fourier-Transformation
Quantenteleportation mit Qiskit!
Fourier-Transformation von Rohdaten
Signalverarbeitung in Python (1): Fourier-Transformation
Qiskit: Implementierung von Quantenhypergraphzuständen
Eigenschaften der diskreten Fourier-Transformation
Qiskit: Implementierung von Quantum Circuit Learning (QCL)