{ "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": "iVBORw0KGgoAAAANSUhEUgAAAdMAAAB7CAYAAAAvxmqaAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAEb1JREFUeJzt3X9QlPedB/D3LiC/8RcC/orBCrJsgEE06pkIpjFnTXqd9Ch3GtM5bYIh0IlOTG9y9iQOiWYMlSSjcpmaTpypXiuYNuai7dmr7CWNGjDWAMqtZK0riIgalEVAfuz9QfyxIuwuD/t8v8+z79eMM/rlgf3knYU3z7PP86zB6XQ6QURERMNmFD0AERGR1rFMiYiIFGKZEhERKcQyJSIiUohlSkREpBDLlIiISCGWKRERkUIsUyIiIoVYpkRERAqxTImIiBRimRIRESnEMiUiIlKIZUpERKQQy5SIiEghlikREZFCLFMiIiKFWKZEREQKsUyJiIgUYpkSEREpFCh6AKLhqKurc7vNtm3bUFBQMOQ2SUlJIzWSbo1E1szZM+6y5nNaXtwzJd3avn276BH8BrNWB3OWF8uUiIhIIZYpERGRQixT0q3y8nLRI/gNZq0O5iwvlikREZFCLFPSrezsbNEj+A1mrQ7mLC+WKRERkUK8zpSINGvNbjGP+/YzYh6X5MU9U9Kt/Px80SP4DWatDuYsL5Yp6Za7O8XQyGHW6mDO8mKZkm4tXLhQ9Ah+g1mrgznLi2VKutXS0iJ6BL/BrNXBnOXFMiUiIlKIZUq6lZycLHoEv8Gs1cGc5cUyJd3at2+f6BH8BrNWh8w593YDfT2eb9/dCTidvptHbSxT0q0NGzaIHsFvMGt1yJpzbzdw8vfAyY88K9QuB1C5GzhToZ9CZZmSbpWVlYkewWNOJ9DdAdy8oc0fLlrKWstkzbmzDWi7BFw5675QuxzA8d8CN74Brtr7i1gPWKZe6uvrQ3FxMRISEhASEoK0tDRYLBbMnDkTubm5oscjjXE6gcZq4OguwLId+N8dwGfvAWeP6eeHjEx2FkxCTcX7LmtOpxOlz0WhvvJ3gqbSvvBxwKwcICh06EK9u0gjJgCzfgQEjlJ/Xl9gmXpp1apVKCoqwurVq3Hw4EHk5ORg2bJlsNlsyMjIED0eaYjTCZz6A3D6j0D7lTvrXQ7g60+B43uB3pvi5tMbx9VGtLc2YcIDaS7r1y7ZcLOzDbHTZwuaTB8iJwxdqPcr0lFh4uYdaSxTL+zZswe7du3C/v37sW7dOixatAjr16/H/Pnz0dPTc7tMm5ub8cQTTyAsLAxpaWk4ceKE4Mn9k8ViET3CkC7UAE213/7jPod2rzcB9Z+pOtKwyZ41ADTbKmEwBmD8FLPL+mX7SYSNjkXk+KmCJvOc7DkPVqh6L1KAZeqVzZs3Y8mSJcjMzHRZnzFjBoKCgpCSkgIAyMvLQ1JSEq5cuYL8/HxkZ2ejt7dXxMh+rba21v1GgjidwPkvARiG3u5CNdCjgb1TmbO+pdlWibFxiQgcFeqy3mI/iZh4beyVaiHnewv1xIdA1W/0XaQA3zXGYw0NDaipqcHatWsHfMxut8NsNiM4OBhtbW345JNP0NjYiNDQUOTm5mLTpk04evQoFixY4JPZDAY3P5F16H7/H+5VUlLidruSkpKRGskrYcGR+Oj162636+0G0pMeRc1ZcbuoI5G1r3J+6deen63VbKtEa3M93nsh2mW9u8uB2d9/1avH9dX3nCfPV1mf0/eKn5iC4hcqAPs4AMDXF07iZ4XfxfV/uTL0J0rE6cXZgCxTDzU0NAAA4uLiXNY7OjpgsViwdOlSAMCZM2cwfvx4REff+YZNSUnBqVOnfFampD1GY4Dn2xo835YG13y2CnN/+BpMj/zYZX33qymI1cieqZZcc7TgRsd1RIX1l2mr4xI6utoET+U7LFMP3SpHq9V6uzgBYMuWLWhqasKsWbMAAO3t7YiKinL53KioKDgcDp/N5s1vT3pRV1fndpuSkhK3Z1hv3bp1pEbyitMJ/OWXQKebnVODEaisrhB6WGwksvZVzp6+n2nrxXp0tX+Daal/j8jxU1zXb7QixsuTj3z1Pecua5mf03e7+zXSWzISF+PYb7uQ9gPAqMPm0eF/km9Mnz4dqamp2LRpE8aNG4fJkyejvLwcBw4cAIDbJx+Fh4ejrc31t6/r168jIiJC9Zn93caNG0WPMCiDAZiaDpwZ6nwSAxCbpI3Xl2TOGug/xBsYHDbgTN6mM58jYvxUhI+OFTSZd2TPGRh4spHj23vz331Skh4LlScgechoNKKsrAxmsxl5eXlYuXIloqOjkZ+fj8DAQKSmpgIAEhIScPnyZVy5cud1gZqaGt5TU4CcnBzRIwxpSjowZvIgHzQAIRFAgkbecUv2rJttlYiNnwNjgOtP8Kb6I5o6xCt7zvc7a/cWT65D1TKWqRcSExNx+PBhtLe3w263o6ioCNXV1TCZTAgN7T9DMDIyEk8++SSKiorQ2dmJnTt3wmAwYN68eYKn9z8mk0n0CEMKCATSs4Fps4GAuy5cNxiBiSZgzgogWCMHNGTPeuGKrcj+ecWA9cdWluKpNR+qP9AwyZyzu8tf3F2HqnUsU4WqqqoG3KyhtLQUtbW1GDt2LN59913s27cPAQE8iYQGCggCErKAhXl31h7NA8xLgeBwYWMRecXT60j1XKg6O2qtLofDAavVihdffNFlPTY2FocOHRI0FWlRQNCdv99zGSSR9AyG/iMqnlxHeqtQv9wLGAPg9lprrWCZKhAREcGbMUgsKytL9Ah+g1mrQ9acR4UDGTkADJ6dMBc5AZizHAiJ+rZQdYBlSrpVWloqegS/wazVIXPOo7x8WSJsrG/mEIWvmZJu5eXlud+IRgSzVgdzlhfLlHSroqJC9Ah+g1mrgznLi2VKRESkEMuUiIhIIZYp6dbp06dFj+A3mLU6mLO8WKakW3v37hU9gt9g1upgzvLipTGkW4WFhdLfy1QvRGX99jOqP6RQfE7Li3umRERECrFMiYiIFGKZkm7t2LFD9Ah+g1mrgznLi2VKumU2m0WP4DeYtTqYs7xYpqRbmZmZokfwG8xaHcxZXixTIiIihVimRERECrFMSbfmzJkjegS/wazVwZzlxTIl3aqsrBQ9gt9g1upgzvJimRIRESnEMiUiIlKIZUq6VV5eLnoEv8Gs1cGc5cUyJSIiUohlSrqVnZ0tegS/wazVwZzlxTIlIiJSiO9n6ifW7BbzuP72fpMA8KdiMZ//+Dplj0tEw8c9U9Kt/Px80SP4DWatDuYsL5Yp6VZBQYHoEfwGs1YHc5YXy5R0a+HChaJH8BvMWh3MWV4sU9KtlpYW0SMM6hvHJSx+xYD6xr+6rDd/cw6LXzHgXPNpQZMNj8xZ6wlzlhfLlEgA6/lKjAoMQXzcQy7rdfYvEBYciakTZgqajIiGg2VKupWcnCx6hEFZz1dhxuR0BAS4nlD/f+e/QMKUDBiN2vrWlDlrPWHO8tLWdyyRF/bt2yd6hEFZG6qQOHXg22nVnf8CM6do7222ZM5aT2TOudkKXKr3fPtzlUCbjo5as0xJtzZs2CB6hEFZG48PKM2+vj7UN355u2R/9t7j+MfCaOz+0+siRvSKzFnriaw5t10Caj4Gqvd7Vqi2z4EzFuBEGdBz0/fzqYFl6qW+vj4UFxcjISEBISEhSEtLg8ViwcyZM5Gbmyt6PLpLWVmZ6BHu6/K1Rly93oSEKRku619f+Cs6uhwwTZsHAHjlnz5A7lMK7wChElmz1htZc46YAEzNAJx97gvV9nn/HxiAhCwgcJRaU/oWy9RLq1atQlFREVavXo2DBw8iJycHy5Ytg81mQ0ZGhvsvoBE7CyahpuJ9lzWn04nS56JQX/k7QVPpQ8u1BgBAROgYl/U/n9gD0wPzEDNmKgBgwpgpqs9GNBwGA5CQCTwwe+hCvbtIzd8DJuroJWCWqRf27NmDXbt2Yf/+/Vi3bh0WLVqE9evXY/78+ejp6bldpoWFhUhOTobRaNTkWyY5rjaivbUJEx5Ic1m/dsmGm51tiJ0+W9Bk+vBAjAnhIaPxm8NvwtHRius3ruLjI/+Bj4/swE+Wvil6PKJhcVeoei5SgGXqlc2bN2PJkiXIzMx0WZ8xYwaCgoKQkpICAEhISMA777yDhx9+WMSYijXbKmEwBmD8FLPL+mX7SYSNjkXk+KmCJvOOxWIRPcJ9hYdE4fVV/wXr+Sose30KfrIlCZ9Vf4hNz/0Bad/JdP8FJCRr1noje873K9Rb9FykAG9077GGhgbU1NRg7dq1Az5mt9thNpsRHBwMAFixYgUA4I033lB1xpHSbKvE2LhEBI4KdVlvsZ9ETLx29kpra2sRExMjeoz7eij+EbxT8BfRY4wYmbPWEy3kfKtQAcBedfcH9FukAMvUYw0N/a9zxcXFuax3dHTAYrFg6dKlIsYCABgMBrfbvPRrp8dfr9lWidbmerz3QrTLeneXA7O//+qIzzYc9/ul5l4lJSVutyspKRmpkW479JbnWQ+leO8q1NmPobunC3X2Yyha9fGQ28uctS9y1iNPnq8intPD9faLn8EcvwAAUF6xFYvXvSx4Iu84nZ5/L7NMPRQd3V8sVqvVpTi3bNmCpqYmzJo1S9RoI675bBXm/vA1mB75scv67ldTEKuhPVOtW5fzK9EjEA3bisf//XaRAsAPFhTgq7MWHKndP8RnaZfB6U31+rG+vj6kp6ejqakJxcXFmDx5MsrLy3HgwAHY7XYcPXoUc+fOdfmcrKwsFBQUIDs7W9DUd3j6fqatF+uxa10C/rmoCrHxGQPWn9t+EeGjYz1+XF+9n2ldXZ3bbUwmE06fHvoet0lJSSM10m1K3890uHz1fqYjkbUvctYjd1mLek576+6TjZKXAI6W/kO+BiOQ8g9AzAzRE448noDkIaPRiLKyMpjNZuTl5WHlypWIjo5Gfn4+AgMDkZqaKnrEEdFsq0RgcNiAM3mbznyOiPFTvSpS0TZu3Ch6BL/BrNWhhZzvPWt3ktmzy2a0jod5vZCYmIjDhw+7rD377LMwmUwIDb1zsk53dzd6e3vR19eH7u5udHZ2Ijg42GevaY2kZlslYuPnwHjPPWOb6o9o7hBvTk6O6BH8BrNWh+w5D3b5y70nJVXv198eKvdMFaqqqhpws4bnn38eoaGh+PTTT7F8+XKEhobi3Llzgib0zsIVW5H984oB64+tLMVTaz5UfyAFTCaT6BH8BrNWh8w5u7uO1NMbO2gVy1QBh8MBq9U64OSjDz74AE6n0+XPgw8+KGZI0ozL1xqx46M1OG0/hpe2/R3W7ngUpfvdn0lLJFrbJc+uI723UE//UT/35uVhXgUiIiLQ29sregzSiePWQ8hIXIzYMdPw1uo/Y1RQCDbveQZnm6oRPzFF9HhEg4qM6T/RyGB0fx3prUINCASip+vn3rwsU9KtrKws0SMM6uTXFXht19OYPjENF6+exYzJ6QgPGYOfPr0NocERt7cLMAbCaAwQOKlnZM5aT2TOedJD7re5xWAAvvOI72YRgYd5SbdKS0tFjzColPiFmDn1YfwirwKp0zPx06e3o6v7hkuR2i58hWvtlzEtVv5bxsictZ4wZ3mxTEm38vLyRI8wqKarNkwcNx0A0HLtPFodLZg+6c7lSNdvXMW23xfg5R+9P9iXkIrMWesJc5YXy5R0q6KiQvQIgzp3sRbT4szo7euFwWDEcet/IyNhMQCgt7cHb/7nCjz/1FsYFxXn5ivJQeas9YQ5y4tlSiTA35pr8WCsGd09XWh1XMKJ+v9B4pT+63gtX5XBer4SOz/5V7xcmoVTfzsieFoicocnIBEJsPy7/3b77798uRqWk3thNPb/bvtY+jI8lr5M1GhENAzcMyXdcncPU5lkpsl9Zxt3tJS1ljFneXHP1E/46obzMtu7d6+Q26/56obzMhOVtb9hzvLininpVmFhoegR/AazVgdzlhfLlIiISCGWKRERkUIsU9KtHTt2iB7BbzBrdTBnebFMSbfMZrPoEfwGs1YHc5YXy5R0KzMzU/QIfoNZq4M5y4tlSkREpBCvMyVNSkpKcrtNYWGhR9vR0Ji1etxlyJzlZXA6nU7RQxAREWkZD/MSEREpxDIlIiJSiGVKRESkEMuUiIhIIZYpERGRQixTIiIihVimRERECrFMiYiIFGKZEhERKcQyJSIiUuj/AewnsKdyLymnAAAAAElFTkSuQmCC\n", "text/plain": [ "<Figure size 599.592x144.48 with 1 Axes>" ] }, "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", "<ul> \n", "<li> Initial state: |00>\n", "<li> After Hadamard Gate on qubit 2 : $\\frac{1}{\\sqrt{2}}|00> + \\frac{1}{\\sqrt{2}}|10> $\n", "<li> After phase shift Gate : $\\frac{1}{\\sqrt{2}}|00> + \\frac{1}{\\sqrt{2}}|10> $\n", "<li> After Hadamard Gate on qubit 1 : $\\frac{1}{{2}}|00> + \\frac{1}{{2}}|01> + \\frac{1}{{2}}|10> - \\frac{1}{{2}}|11>$\n", "<li> After SWAP: $\\frac{1}{{2}}|00> + \\frac{1}{{2}}|10> + \\frac{1}{{2}}|01> - \\frac{1}{{2}}|11>$\n" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0.5+0.j 0.5+0.j 0.5+0.j 0.5+0.j]\n" ] } ], "source": [ "backend = Aer.get_backend('statevector_simulator')\n", "out = execute(qc,backend).result().get_statevector()\n", "print(out)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 2.5 State vector as tensor product" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", " \n", " Since this circuit consists of pure superposition brought up by hadamard gate, it is possible to obtain final state vector by taking direct product of single qubit states. Results from operation of H gate on single qubit can be multiplied with direct product operation to get final state.\n", " \n", "$ \\frac{1}{\\sqrt{2}} (|0 \\rangle + | 1\\rangle) \\otimes \\frac{1}{\\sqrt{2}}(|0 \\rangle + | 1\\rangle) = \\frac{1}{2}(|00 \\rangle + |01 \\rangle + |10 \\rangle + |11 \\rangle $\n", " \n", "\n", "i.e., $\\frac{1}{\\sqrt{2}}\\begin{bmatrix}\n", " 1 \\\\\n", " 1 \n", "\\end{bmatrix} \\otimes \\frac{1}{\\sqrt{2}} \\begin{bmatrix}\n", " 1 \\\\\n", " 1 \n", "\\end{bmatrix} = \\frac{1}{2} \\begin{bmatrix}\n", " 1 \\\\\n", " 1 \\\\\n", " 1 \\\\\n", " 1\n", "\\end{bmatrix}$\n", "\n", "Where $|00 \\rangle , |01 \\rangle , |10 \\rangle $ and $ |11 \\rangle $ are basis states for two qubit system.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 2.6 Matrix Element" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### How to realize it the quantum circuit?\n", "\n", "\n", " \n", " \n", "$ I = \\begin{bmatrix}\n", " 1 & 0 \\\\\n", " 0 & 1\n", "\\end{bmatrix};H = \\frac{1}{\\sqrt{2}} \\begin{bmatrix}\n", " 1 & 0 \\\\\n", " 0 & 1\n", "\\end{bmatrix}; C_{u1} = \\begin{pmatrix}\n", "1 & 0 & 0 & 0\\\\\n", "0 & 1 & 0 & 0\\\\\n", "0 & 0 & 1 & 0\\\\\n", "0 & 0 & 0 & i\n", "\\end{pmatrix}; SWAP =\\begin{pmatrix}\n", "1 & 0 & 0 & 0\\\\\n", "0 & 0 & 1 & 0\\\\\n", "0 & 1 & 0 & 0\\\\\n", "0 & 0 & 0 & 1\n", "\\end{pmatrix}$\n", "\n", "\n", "At first barrier: $ U_1 = I \\otimes H $\n", " \n", "At second barrier: $ U_2 = C _{u1} \\times (I \\otimes H) $\n", " \n", "At third barrier: $ U_3 = (H \\otimes I) \\times C _{u1} \\times (I \\otimes H) $ \n", "\n", "At fourth barrier: $U_4 = SWAP \\times (H \\otimes I) \\times C _{u1} \\times (I \\otimes H) $ " ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 0.5+0.j 0.5-0.j 0.5-0.j 0.5-0.j ]\n", " [ 0.5+0.j 0. +0.5j -0.5+0.j -0. -0.5j]\n", " [ 0.5+0.j -0.5+0.j 0.5-0.j -0.5+0.j ]\n", " [ 0.5+0.j -0. -0.5j -0.5+0.j 0. +0.5j]]\n" ] } ], "source": [ "backend = Aer.get_backend('unitary_simulator')\n", "job = execute(qc, backend)\n", "result = job.result()\n", "print(result.get_unitary(qc, decimals=3))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- Implementing Numpy" ] }, { "cell_type": "code", "execution_count": 99, "metadata": {}, "outputs": [], "source": [ "I = np.eye(2,2)\n", "H = 1/np.sqrt(2)*np.array([[1,1],[1,-1]])\n", "H_kron_I = np.kron(H,I)\n", "CU1 = np.array([[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,0.+1.j]])\n", "I_kron_H = np.kron(I,H)\n", "SWAP = np.array([[1,0,0,0],[0,0,1,0],[0,1,0,0],[0,0,0,1]])" ] }, { "cell_type": "code", "execution_count": 100, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 0.5+0.j , 0.5+0.j , 0.5+0.j , 0.5+0.j ],\n", " [ 0.5+0.j , 0. +0.5j, -0.5+0.j , 0. -0.5j],\n", " [ 0.5+0.j , -0.5+0.j , 0.5+0.j , -0.5+0.j ],\n", " [ 0.5+0.j , 0. -0.5j, -0.5+0.j , 0. +0.5j]])" ] }, "execution_count": 100, "metadata": {}, "output_type": "execute_result" } ], "source": [ "U = np.dot(H_kron_I,np.dot(CU1,np.dot(I_kron_H,SWAP)))\n", "U" ] }, { "cell_type": "code", "execution_count": 101, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0.5+0.j, 0.5+0.j, 0.5+0.j, 0.5+0.j])" ] }, "execution_count": 101, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ket = np.array([1,0,0,0])\n", "np.dot(U,ket)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3. QFT (3 qubits)\n", "\n", "#### 3.1 Circuit Diagram" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "def qft3():\n", " n = 3\n", " q = QuantumRegister(n)\n", " c = ClassicalRegister(n)\n", " qc = QuantumCircuit(q,c)\n", " qc.h(q[2])\n", " qc.barrier()\n", " qc.cu1(np.pi/2, q[1], q[2])\n", " qc.barrier()\n", " qc.h(q[1])\n", " qc.barrier()\n", " qc.cu1(np.pi/4, q[0], q[2])\n", " qc.barrier()\n", " qc.cu1(np.pi/2, q[0], q[1])\n", " qc.barrier()\n", " qc.h(q[0])\n", " qc.barrier()\n", " qc.swap(q[0], q[2])\n", " return q,c,qc" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 1031.83x264.88 with 1 Axes>" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "q,c,qc = qft3()\n", "qc.barrier()\n", "qc.draw(output='mpl')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 3.2 State vector\n", "\n", "\n", " \n", "<ul> \n", "<li> Initial state: |000>\n", "<li> After Hadamard Gate on 3rd qubit : $\\frac{1}{\\sqrt{2}}(|000> + |001>) $\n", "<li> After CU1 gate on qubit (2,3) : $\\frac{1}{\\sqrt{2}}(|000> + |001>) $\n", "<li> After CU1 gate on qubit (1,3) : $\\frac{1}{\\sqrt{2}}(|000> + |001>) $\n", "<li> After Hadamard Gate on qubit 2 : $\\frac{1}{{2}}(|000> + |010> + |001> -|011> )$\n", "<li> After CU1 gate on qubit (0,1): $\\frac{1}{{2}}(|000> + |010> + |001> -|011> )$\n", "<li> After Hadamard Gate on qubit 3 : $\\frac{1}{2\\sqrt{2}}(|000> + |001> + |010> + |011> + |000> - |001> - |010> + |011)$\n", " \n", " " ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0.35355339+0.j 0.35355339+0.j 0.35355339+0.j 0.35355339+0.j\n", " 0.35355339+0.j 0.35355339+0.j 0.35355339+0.j 0.35355339+0.j]\n" ] } ], "source": [ "backend = Aer.get_backend('statevector_simulator')\n", "out = execute(qc,backend).result().get_statevector()\n", "print(out)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Measurement" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### References\n", "-----\n", "1. https://www.youtube.com/watch?v=bntew-yoMzk " ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.3" } }, "nbformat": 4, "nbformat_minor": 2 }