{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Quantum Fourier Transform \n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from qiskit import *\n", "from math import pi\n", "import numpy as np\n", "from qiskit.visualization import *\n", "import matplotlib.pyplot as plt\n", "from qutip import *" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "QFT is defined as\n", "\n", "$ QFT:|x> = \\frac{1}{\\sqrt{N}}\\sum_{k=0}^{N-1} \\omega_{x}^{k}|k>$\n", "\n", "where $\\omega_{x}^{k}$ is $N^{th}$ ($N = 2^{n}$) root of unity: $e^{\\frac{2\\pi i}{2^{n}}}$.\n", "\n", "QFT: $F_{N} = \\frac{1}{\\sqrt{N}} \\begin{bmatrix}\n", " 1 & 1 & 1 & 1 & \\cdots & 1 \\\\\n", " 1 & \\omega_{n} & \\omega_{n}^{2} & \\omega_{n}^{3} & \\cdots & \\omega_{n} ^{N-1}\\\\\n", " 1 & \\omega_{n}^{2} & \\omega_{n}^{4} & \\omega_{n}^{6} & \\cdots & \\omega_{n} ^{2(N-1)}\\\\\n", " 1 & \\omega_{n}^{3} & \\omega_{n}^{6} & \\omega_{n}^{9} & \\cdots & \\omega_{n} ^{3(N-1)}\\\\\n", " \\vdots & \\vdots & \\vdots & \\vdots & \\dots & \\vdots \\\\\n", " 1 & \\omega_{n}^{(N-1)} & \\omega_{n}^{2(N-1)} & \\omega_{n}^{3(N-1)} & \\cdots & \\omega_{n} ^{(N-1((N-1)}\\\\\n", "\\end{bmatrix}$\n", "\n", "\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1. QFT ( 1 qubit)\n", "\n", "\n", "\n", "For single qubit circuit ($n = 1, N = 2^{1} = 2)$\n", "\n", "\n", "$\\omega_n = e^{\\frac{2\\pi i}{2^{n}}} = -1$.\n", "\n", "QFT = $\\frac{1}{\\sqrt{2}} \\begin{bmatrix}\n", " 1 & 1 \\\\\n", " 1 & -1\n", "\\end{bmatrix}$\n", " \n", "It is very simple, QFT in single qubit id just a Hadamate operation.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2. QFT (2 qubits)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", " \n", "For two qubit circuit, ($n =2, N = 2^{2} = 4)$\n", "\n", "\n", "$\\omega_{n} = e^{\\frac{2\\pi i}{2^{n}}} = i$\n", "\n", "$QFT_2 = \\frac{1}{{2}} \\begin{bmatrix}\n", " 1 & 1 & 1 & 1\\\\\n", " 1 & i & -1 & -i\\\\\n", " 1 & -1 & 1 & -1\\\\\n", " 1 & -i & -1 & i\n", "\\end{bmatrix}$\n", " \n", "Our task is to represent this matrix in terms of fundamental gate metrix." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 2.2 Circuit" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "qc = QuantumCircuit(2)\n", "qc.h(1)\n", "qc.barrier()\n", "qc.cu1(np.pi/2, 0, 1)\n", "qc.barrier()\n", "qc.h(0)\n", "qc.barrier()\n", "qc.swap(0,1)\n", "qc.draw('mpl')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 2.3 State vector\n", "\n", "Lets observe what happens to quantum state as we pass through these quantum gates one by one: \n", "\n", "\n", "\n", "