Files
Quantum-Computation-course-…/practice/PracticeExercise1-solutions.ipynb
2025-10-28 10:56:43 +01:00

515 lines
100 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"id": "91ad3d04-8f28-49c8-91bc-39fec385235d",
"metadata": {},
"source": [
"# Practice Exercise 1 (\"due\" October 14)"
]
},
{
"cell_type": "code",
"execution_count": 82,
"id": "4695ad83-81f7-4aab-b442-c190e2c26648",
"metadata": {},
"outputs": [],
"source": [
"from qiskit import QuantumCircuit, transpile\n",
"from qiskit_aer import AerSimulator\n",
"from qiskit.visualization import plot_histogram\n",
"import numpy as np\n",
"from scipy.linalg import expm"
]
},
{
"cell_type": "markdown",
"id": "1aa322a6-03e6-4a2d-8e0f-c01867c73dca",
"metadata": {},
"source": [
"## Question 1: Generating entanglement \n",
"\n",
"Bell states are foundational to quantum information science and represent the simplest examples of entangled states. The four Bell states are typically denoted\n",
"\n",
"$$\\vert \\Phi^+\\rangle=\\frac{1}{\\sqrt{2}}\\left(\\vert 00\\rangle+\\vert 11\\rangle\\right),$$\n",
"$$\\vert \\Phi^-\\rangle=\\frac{1}{\\sqrt{2}}\\left(\\vert 00\\rangle-\\vert 11\\rangle\\right),$$\n",
"$$\\vert \\Psi^+\\rangle=\\frac{1}{\\sqrt{2}}\\left(\\vert 01\\rangle+\\vert 10\\rangle\\right),$$\n",
"$$\\vert \\Psi^-\\rangle=\\frac{1}{\\sqrt{2}}\\left(\\vert 01\\rangle-\\vert 10\\rangle\\right).$$"
]
},
{
"cell_type": "markdown",
"id": "40dde07a-fbc8-48ef-b65a-4418f8ee9959",
"metadata": {},
"source": [
"The following Qiskit code generates a quantum circuit that prepares the Bell state $\\vert \\Phi^+\\rangle$:"
]
},
{
"cell_type": "code",
"execution_count": 83,
"id": "86507470-9c79-4640-a1e9-c931f4ad3a1d",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<pre style=\"word-wrap: normal;white-space: pre;background: #fff0;line-height: 1.1;font-family: &quot;Courier New&quot;,Courier,monospace\"> ┌───┐ ┌─┐ \n",
"q_0: ┤ H ├──■──┤M├───\n",
" └───┘┌─┴─┐└╥┘┌─┐\n",
"q_1: ─────┤ X ├─╫─┤M├\n",
" └───┘ ║ └╥┘\n",
"c: 2/═══════════╩══╩═\n",
" 0 1 </pre>"
],
"text/plain": [
" ┌───┐ ┌─┐ \n",
"q_0: ┤ H ├──■──┤M├───\n",
" └───┘┌─┴─┐└╥┘┌─┐\n",
"q_1: ─────┤ X ├─╫─┤M├\n",
" └───┘ ║ └╥┘\n",
"c: 2/═══════════╩══╩═\n",
" 0 1 "
]
},
"execution_count": 83,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"qc = QuantumCircuit(2,2)\n",
"qc.h(0)\n",
"qc.cx(0,1)\n",
"qc.measure([0,1],[0,1])\n",
"qc.draw()"
]
},
{
"cell_type": "markdown",
"id": "a701a1ee-998d-40d0-8705-218d1c02fd0a",
"metadata": {},
"source": [
"We can sample the measurement outcomes using the ```AerSimulator```:"
]
},
{
"cell_type": "code",
"execution_count": 84,
"id": "cc082fc1-bcaa-4035-a2ab-3a8ab979f81d",
"metadata": {},
"outputs": [],
"source": [
"backend = AerSimulator()\n",
"job = backend.run(qc, shots=2048)"
]
},
{
"cell_type": "code",
"execution_count": 85,
"id": "b17f5172-ede9-4dff-843d-9b715258cff5",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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AABA4LQq7L5v1qxZbbkOAAAAXCW/w67B/v37deDAAZ05c0Z1dXWNrrfZbFq6dOnV3g0AAACuwO+wO3XqlKZOnar33nvvsp9pR9gBAABcG36H3cKFC7Vr1y6NGDFCs2bNUrdu3eR0XvUBQAAAAPjJ7xJ74403dPvtt+vvf/873y4BAADQAfj9zRPfffedhg0bRtQBAAB0EH6HXVpaWpPfOgEAAIDA8Dvsli1bptdff1179+5ty/UAAADAT36fY/f1119r0qRJGj58uP7zP/9TaWlpioyMbHLuAw884PcCAQAA0DJ+h93s2bNls9nk9XqVnZ2t7OzsRufbeb1e2Ww2wg4AAOAa8DvssrKy2nIdAAAAuEp8pRgAAIAh/H7zBAAAADoWv4/YHTlypMVzu3fv7u/dAAAAoIX8DrsePXq06MOJbTabPB6Pv3cDAACAFvI77B544IEmw87tdusf//iHSktLNXz4cPXo0eNq1gcAAIAW8jvssrOzm73O6/Xqz3/+s9asWaMXXnjB37sAAABAK7TLmydsNpsWL16sW265RY8++mh73AUAAAAu0a7vir3ttttUWFjYnncBAACA/9OuYffll1/yxgkAAIBrxO9z7JpTX1+vr7/+WtnZ2Xrttdc0atSotr4LAAAANMHvsLPb7Zf9uBOv16uoqCj96U9/8vcuAAAA0Ap+h92wYcOaDDu73a4uXbrotttu05w5cxQfH39VCwQAAEDL+B12b7/9dhsuAwAAAFeL74oFAAAwRJu8eWL37t0qLi6W2+1WRESEBgwYoKFDh7bFTQMAAKCFrirs9u3bp1mzZungwYOSLr5houG8u169eikrK0vp6elXv0oAAABckd9h99lnn2n06NE6f/68xo0bpxEjRighIUHffvut3n77beXl5WncuHHau3evbr755rZcMwAAAJrgd9gtX75cNTU1euuttzRmzBif6x577DFt375dEydO1B/+8Afl5ORc9UIBAABweX6/eWLHjh368Y9/3CjqGowePVr33nuvduzY4ffiAAAA0HJ+h53b7VaPHj0uOyc1NVVut9vfuwAAAEAr+B12SUlJ2rt372Xn7Nu3T0lJSf7eBQAAAFrB77CbMmWK3n77bS1dulTfffedz3Xfffedfv/732vHjh2aMmXKVS8SAAAAV+b3myeWLl2qN954QytXrtSzzz6r22+/XfHx8fr222914MABnThxQjfeeKOWLl3alusFAABAM/wOu+joaO3bt0+PPvqocnJylJuba113ww03aM6cOVq9erWio6PbZKEAAAC4vKv6gOLo6Gi98MILeuaZZ/T555+rsrJSERER6tOnj0JCQtpqjQAAAGiBVofdE088ofPnz2v58uVWvIWEhKhfv37WnJqaGi1ZskTh4eF6/PHH2261AAAAaFar3jyxfft2/e53v1NMTMxlj8iFhoYqJiZGS5YsUWFh4VUvEgAAAFfWqrDbtGmTunTpol/+8pdXnDt//nxFR0crKyvL78UBAACg5VoVdrt379bo0aPlcrmuONflcmn06NHavXu334sDAABAy7Uq7L755hvdeOONLZ6fmpqqsrKyVi/qcpYtWyabzebzk5CQYF3v9Xq1bNkyJSUlKSwsTCNGjNAnn3zicxvV1dVasGCBYmNj1blzZ02ePFnHjh1r03UCAABca60KO7vdrtra2hbPr62tld3u92cgN+uWW25RWVmZ9fPxxx9b161Zs0Zr167Vhg0bdODAASUkJGjMmDE6e/asNSczM1Pbtm1TTk6Odu3apXPnzmnSpEmqq6tr87UCAABcK616V2xSUpJKSkpaPL+kpET//u//3upFXYnT6fQ5StfA6/Vq/fr1WrJkie655x5J0saNGxUfH6+tW7fq4Ycfltvt1gsvvKDNmzdr9OjRkqSXXnpJycnJ2r59u8aNG9fm6wUAALgWWnU47Y477lBhYaEOHTp0xbmHDh1SYWGhhg0b5u/amnXw4EElJSUpNTVVP/nJT/TVV19JkkpLS1VeXq6xY8dac10ul4YPH26d61dUVKTa2lqfOUlJSerbty/nAwIAgKDWqiN28+fPV1ZWln784x8rLy9PsbGxTc47efKkpk2bJo/Ho1/84hdtstAGgwYN0qZNm/SDH/xA3377rVasWKEhQ4bok08+UXl5uSQpPj7e53fi4+N1+PBhSVJ5eblCQ0PVpUuXRnMafr851dXVqq6uti5XVlZKuvgn54Y/UdvtdjkcDtXV1am+vt6a2zDu8Xjk9XqtcYfDIbvd3uw40JF4vV55PB6fMafz4tPIpeMhISGqr6/3OcXBZrPJ6XQ2O97cftNW+9Olp5I0t3a2KTi2CegoGh6z7bU/teY0uFaF3a233qrMzEytX79eN998s37+858rIyND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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"execution_count": 85,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"output = job.result()\n",
"counts = output.get_counts()\n",
"plot_histogram(counts)"
]
},
{
"cell_type": "markdown",
"id": "ace7b3b0-82e6-410e-9669-7c0b6cf32cd5",
"metadata": {},
"source": [
"The measurement above measured both qubits, prepared in $\\vert \\Phi^+\\rangle$, in the $Z$ basis. Ask yourself if the measurement outcomes make sense.\n",
"\n",
"**TO DO**: Write a circuit that measures both qubits in the $X$ basis instead. We will then use ```AerSimulator``` to sample the measurement outcomes."
]
},
{
"cell_type": "code",
"execution_count": 86,
"id": "fcc04d9c-a191-4cd5-90cf-13219cf7351e",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<pre style=\"word-wrap: normal;white-space: pre;background: #fff0;line-height: 1.1;font-family: &quot;Courier New&quot;,Courier,monospace\"> ┌───┐ ┌───┐┌─┐ \n",
"q_0: ┤ H ├──■──┤ H ├┤M├───\n",
" └───┘┌─┴─┐├───┤└╥┘┌─┐\n",
"q_1: ─────┤ X ├┤ H ├─╫─┤M├\n",
" └───┘└───┘ ║ └╥┘\n",
"c: 2/════════════════╩══╩═\n",
" 0 1 </pre>"
],
"text/plain": [
" ┌───┐ ┌───┐┌─┐ \n",
"q_0: ┤ H ├──■──┤ H ├┤M├───\n",
" └───┘┌─┴─┐├───┤└╥┘┌─┐\n",
"q_1: ─────┤ X ├┤ H ├─╫─┤M├\n",
" └───┘└───┘ ║ └╥┘\n",
"c: 2/════════════════╩══╩═\n",
" 0 1 "
]
},
"execution_count": 86,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#Use this as a skeleton\n",
"qc2 = QuantumCircuit(2,2)\n",
"\n",
"#Prepare |Psi^+> (do not alter)\n",
"qc2.h(0)\n",
"qc2.cx(0,1)\n",
"\n",
"## YOUR CODE GOES HERE ###\n",
"qc2.h(0)\n",
"qc2.h(1)\n",
"qc2.measure([0,1],[0,1])\n",
"qc2.draw()"
]
},
{
"cell_type": "markdown",
"id": "8cc9b15e-1518-454d-a6b0-994f583c8c05",
"metadata": {},
"source": [
"Run this cell to sample the output of your circuit and plot a histogram of the results. Vary the number of shots if you like."
]
},
{
"cell_type": "code",
"execution_count": 87,
"id": "8e6ec719-b213-434f-9843-3c9634a7075b",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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fmRkpGJiYpSenq5hw4bV+pjl5eUqLy93fV9aWipJcjgccjgckiQfHx9ZrVZVVVWpurraNffyeGVlpZxOp2vcarXKx8enzvHL9wt4m8s/m76+PzxFVFZWum232Wyqrq52OwtusVjk6+tb53hdx01THU91rZ19atn7BHij5jie6svrwi4tLU0HDx7UgQMHat2enJysMWPGKDo6WkePHlVqaqoGDx6sjIwM2e12FRQUyM/Pr8aZvrCwMBUUFNT5uAsXLtTcuXNrjG/evFlt2rSRJHXq1ElxcXH64osvlJub65rTvXt39ejRQ/v379epU6dc471791Z0dLR27typc+fOucb79eun0NBQbd68uX7/KUAzu3x5w4gRI1RWVqbt27e7tvn6+mrkyJEqKirSnj17XOMBAQEaPHiw8vLylJmZ6Rrv0KGD+vfvr5ycHB0+fNg13hTH04+f/BITE9W6desal2qwTy17nwBv1NTH0+7du+u9Fovzx2noYXl5eerTp482b96sXr16SZISEhLUu3dvvfTSS7XeJj8/X9HR0UpLS9N9992nd955RxMnTnQ7+yZJd955p7p27aoVK1bUej+1nbGLiopSUVGRAgMDJTXNK9duqcQdvE/OX3444/1zOhPEPrWMfeI5E97oyILkJj2eiouLFRISopKSEleT1MWrXv5kZGSosLBQ8fHxrrGqqirt3LlTy5cvV3l5uaxWq9ttIiIiFB0drZycHElSeHi4KioqdObMGbezdoWFherfv3+dj22322W322uM22w22Ww2tzGr1VpjHVLdrybrGv/p/QLe4qc/m7X9rPr4+MjHp+ZlunWN13XcNPXx1JBx9qll7BPgbTx1PNW6lnrPbAZDhgxRVlaWMjMzXV99+vTRI488oszMzFr/E06fPq28vDxFRERIkuLj42Wz2bRlyxbXnPz8fGVnZ18x7AAAAFo6rzpjFxAQoJiYGLcxf39/hYSEKCYmRufPn9ecOXN0//33KyIiQseOHdMzzzyj9u3b695775UkBQUFadKkSZo5c6ZCQkIUHBysWbNmKTY2VklJSZ7YLQAAgGbhVWF3NVarVVlZWVq9erXOnj2riIgIJSYmat26dQoICHDNW7p0qXx9fTV27FiVlZVpyJAhWrVqVa1n/AAAAEzh9WG3Y8cO179bt26tTZs2XfU2rVq10rJly7Rs2bIm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cu2WStzB++T85Ycz3j+nM0HsU8vYJ54z4Y2OLEhu0uOpuLhYISEhTfur2B+X5tV06tSpQfft5+fnevNEnz59dODAAf31r391XVdXUFDgFnaFhYWus3jh4eGqqKjQmTNn3M7aFRYWqn///nU+pt1ul91urzFus9lks9ncxqxWa61vwqjr1WRd4z+9X8Bb/PRns7afVR8fH/n41HxjfV3jdR03TX08NWScfWoZ+wR4G08dT7XOrffMn+jcuXO9PpzYYrFc8zUSTqdT5eXl6tKli8LDw7VlyxbFxcVJ+uHs3qeffqrnn39ekhQfHy+bzaYtW7Zo7NixkqT8/HxlZ2frhRdeuKZ1AAAAeLNGh9348eNrDbuSkhL993//t44ePapBgwapc+fODbrfZ555RsnJyYqKitK5c+eUlpamHTt2aOPGjbJYLEpJSdGCBQvUrVs3devWTQsWLFCbNm308MMPS5KCgoI0adIkzZw5UyEhIQoODtasWbMUGxurpKSkxu4uAACA12t02K1atarObU6nU4sXL9YLL7ygN954o0H3e/LkSY0bN075+fkKCgrSrbfeqo0bN+rOO++UJP3xj39UWVmZnnjiCZ05c0a33367Nm/e7PoMO0launSpfH19NXbsWJWVlWnIkCFatWoVn2EHAACM1qRvnkhMTFRwcLDef//9pnqIJsPn2OHnjM+xg7fiORPeyJs+x67Rf1KsPvr06aNt27Y15UMAAADg/zRp2H377bd8uCQAAEAzue6f9lhdXa3vv/9eq1at0ocffqghQ4Zc74cAAABALRoddpf/VmxdnE6n2rZtqxdffLGxDwEAAIAGaHTYDRw4sNaw8/HxUbt27dSnTx9NnDixxp//AgAAQNNodNjt2LHjOi4DAAAA16pJ3zwBAACA5nNd3jyRnp6uzMxM1+er9O7dWwMGDLgedw0AAIB6uqaw27dvnyZMmKCcnBxJP7xh4vJ1d926ddPKlSvVr1+/a18lAAAArqrRYffVV18pKSlJFy5c0LBhw5SQkKDw8HCdPHnS9bddhw0bpr179+qWW265nmsGAABALRoddnPnzlVFRYU2bdrk+juul/3xj3/U1q1bNXLkSP35z39WWlraNS8UAAAAV9boN09s375dDzzwQI2ouywpKUn333+/tm/f3ujFAQAAoP4aHXYlJSXq3LnzFed06dJFJSUl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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"execution_count": 87,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"job = backend.run(qc2, shots=1024)\n",
"counts = job.result().get_counts()\n",
"plot_histogram(counts)"
]
},
{
"cell_type": "markdown",
"id": "52b6096a-a214-4166-8ce4-036f929b9b3b",
"metadata": {},
"source": [
"***TO DO*** If you've done this correctly, only certain measurement outcomes will be represented. Explain why (write your answer in this code cell below). It may help to think about the eigenstates of the Pauli-X operator, which you investigated in the last set of exercises. If you'd like to include equations in your explanation, you can have them render nicely by putting them inside dollar signs like this:$$1+1=2$$ \n",
"\n",
"\n",
"***Your answer goes here***: The Bell state $\\vert \\Phi^+\\rangle$ can be written as $\\vert \\Phi^+\\rangle=(\\vert ++\\rangle+\\vert --\\rangle)/\\sqrt{2}$, where $\\vert\\pm\\rangle=(\\vert 0\\rangle\\pm \\vert 1\\rangle)/\\sqrt{2}$. An $X$-basis measurement measures a qubit in the basis $\\vert\\pm\\rangle$. The measurement outcomes are therefore correlated, same as in the case of $Z$-basis measurements. "
]
},
{
"cell_type": "markdown",
"id": "453a2885-156c-48a9-9832-7d466c98dab2",
"metadata": {},
"source": [
"# Question 2: Fun with Hadamards\n",
"\n",
"Recall that the Hadamard matrix is given by $$H=\\frac{1}{\\sqrt{2}}\\left[\\begin{matrix}1 & 1\\\\\n",
"1 & -1\\end{matrix}\\right].$$\n",
"\n",
"Single-qubit gates can be interpreted as rotations on the Bloch sphere. A rotation of the qubit by angle $\\theta$ about the axis pointing along the unit vector $\\hat{n}=(n_x,n_y,n_z)$ can be expressed as the unitary\n",
"\n",
"$$U=e^{i\\theta \\hat{n}\\cdot \\vec{\\sigma}},$$\n",
"\n",
"where $\\vec{\\sigma}=(X,Y,Z)$ is a vector of Pauli matrices. For the Hadamard gate, we have\n",
"\n",
"$$H = e^{i\\varphi}U$$\n",
"\n",
"for some choice of $\\theta$, $\\varphi$, and $\\hat{n}$. What are the values of these parameters? Recall that unit vectors must satisfy the normalization condition $n_x^2+n_y^2+n_z^2=1$ by definition. A useful identity is that\n",
"\n",
"$$e^{i\\theta \\hat{n}\\cdot \\vec{\\sigma} }=\\cos{\\theta} I + i \\sin{\\theta}(\\hat{n}\\cdot \\vec{\\sigma}),$$\n",
"\n",
"where $I$ is the $2\\times 2$ identity matrix."
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "7283ede9-7ddf-4db8-ab17-682756074572",
"metadata": {},
"outputs": [],
"source": [
"X = np.array([[0,1],[1,0]])\n",
"Y = np.array([[0,-1.j],[1.j,0]])\n",
"Z = np.array([[1,0],[0,-1]])\n",
"\n",
"H = 1/np.sqrt(2)*np.array([[1,1],[1,-1]])"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "1cc9159d-9c4b-4c48-88ff-2138a467bcac",
"metadata": {},
"outputs": [],
"source": [
"def rotation(n, theta, varphi):\n",
"\n",
" \"ARGS: unit vector n=[nx,ny,nz], theta, varphi\"\n",
" n_dot_sigma=(n[0]*X + n[1]*Y + n[2]*Z)\n",
" U = expm(1.j*theta*n_dot_sigma)\n",
" rot = np.exp(1.j*varphi)*U\n",
" return rot\n",
" "
]
},
{
"cell_type": "markdown",
"id": "46e84071-9382-409a-a797-8fef0ed333ce",
"metadata": {},
"source": [
"***TO DO*** Fill in your answer here. If your answer is correct the cell will return ```True```: "
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "2e6e6a1d-b9ca-4d0c-8ab4-281d7e4ab0ad",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"your_Hadamard = rotation([1/np.sqrt(2), 0, 1/np.sqrt(2)], np.pi/2, -np.pi/2)\n",
"np.allclose(H, your_Hadamard)"
]
},
{
"cell_type": "markdown",
"id": "bee18c16-4b8a-49bb-a917-b3743531966a",
"metadata": {},
"source": [
"# Question 3: Trotterization"
]
},
{
"cell_type": "markdown",
"id": "adf782ef-83be-41ef-9e2f-1a23075a7703",
"metadata": {},
"source": [
"The Hadamard can be constructed from `rx` and `rz` operations as\n",
"\n",
"$$ R_x(\\theta) = e^{i\\frac{\\theta}{2} X}, ~~~ R_z(\\theta) = e^{i\\frac{\\theta}{2} Z},\\\\ H \\equiv \\lim_{n\\rightarrow\\infty} \\left( ~R_x\\left(\\frac{\\theta}{n}\\right) ~~R_z \\left(\\frac{\\theta}{n}\\right) ~\\right)^n$$\n",
"\n",
"for some suitably chosen $\\theta$. When implemented for finite $n$, the resulting gate will be an approximation to the Hadamard whose error decreases with $n$.\n",
"\n",
"The following shows an example of this implemented with Qiskit with an incorrectly chosen value of $\\theta$ (and with the global phase ignored).\n",
"\n",
"* Determine the correct value of $\\theta$.\n",
"\n",
"* Show that the error (when using the correct value of $\\theta$) decreases quadratically with $n$."
]
},
{
"cell_type": "code",
"execution_count": 74,
"id": "614b4c15-7789-4199-8bb8-7971464fb027",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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UHqlvio2NTXV5vVjjz2mpKQkBQUF6aWXXlKfPn3UpEkTnTlzRps3b9bs2bMVGhqqoUOHVnjRAAAAKKrMz4r9I8MwShwv3C4/P7+cZToeF08AAABHqJRnxT711FPcjw4AAKAaK3WwW7JkSSWWAQAAgPLiWbEAAABOgmAHAADgJOx+VqwkXbx4UR988IG+++47nTp1Sjk5OUXmmEwmHTlypDyHAQAAQCnYHezOnj2rsLAwHTlyRJ6entYrNnJzc3X16lVJUrNmzeTm5lZhxQIAAKBkdp+KnTx5so4cOaJly5bpt99+kySNHTtWly9f1o4dO3TnnXeqVatW+vnnnyusWAAAAJTM7mAXHx+ve+65R8OHDy9yG5QePXpo7dq1OnbsmCZPnlzeGgEAAFAKdge79PR0BQUFWV+bzWbrKVhJatCggSIjI/XFF1+Ur0IAAACUit3BzsvLS3l5edbXDRo00MmTJ23meHp6lvgsWQAAAFQsu4Nd69atdezYMevroKAgJSYm6ty5c5Kkq1ev6l//+pd8fX3LXSQAAABuzu5gFxERofXr1+vKlSuSpBdeeEFnzpxR165d9eijjyowMFBHjhzR008/XVG1AgAA4AbsDnbR0dFauHChNdg99NBDeuedd3Tp0iWtWrVKGRkZiomJ0d/+9rcKKxYAAAAlMxmGYVTkDi0WizIzM9WkSZMiV8vWZIX36btw4YI8PT0r7Titxq2ptH1f79iMQVVyHAAAUD5lySDlevJEccxms7y9vSt6twAAALiJcge7y5cv6+uvv1ZKSoouXLggLy8vdevWTUOGDFGdOnUqokYAAACUQrmC3YoVKzR69GidP39e15/RNZlMql+/vubMmaPHHnus3EUCAADg5uwOdv/61780fPhweXh4aNSoUQoPD5e3t7dOnz6tTZs26eOPP9bw4cNVr149DRrE57kAAAAqm90XT/Ts2VMHDx7Uzp071b59+yLvHzhwQD179lRAQIC2b99e7kIdjYsnAACAI5Qlg9h9u5O9e/fqscceKzbUSVLHjh312GOP6aeffrL3EAAAACgDu4Odp6en6tevf8M59evXl5eXl72HAAAAQBnYHewGDx6s//N//o8sFkux7+fn52vNmjW6//777S4OAAAApWd3sHvnnXfk4eGhyMhI7dixw+a97du3KzIyUrVr19Zbb71V7iIBAABw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zpwpsipXqGnTpsXOd3V1tVlpc3FxUdu2bSVJ3bp10/79+xUbG1vk83eF6tSpoy5duujQoUPl6AgAyo/P2AGokdzd3RUcHKzExESb8cTERIWFhRW7TWhoaJH5CQkJCgkJkZubW4nHMgxDOTk5Jb6fk5Oj/fv3W0/lAoCjEOwA1FgxMTH66KOPtHjxYu3fv19jx45VamqqoqOjJUnjx4/XU089ZZ0fHR2t48ePKyYmRvv379fixYu1aNEivfzyy9Y5sbGxSkxM1K+//qoDBw5o1qxZWrZsmYYPH26d8/LLL2vjxo06evSoduzYoUceeUTZ2dn685//XO6eKvq+fAsXLlR4eLgaNGigBg0a6N5779XOnTtt5nBfPsB5cCoWQI01bNgwZWVlaerUqUpPT1dgYKDi4+Pl5+cnSUpPT7e5p52/v7/i4+M1duxYzZkzR82aNdPs2bOttzqRpMuXL2vUqFE6efKkateurY4dO+qTTz7RsGHDrHNOnjypxx9/XJmZmWrcuLF69eql7du3W49rr8L78s2dO1e9e/fWhx9+qMjISO3bt0++vr5F5hfel++5557TJ598oq1bt2rUqFFq3LixtacNGzbo8ccfV1hYmDw8PPT2228rIiJCP//8s5o3b27dV+fOnfXdd99ZX5vN5nL1AsAxTEbhJ4dxQ2V5AG951PT7iv0R/diHfm5NPXv2VPfu3TVv3jzrWEBAgB544IFi78v3yiuv6JtvvtH+/futY9HR0dqzZ4+SkpKKPYbFYlGDBg30wQcfWFczJ0+erNWrVyslJaViGwJQIcqSQTgVCwDVQFXcl0+Srly5ory8PN1+++0241V1Xz5HnGoGbiUEOwCoBirjvnzFGTdunJo3b657773XOlZ4X75169Zp4cKFysjIUFhYmLKyssrZla3KeARc4anmH374QUlJSfL19VVERITS0tIqtHagpiDYAUA1Uhn35Sv09ttva8WKFfryyy/l4eFhHY+MjNTDDz+sLl266N5779WaNb+fol+6dKndfRTn+kfABQQEKC4uTi1btrQ59Xy96x8BFxAQoJEjR+rZZ5/VzJkzrXP++c9/atSoUerWrZs6duyohQsXqqCgQOvXr6/Q2oGagosnADiVmvq5wcq8L58kzZw5U2+++aa+++473XHHHTespTLuy1d4qnncuHE24/acal60aJHy8vKK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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"execution_count": 74,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"error = {}\n",
"for n in range(1,11):\n",
"\n",
" qc = QuantumCircuit(1,1)\n",
" \n",
" # Implement the Trotterized Hadamard\n",
"\n",
" ### YOUR ANSWER GOES HERE\n",
" theta = np.pi/np.sqrt(2)\n",
" ###\n",
"\n",
" for j in range(n):\n",
" qc.rx(theta/n,0)\n",
" qc.rz(theta/n,0)\n",
" \n",
" # We need to measure how good the above approximation is. Here's a simple way to do this.\n",
" # Step 1: Use a real Hadamard to cancel the above approximation.\n",
" # For a perfect approximation, the qubit will return to its initial state (0) since H squares to the identity. \n",
" qc.h(0)\n",
" \n",
" # Step 2: Run the circuit, and see how many times we get the outcome 1. The fraction of 1s is a measure of the error.\n",
" qc.measure(0,0)\n",
" shots = 100000\n",
" job = backend.run(qc, shots=shots) \n",
" try:\n",
" error[n] = (job.result().get_counts()['1']/shots)\n",
" except:\n",
" pass\n",
" \n",
"plot_histogram(error)"
]
},
{
"cell_type": "markdown",
"id": "f35fd6ba-7182-482e-904b-12562c487c6f",
"metadata": {},
"source": [
"In terms of showing that the scaling is (...or isn't) quadratic, you can do this however you like, but one possibility is to look into fitting functions like numpy's ```polyfit```. If it's helpful, you can convert the error data from a dictionary to a list like this:"
]
},
{
"cell_type": "code",
"execution_count": 75,
"id": "c3ee4673-1a3f-4492-9b64-f4bf549d0af1",
"metadata": {},
"outputs": [],
"source": [
"n_vals = []\n",
"error_vals = []\n",
"for key, val in error.items():\n",
" n_vals.append(key)\n",
" error_vals.append(val)"
]
},
{
"cell_type": "markdown",
"id": "bc561d6e-4c32-49ff-82f7-305571f80f64",
"metadata": {},
"source": [
"***Sample solution***: Errors due to Trotterization scale quadratically because for noncommuting matrices, we have $$e^{\\Delta t(A+B)}=e^{\\Delta t A}e^{\\Delta t B}e^{-\\frac{\\Delta t^2}{2}[A,B] + h.o.t.'s}.$$ This is the well-known Baker-Campbell-Hausdorff formula. Since the time slice $\\Delta t$ scales like $1/n$, errors due to the commutator (neglected when we Trotterize) scale like $1/n^2$. \n",
"\n",
"If the error for $n$ Trotter steps scales like $$\\mathrm{error}(n)=k/n^2 + c,\\quad k,c=constants,$$\n",
"then we can extract $k$ and $c$ from a linear fit $y=kx + c$ with $x=1/n^2$. The following code finds and plots the resulting fit."
]
},
{
"cell_type": "code",
"execution_count": 76,
"id": "4a74b248-962d-4b0d-84b2-59ff936c22dd",
"metadata": {},
"outputs": [],
"source": [
"def inverse_quad(n):\n",
" return 1/n**2"
]
},
{
"cell_type": "code",
"execution_count": 77,
"id": "de8e9609-a966-45f7-9afd-4ed230edd794",
"metadata": {},
"outputs": [],
"source": [
"degs = np.polyfit(inverse_quad(np.array(n_vals)), error_vals, 1)\n",
"polynomial_fit = np.poly1d(degs)"
]
},
{
"cell_type": "code",
"execution_count": 78,
"id": "5ac02f4c-6543-49fe-8bb5-345cb8cac555",
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": 88,
"id": "0f4d3213-65ca-4c5e-b551-27a4cd376410",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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tH37ds2aNUu33XabtmzZ0urrhqpRp0PSdkISAAAtZjFasSXzb3/7W/3xj3/U66+/rtjY2FZffPz48RozZoyWLFniaxs2bJimTZumnJyc8x579dVXa9SoUVq0aJFf+/Tp0+VyufTuu+/62m688Ub17t1bK1eubPV13W633G6377XL5VJKSooqKioUExPT7M/cmd7b/ZXufu0TXZLQU+vnXmV2OQAAmM7lcsnpdDbr73er1iQ999xz2rhxo5KTkzVkyBCNGTPG79EctbW12rZtm7Kysvzas7KytGnTptaUJalhJOmb57zhhht852ztdXNycuR0On2PlJSUVtfYWS5NcUpqWLxd5a43uRoAAEJLWGsOmjZtWpsvXFZWJo/Ho4SEBL/2hIQElZSUtPq8JSUl5z1na687f/58zZs3z/e6cSQpmPWNdqhfrx46cuKUdhyu0MTBcWaXBABAyGhVSFq4cGG7FWCxWPxeG4bRpK0jztnS69rtdtnt9jbVZYaRKU4dOXFK2w+fICQBANACrQpJjbZt26bCwkJZLBalp6dr9OjRzT42Pj5eNputyehNaWlpk1GelkhMTDzvOTvqusFqZP9eWrOjRP86fMLsUgAACCmtWpNUWlqqa665Rpdddpnuv/9+3XfffcrMzNS1116rY8eONescERERyszMVG5url97bm6uJk2a1JqyJEkTJ05scs7169f7ztlR1w1Wl/bvJUnafqjC3EIAAAgxrQpJP/nJT+RyubRr1y4dP35cX3/9tXbu3CmXy6X777+/2eeZN2+eXn75Zb3yyisqLCzU3LlzVVRUpDlz5khqWAc0e/Zsv2MKCgpUUFCgqqoqHTt2TAUFBdq9e7fv/QceeEDr16/X008/rc8++0xPP/203nvvPb89lS503a5kRH+nLBbpyIlTKq2sMbscAABCh9EKMTExxtatW5u0b9myxXA6nS0614svvmikpqYaERERxpgxY4wNGzb43rvzzjuNq666yq+/pCaP1NRUvz5//OMfjSFDhhjh4eHG0KFDjdWrV7fous1RUVFhSDIqKipadJwZrn/2AyP1ob8aubtKzC4FAABTteTvd6v2SYqOjtbGjRs1atQov/b8/HxdddVVcrlcbQ5vwa4l+yyY7ad/3K4/bjusn1xzkf4za4jZ5QAAYJoO3yfpmmuu0QMPPKCjR4/62o4cOaK5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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.scatter(n_vals, error_vals)\n",
"plt.plot(np.linspace(1,10,100), polynomial_fit(inverse_quad(np.linspace(1,10,100))))\n",
"plt.xlabel('n')\n",
"plt.ylabel('Error')\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "d4919269-c721-4018-a30b-cc54e05ee530",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"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.13.2"
}
},
"nbformat": 4,
"nbformat_minor": 5
}