diff --git a/lecture1.ipynb b/lecture1.ipynb index ffbbee0ff170c60f0f86da794aef5dc99a696847..090f7335a076814daafafe81bd600e343a601096 100644 --- a/lecture1.ipynb +++ b/lecture1.ipynb @@ -6,6 +6,15 @@ "source": [ "![banner](https://mindspore.cn/static/img/logo_black.74c3909e.png)\n", "\n", + "| Author |\n", + "| ------ |\n", + "| [@donghufeng](https://gitee.com/donghufeng) |" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ "# 量子比特\n", "\n", "量子比特是量子计算机进行逻辑处理的计算单元。在经典计算机中,经典比特只能处于状态0或者状态1,在量子比特上,我们也用两种状态来描述描述它,表示为 $\\left|0\\right>$ 和 $\\left|1\\right>$,我们称符号 $\\left|\\cdot\\right>$ 为右矢符号。根据量子态叠加原理,量子比特表现出有别于经典比特的特性,即可以处于 $\\left|0\\right>$ 和 $\\left|1\\right>$ 的线性叠加态,我们可以记为 $\\left|\\psi \\right>$:\n", @@ -64,7 +73,7 @@ "source": [ "> API 解释:\n", "> \n", - "> - [`mindquantum.simulator`](https://www.mindspore.cn/mindquantum/docs/zh-CN/master/mindquantum.simulator.html) 中包含了模拟器相关的 API, `from mindquantum.simulator import Simulator` 从中导入类 `Simulator`;\n", + "> - [mindquantum.simulator](https://www.mindspore.cn/mindquantum/docs/zh-CN/master/mindquantum.simulator.html) 中包含了模拟器相关的 API, `from mindquantum.simulator import Simulator` 从中导入类 `Simulator`;\n", "> - `sim = Simulator(\"projectq\", 1)` 声名一个模拟器 `sim`,模拟器的后端使用 `projectq`,模拟器的量子比特数目是 `1` ;\n", "> - `sim.get_qs()` 返回模拟器当前的量子态,默认返回一个 `numpy` 数组,如果 `sim.get_qs(True)` 返回一个狄拉克符号的表示,可读性更强。\n", "> \n", @@ -143,16 +152,16 @@ " Version\n", " \n", "mindquantum0.7.0\n", - "numpy1.20.0\n", + "numpy1.22.3\n", "\n", " System\n", " Info\n", "\n", - "Python3.9.7OSLinux x86_64Memory16.72 GBCPU Max Thread8DateTue Nov 29 14:15:55 2022\n", + "Python3.9.13OSLinux x86_64Memory8.2 GBCPU Max Thread6DateTue Nov 29 20:32:49 2022\n", "\n" ], "text/plain": [ - "" + "" ] }, "execution_count": 1, @@ -169,7 +178,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3.8.10 64-bit", + "display_name": "Python 3.9.13 ('mq')", "language": "python", "name": "python3" }, @@ -183,11 +192,11 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.10" + "version": "3.9.13" }, "vscode": { "interpreter": { - "hash": "916dbcbb3f70747c44a77c7bcd40155683ae19c65e1c03b4aa3499c5328201f1" + "hash": "6ea26b0ca9703e45d22ca948baff99d1d70a8502b08bee4ef4c347bc7486a73d" } } }, diff --git a/lecture10.ipynb b/lecture10.ipynb index 7adec545c9b7f097159d171708910a5e824c69d6..8044541a2c857870bffa071169d946661472cf03 100644 --- a/lecture10.ipynb +++ b/lecture10.ipynb @@ -6,6 +6,15 @@ "source": [ "![banner](https://mindspore.cn/static/img/logo_black.74c3909e.png)\n", "\n", + "| Author |\n", + "| ------ |\n", + "| [@zhuyikang](https://gitee.com/zhuyikang) |" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ "# 拓展的控制门\n", "\n", "下面介绍一些常用的记号,用来拓展控制门的功能。\n", @@ -256,44 +265,6 @@ "print(sim.get_qs(True))" ] }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - "\n", - "\n", - "
SoftwareVersion
mindquantum0.7.0
numpy1.20.0
SystemInfo
Python3.9.7
OSLinux x86_64
Memory16.72 GB
CPU Max Thread8
DateTue Nov 29 14:16:27 2022
\n" - ], - "text/plain": [ - "" - ] - }, - "execution_count": 1, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from show_info import InfoTable\n", - "\n", - "InfoTable('mindquantum', 'numpy')" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -330,11 +301,50 @@ "circ += CNOT.on(1, 0)\n", "display_svg(circ.svg())" ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + "\n", + "\n", + "
SoftwareVersion
mindquantum0.7.0
numpy1.22.3
IPython8.6.0
SystemInfo
Python3.9.13
OSLinux x86_64
Memory8.2 GB
CPU Max Thread6
DateTue Nov 29 21:18:15 2022
\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from show_info import InfoTable\n", + "\n", + "InfoTable('mindquantum', 'numpy', 'IPython')" + ] } ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "Python 3.9.13 ('mq')", "language": "python", "name": "python3" }, @@ -348,11 +358,11 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.7" + "version": "3.9.13" }, "vscode": { "interpreter": { - "hash": "acc57148d012b3a87b6bd94e84aac5f0597fe9bee67f87efb58a2afa0e5376ad" + "hash": "6ea26b0ca9703e45d22ca948baff99d1d70a8502b08bee4ef4c347bc7486a73d" } } }, diff --git a/lecture11.ipynb b/lecture11.ipynb index 6b2f8840a970cb035b72957ae8094c783bee31e1..d193999635c762f5e20ecf6809756e1999a95eb3 100644 --- a/lecture11.ipynb +++ b/lecture11.ipynb @@ -6,9 +6,17 @@ "source": [ "![banner](https://mindspore.cn/static/img/logo_black.74c3909e.png)\n", "\n", - "# Lecture 11\n", + "| Author |\n", + "| ------ |\n", + "| [@dsdsdshe](https://gitee.com/dsdsdshe)|" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ "\n", - "## 测量\n", + "# 测量\n", "\n", "从量子计算的角度来看,量子测量通常被认为是沿着计算基矢的投影测量。电路图中的测量动作可以表示如下:\n", "\n", @@ -28,7 +36,7 @@ "\n", "![deferred measurement](images/deferred_measurement.png)\n", "\n", - "在原本的电路中,测量前的量子态$|\\psi_2\\rangle$为\n", + "在原本的电路中,测量前的量子态 $|\\psi_2\\rangle$ 为\n", "\n", "$$\n", "|\\psi_2\\rangle = \\frac{1}{2}(|00\\rangle|\\psi\\rangle +|01\\rangle X|\\psi\\rangle + |10\\rangle Z|\\psi\\rangle + |11\\rangle ZX|\\psi\\rangle)\n", @@ -119,7 +127,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "可以看到,q0的态$|\\psi\\rangle$已经成功地传送给q2。" + "可以看到,q0 的态 $|\\psi\\rangle$ 已经成功地传送给 q2。" ] }, { @@ -139,24 +147,29 @@ "因此,用$|B_{00}\\rangle$投影后我们有\n", "\n", "$$\n", - "\\frac{1}{\\sqrt{2}}(\\langle B_{00}|\\psi,0\\rangle|0\\rangle+\\langle B_{00}|\\psi,1\\rangle|1\\rangle)=\\frac{1}{2}(\\alpha|0\\rangle+\\beta|1\\rangle)=\\frac{1}{2}|\\psi\\rangle\n", + "\\frac{1}{\\sqrt{2}}\\left(\\langle B_{00}|\\psi,0\\rangle|0\\rangle+\\langle B_{00}|\\psi,1\\rangle|1\\rangle\\right)=\\frac{1}{2}\\left(\\alpha|0\\rangle+\\beta|1\\rangle\\right)=\\frac{1}{2}|\\psi\\rangle\n", "$$\n", "\n", - "也可以尝试另外几种可能。\n", - "\n", - "## 不可克隆原理\n", + "也可以尝试另外几种可能。\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 不可克隆原理\n", "\n", "在经典世界中,经典信息可以被复制任意次数。\n", "$$\n", "0 \\rightarrow 00000000\\dots, 1 \\rightarrow 111111\\dots\n", "$$\n", - "例如我们可以用CNOT实现经典克隆,对于$x\\in [0, 1]$,\n", + "例如我们可以用CNOT实现经典克隆,对于 $x\\in [0, 1]$,\n", "$$\n", "U_{CNOT}|x\\rangle|0\\rangle=|x\\rangle|x\\rangle\n", "$$\n", "关键是不可能对(**未知**)量子态进行这样的(**与状态无关的**)操作,即**完美**克隆$|\\psi\\rangle \\rightarrow |\\psi\\rangle|\\psi\\rangle|\\psi\\rangle|\\psi\\rangle|\\psi\\rangle\\dots$是被量子力学禁止的。\n", "\n", - "例如,对于$|\\psi\\rangle\\equiv\\alpha|0\\rangle+\\beta|1\\rangle$,\n", + "例如,对于 $|\\psi\\rangle\\equiv\\alpha|0\\rangle+\\beta|1\\rangle$,\n", "$$\n", "U_{CNOT}|\\psi\\rangle|0\\rangle=\\alpha|00\\rangle+\\beta|11\\rangle \\neq|\\psi\\rangle|\\psi\\rangle\n", "$$\n", @@ -201,9 +214,14 @@ "U_{clone}|\\psi\\rangle|0\\rangle = \\alpha U_{clone}|0\\rangle|0\\rangle+\\beta U_{clone}|1\\rangle|0\\rangle=\\alpha |0\\rangle|0\\rangle+\\beta|1\\rangle|1\\rangle\n", "$$\n", "\n", - "这再次导致矛盾。\n", - "\n", - "## 通用量子门\n", + "这再次导致矛盾。\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 通用量子门\n", "\n", "经典计算中存在着通用门,比如与非门。现在我们想找到量子计算的通用量子门集,且希望这些通用量子门作用的比特数尽可能少,这可能有许多不同的选择。\n", "\n", @@ -229,16 +247,16 @@ " Version\n", " \n", "mindquantum0.7.0\n", - "numpy1.20.0\n", + "numpy1.22.3\n", "\n", " System\n", " Info\n", "\n", - "Python3.9.7OSLinux x86_64Memory16.72 GBCPU Max Thread8DateTue Nov 29 14:16:59 2022\n", + "Python3.9.13OSLinux x86_64Memory8.2 GBCPU Max Thread6DateTue Nov 29 21:21:41 2022\n", "\n" ], "text/plain": [ - "" + "" ] }, "execution_count": 1, @@ -254,11 +272,8 @@ } ], "metadata": { - "interpreter": { - "hash": "aee8b7b246df8f9039afb4144a1f6fd8d2ca17a180786b69acc140d282b71a49" - }, "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "Python 3.9.13 ('mq')", "language": "python", "name": "python3" }, @@ -272,7 +287,12 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.7" + "version": "3.9.13" + }, + "vscode": { + "interpreter": { + "hash": "6ea26b0ca9703e45d22ca948baff99d1d70a8502b08bee4ef4c347bc7486a73d" + } } }, "nbformat": 4, diff --git a/lecture13.ipynb b/lecture13.ipynb index 9e4e99fc62c5a36b68d90ea8f1c09f107607c287..2cf88313cd2e6af25058af88fa89ba01129b0fcc 100644 --- a/lecture13.ipynb +++ b/lecture13.ipynb @@ -5,6 +5,16 @@ "metadata": {}, "source": [ "![banner](https://mindspore.cn/static/img/logo_black.74c3909e.png)\n", + "\n", + "| Author |\n", + "| ------ |\n", + "| [@zhuyikang](https://gitee.com/zhuyikang) |" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ "\n", "# 任意酉矩阵的门分解\n", "\n", @@ -54,7 +64,7 @@ "\n", "$$ W_0^{-1} U = \\left| 0 \\right> \\left< 0 \\right| + | \\tilde{\\psi} _1 \\rangle \\langle 1 | + \\cdots + | \\tilde{\\psi} _{N-1} \\rangle \\langle N-1 | $$\n", "\n", - "其中 $|\\tilde{\\psi}_k\\rangle \\equiv W_0 |\\psi_k\\rangle$ 。\n", + "其中 $|\\tilde{\\psi}_k\\rangle \\equiv W_0^{-1} |\\psi_k\\rangle$ 。\n", "\n", "注意到,由于 $W_0$ 和 $U$ 都是酉矩阵,所以 $W_0^{-1}U$ 还是酉矩阵,根据酉矩阵的单位正交性(酉矩阵的每一行组成的向量单位正交,每一列组成的向量单位正交),对于 $k>0$ 有 $\\langle 0|\\tilde{\\psi}_k\\rangle = 0$ 。\n", "\n", @@ -354,6 +364,26 @@ "print(np.allclose(v, u0))" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 习题\n", + "\n", + "## Exercise 1\n", + "\n", + "尝试将下面的 $U$ 分解为二级酉矩阵的乘积。\n", + "\n", + "$$\n", + "U = \\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", + "$$" + ] + }, { "cell_type": "code", "execution_count": 1, @@ -368,17 +398,16 @@ " Software\n", " Version\n", " \n", - "mindquantum0.7.0\n", - "numpy1.20.0\n", + "numpy1.22.3\n", "\n", " System\n", " Info\n", "\n", - "Python3.9.7OSLinux x86_64Memory16.72 GBCPU Max Thread8DateTue Nov 29 14:17:13 2022\n", + "Python3.9.13OSLinux x86_64Memory8.2 GBCPU Max Thread6DateTue Nov 29 21:32:04 2022\n", "\n" ], "text/plain": [ - "" + "" ] }, "execution_count": 1, @@ -389,33 +418,13 @@ "source": [ "from show_info import InfoTable\n", "\n", - "InfoTable('mindquantum', 'numpy')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 习题\n", - "\n", - "## Exercise 1\n", - "\n", - "尝试将下面的 $U$ 分解为二级酉矩阵的乘积。\n", - "\n", - "$$\n", - "U = \\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", - "$$" + "InfoTable('numpy')" ] } ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "Python 3.9.13 ('mq')", "language": "python", "name": "python3" }, @@ -429,11 +438,11 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.7" + "version": "3.9.13" }, "vscode": { "interpreter": { - "hash": "0ed0b97269d4f102e0624f582249018cd3d8c77b83fc4d003b4aaace9dedf79d" + "hash": "6ea26b0ca9703e45d22ca948baff99d1d70a8502b08bee4ef4c347bc7486a73d" } } }, diff --git a/lecture14.ipynb b/lecture14.ipynb index a6ba707b0f6455f5dba2395bbdcee606a435f77b..6a3d89b189a4032e950412d75c992288b0792200 100644 --- a/lecture14.ipynb +++ b/lecture14.ipynb @@ -5,10 +5,20 @@ "metadata": {}, "source": [ "![banner](https://mindspore.cn/static/img/logo_black.74c3909e.png)\n", + "\n", + "| Author |\n", + "| ------ |\n", + "| [@zhuyikang](https://gitee.com/zhuyikang) |" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ "\n", "# 分解二级酉矩阵\n", "\n", - "在lecture 13中,我们已经学会将任意酉矩阵分解为若干二级酉矩阵的乘积,那么下一个目标就是将二级酉矩阵用我们所熟知的单比特门和双比特门来构造出来。\n", + "在 lecture 13 中,我们已经学会将任意酉矩阵分解为若干二级酉矩阵的乘积,那么下一个目标就是将二级酉矩阵用我们所熟知的单比特门和双比特门来构造出来。\n", "\n", "## 只有一位不同\n", "\n", @@ -481,6 +491,38 @@ "print(np.allclose(c1.matrix(), c2.matrix()))" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 习题\n", + "\n", + "## Exercise 1\n", + "\n", + "给出下面这个二级酉矩阵的分解。" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "\n", + "v = 1 / np.sqrt(2)\n", + "u = np.array([\n", + " [v, 0, 0, 0, 0, 0, 0, v],\n", + " [0, 1, 0, 0, 0, 0, 0, 0],\n", + " [0, 0, 1, 0, 0, 0, 0, 0],\n", + " [0, 0, 0, 1, 0, 0, 0, 0],\n", + " [0, 0, 0, 0, 1, 0, 0, 0],\n", + " [0, 0, 0, 0, 0, 1, 0, 0],\n", + " [0, 0, 0, 0, 0, 0, 1, 0],\n", + " [v, 0, 0, 0, 0, 0, 0, -v],\n", + "])" + ] + }, { "cell_type": "code", "execution_count": 1, @@ -496,16 +538,17 @@ " Version\n", " \n", "mindquantum0.7.0\n", - "numpy1.20.0\n", + "numpy1.22.3\n", + "IPython8.6.0\n", "\n", " System\n", " Info\n", "\n", - "Python3.9.7OSLinux x86_64Memory16.72 GBCPU Max Thread8DateTue Nov 29 14:17:42 2022\n", + "Python3.9.13OSLinux x86_64Memory8.2 GBCPU Max Thread6DateTue Nov 29 21:28:40 2022\n", "\n" ], "text/plain": [ - "" + "" ] }, "execution_count": 1, @@ -516,45 +559,13 @@ "source": [ "from show_info import InfoTable\n", "\n", - "InfoTable('mindquantum', 'numpy')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 习题\n", - "\n", - "## Exercise 1\n", - "\n", - "给出下面这个二级酉矩阵的分解。" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "\n", - "v = 1 / np.sqrt(2)\n", - "u = np.array([\n", - " [v, 0, 0, 0, 0, 0, 0, v],\n", - " [0, 1, 0, 0, 0, 0, 0, 0],\n", - " [0, 0, 1, 0, 0, 0, 0, 0],\n", - " [0, 0, 0, 1, 0, 0, 0, 0],\n", - " [0, 0, 0, 0, 1, 0, 0, 0],\n", - " [0, 0, 0, 0, 0, 1, 0, 0],\n", - " [0, 0, 0, 0, 0, 0, 1, 0],\n", - " [v, 0, 0, 0, 0, 0, 0, -v],\n", - "])" + "InfoTable('mindquantum', 'numpy', 'IPython')" ] } ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "Python 3.9.13 ('mq')", "language": "python", "name": "python3" }, @@ -568,11 +579,11 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.7" + "version": "3.9.13" }, "vscode": { "interpreter": { - "hash": "0ed0b97269d4f102e0624f582249018cd3d8c77b83fc4d003b4aaace9dedf79d" + "hash": "6ea26b0ca9703e45d22ca948baff99d1d70a8502b08bee4ef4c347bc7486a73d" } } }, diff --git a/lecture15.ipynb b/lecture15.ipynb index 10f424ab95d18ddaa52b52aa2fabf75661fb4419..c64237463c8ad061d25443ac6944904da5b150c7 100644 --- a/lecture15.ipynb +++ b/lecture15.ipynb @@ -6,6 +6,15 @@ "source": [ "![banner](https://mindspore.cn/static/img/logo_black.74c3909e.png)\n", "\n", + "| Author |\n", + "| ------ |\n", + "| [@zhuyikang](https://gitee.com/zhuyikang) |" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ "# 量子线路的误差\n", "\n", "量子门永远都不可能是「完美」的,因为酉矩阵是连续的,我们只能使用连续变量来表示,可是现实中的计算总是有限精度的,这意味着误差是一定存在的。\n", @@ -448,18 +457,26 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3.9.0 64-bit ('3.9.0')", + "display_name": "Python 3.9.13 ('mq')", "language": "python", "name": "python3" }, "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", "name": "python", - "version": "3.9.0" + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.13" }, "orig_nbformat": 4, "vscode": { "interpreter": { - "hash": "0ed0b97269d4f102e0624f582249018cd3d8c77b83fc4d003b4aaace9dedf79d" + "hash": "6ea26b0ca9703e45d22ca948baff99d1d70a8502b08bee4ef4c347bc7486a73d" } } }, diff --git a/lecture16.ipynb b/lecture16.ipynb index 02d157f729d4ca15a3acc23ca77a1cbe3853fc91..31ff1b08f92656de3ee6ab0b6112e5bd829bfbdb 100644 --- a/lecture16.ipynb +++ b/lecture16.ipynb @@ -5,10 +5,20 @@ "metadata": {}, "source": [ "![banner](https://mindspore.cn/static/img/logo_black.74c3909e.png)\n", + "\n", + "| Author |\n", + "| ------ |\n", + "| [@zhuyikang](https://gitee.com/zhuyikang) |" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ "\n", "# 通用量子门\n", "\n", - "在之前的章节中,我们使用单量子比特门的集合。因为一些技术原因,在允许误差的量子计算中,我们想要仅仅使用Hadamard门和T门来代替单量子比特门的集合。\n", + "在之前的章节中,我们使用单量子比特门的集合。因为一些技术原因,在允许误差的量子计算中,我们想要仅仅使用 Hadamard 门和 T 门来代替单量子比特门的集合。\n", "$$\n", "H = {1\\over\\sqrt{2}} \\begin{bmatrix} \n", "1 & 1\\\\\n", @@ -128,18 +138,18 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3.9.0 64-bit ('3.9.0')", + "display_name": "Python 3.9.13 ('mq')", "language": "python", "name": "python3" }, "language_info": { "name": "python", - "version": "3.9.0" + "version": "3.9.13" }, "orig_nbformat": 4, "vscode": { "interpreter": { - "hash": "0ed0b97269d4f102e0624f582249018cd3d8c77b83fc4d003b4aaace9dedf79d" + "hash": "6ea26b0ca9703e45d22ca948baff99d1d70a8502b08bee4ef4c347bc7486a73d" } } }, diff --git a/lecture17.ipynb b/lecture17.ipynb index 16cadd96e7279f98bf468f005772e7203ebbcad2..cd9588a1734b460878be31638e74e45c6029cd2c 100644 --- a/lecture17.ipynb +++ b/lecture17.ipynb @@ -6,24 +6,32 @@ "source": [ "![banner](https://mindspore.cn/static/img/logo_black.74c3909e.png)\n", "\n", - "# Lecture 17\n", + "| Author |\n", + "| ------ |\n", + "| [@dsdsdshe](https://gitee.com/dsdsdshe)|" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Solovay-Kitaev 算法\n", "\n", - "## Solovay-Kitaev 算法\n", - "现在,我们已经了解到,使用 THTH 序列之类的东西,我们可以将任何单个量子比特门逼近到任何精度,但是性能似乎很差。Solovay-Kitaev 算法旨在加快逼近门的过程。SK 算法的适用性比我们先前所讨论的要广泛,因此,我们需要学习$\\epsilon$-net 的概念。什么是$\\epsilon$-net $V_\\epsilon$?我们已经见过一个(在上一节的最后一个等式中)。简单来说,给定一个任意的酉门,如果我们有一个 $\\epsilon$-net,那么我们应该能够用某个门$V\\in V_\\epsilon$来近似$U$,精度为$\\epsilon$,即\n", + "现在,我们已经了解到,使用 THTH 序列之类的东西,我们可以将任何单个量子比特门逼近到任何精度,但是性能似乎很差。Solovay-Kitaev 算法旨在加快逼近门的过程。SK 算法的适用性比我们先前所讨论的要广泛,因此,我们需要学习 $\\epsilon$-net 的概念。什么是 $\\epsilon$-net $V_\\epsilon$?我们已经见过一个(在上一节的最后一个等式中)。简单来说,给定一个任意的酉门,如果我们有一个 $\\epsilon$-net,那么我们应该能够用某个门 $V\\in V_\\epsilon$来近似$U$,精度为 $\\epsilon$,即\n", "$$\n", "\\boxed{\n", "\\|U-V\\| \\equiv \\operatorname{tr} \\sqrt{(U-V)^{\\dagger}(U-V)} \\leq \\epsilon\n", "}\n", "$$\n", - "上式等价于$\\left\\|U V^{+}-I\\right\\| \\leq \\epsilon$。\n", + "上式等价于 $\\left\\|U V^{+}-I\\right\\| \\leq \\epsilon$。\n", "\n", - "**此外,逆应当存在,即如果我们有$V$, 则我们有$V^\\dagger$。**\n", + "**此外,逆应当存在,即如果我们有 $V$, 则我们有 $V^\\dagger$。**\n", "\n", "让我们仔细研究对于一个任意矩阵的(迹)范数:$\\|A\\|=\\operatorname{tr}\\sqrt{A^\\dagger A}$\n", "\n", - "- 若$A$是厄米的,即$A^\\dagger=A$,那么$\\|A\\|=\\left|a_{1}\\right|+\\left|a_{2}\\right|+\\left|a_{3}\\right|+\\ldots$是特征值的绝对值之和。\n", + "- 若 $A$ 是厄米的,即 $A^\\dagger=A$,那么 $\\|A\\|=\\left|a_{1}\\right|+\\left|a_{2}\\right|+\\left|a_{3}\\right|+\\ldots$ 是特征值的绝对值之和。\n", "\n", - "- 对于任何幺正矩阵$U$,$\\|U A\\|=\\operatorname{tr}\\sqrt{A^\\dagger U^\\dagger U A}=\\|A\\|$。\n", + "- 对于任何幺正矩阵 $U$,$\\|U A\\|=\\operatorname{tr}\\sqrt{A^\\dagger U^\\dagger U A}=\\|A\\|$。\n", "\n", "也可以参考\n", "\n", @@ -35,9 +43,9 @@ "\\left\\|U V^{\\dagger}-W\\right\\|=\\|U-W V\\|=O\\left(\\epsilon^{3 / 2}\\right)\n", "}\n", "$$\n", - "其中$W$是 epsilon 网络中门的**乘积**。这是一个令人惊讶的结果,通常我们认为近似值应该是$O\\left(\\epsilon\\right)$。\n", + "其中 $W$ 是 epsilon 网络中门的**乘积**。这是一个令人惊讶的结果,通常我们认为近似值应该是 $O\\left(\\epsilon\\right)$。\n", "\n", - "- 如果每一步都花费$O\\left(\\epsilon\\right)$,n 步将是$O\\left(n \\epsilon\\right)$\n", + "- 如果每一步都花费 $O\\left(\\epsilon\\right)$,n 步将是 $O\\left(n \\epsilon\\right)$\n", "- 请记住,这里的错误是**系统性**的,这意味着它无法被消除。\n", "\n", "---\n", @@ -48,17 +56,17 @@ "$$\n", "U V^\\dagger \\equiv e^{iA}\n", "$$\n", - "其中我们有 $\\|A\\| = O(\\epsilon)$,且$\\|e^{iA}-I\\|=\\|iA\\|=O(\\epsilon)$。等价的,我们可以只写$A=O(\\epsilon)$。\n", + "其中我们有 $\\|A\\| = O(\\epsilon)$,且 $\\|e^{iA}-I\\|=\\|iA\\|=O(\\epsilon)$。等价的,我们可以只写 $A=O(\\epsilon)$。\n", "\n", - "- 接下来,我们要找到一个记为$W$的门的乘积,以最小化范数:$\\|U V^\\dagger - W\\|=\\|e^{iA} - W\\|$。为了继续,我们需要知道一个有趣的关系:对于任何给定的$A$,总是可以找到一对(它们可能不是唯一的)矩阵$B$和$C$使得\n", + "- 接下来,我们要找到一个记为 $W$ 的门的乘积,以最小化范数:$\\|U V^\\dagger - W\\|=\\|e^{iA} - W\\|$。为了继续,我们需要知道一个有趣的关系:对于任何给定的 $A$,总是可以找到一对(它们可能不是唯一的)矩阵 $B$ 和 $C$ 使得\n", "$$\n", "[B, C]=-iA\n", "$$\n", - "其中$\\|B\\|=\\|C\\|=O(\\epsilon^{1/2})$。\n", + "其中 $\\|B\\|=\\|C\\|=O(\\epsilon^{1/2})$。\n", "\n", - "- 对于量子比特,你可以想象我们可以旋转参考系,因此$A = O(\\epsilon)Z$。那么,自然地,我们可以选择$B=O(\\epsilon^{1/2}X)$和$C = O(\\epsilon^{1/2})Y$。\n", + "- 对于量子比特,你可以想象我们可以旋转参考系,因此 $A = O(\\epsilon)Z$。那么,自然地,我们可以选择 $B=O(\\epsilon^{1/2}X)$ 和 $C = O(\\epsilon^{1/2})Y$。\n", "\n", - "备注:虽然$A$有点小,但它的数学表达式是准确已知的。因此,$B$和$C$也是已知的。\n", + "备注:虽然 $A$ 有点小,但它的数学表达式是准确已知的。因此,$B$ 和 $C$ 也是已知的。\n", "\n", "- 现在,让我们尝试以下方法:\n", "$$\n", @@ -66,19 +74,19 @@ "W \\equiv e^{i B^{\\prime}} e^{i C^{\\prime}} e^{-i B^{\\prime}} e^{-i C^{\\prime}}=I-\\left[B^{\\prime}, C^{\\prime}\\right]+O\\left(\\epsilon^{3 / 2}\\right)\n", "}\n", "$$\n", - "其中门$e^{iB'}$是$e^{iB}$的近似值,并且类似地$e^{iC'}$是$e^{iC}$的近似值。这意味着$\\left\\|e^{i B^{\\prime}}-e^{i B}\\right\\|=O(\\epsilon),\\left\\|e^{i C^{\\prime}}-e^{i C}\\right\\|=O(\\epsilon)$,进而得到$\\|B'-B\\|=O(\\epsilon)$和$\\|C'-C\\|=O(\\epsilon)$。\n", + "其中门 $e^{iB'}$是$e^{iB}$ 的近似值,并且类似地 $e^{iC'}$ 是 $e^{iC}$ 的近似值。这意味着 $\\left\\|e^{i B^{\\prime}}-e^{i B}\\right\\|=O(\\epsilon),\\left\\|e^{i C^{\\prime}}-e^{i C}\\right\\|=O(\\epsilon)$,进而得到 $\\|B'-B\\|=O(\\epsilon)$ 和 $\\|C'-C\\|=O(\\epsilon)$。\n", "\n", "- 让我们进行验证:\n", "$$\n", "e^{i B^{\\prime}} e^{i C^{\\prime}} e^{-i B^{\\prime}} e^{-i C^{\\prime}}=\\left(I+i B^{\\prime}+O(\\epsilon)\\right)\\left(I+i C^{\\prime}+O(\\epsilon)\\right)\\left(I-i B^{\\prime}+O(\\epsilon)\\right)\\left(I-i C^{\\prime}+O(\\epsilon)\\right)\n", "$$\n", - "如果你只查看一阶项,它们会被相互抵消。为什么二阶项只包含$[B', C']$?(**homework**)\n", + "如果你只查看一阶项,它们会被相互抵消。为什么二阶项只包含 $[B', C']$?(**homework**)\n", "\n", "- 现在,如果我们关注对易子,我们有\n", "$$\n", "\\left[B^{\\prime}, C^{\\prime}\\right]=[B+O(\\epsilon), C+O(\\epsilon)]=[B, C]+O\\left(\\epsilon^{3 / 2}\\right)\n", "$$\n", - "这意味着你可以将$[B', C']$替换为$[B, C]= -iA$。换句话说,\n", + "这意味着你可以将 $[B', C']$ 替换为 $[B, C]= -iA$。换句话说,\n", "$$\n", "W=I+i A+O\\left(\\epsilon^{3 / 2}\\right)=e^{i A}+O\\left(\\epsilon^{3 / 2}\\right)\n", "$$\n", @@ -86,24 +94,24 @@ "\n", "---\n", "\n", - "因此,我们现在从$\\epsilon$-net有效地构建了一个$\\epsilon^{3/2}$-net,代价是总共应用5个门,即$WV=e^{i B^{\\prime}} e^{i C^{\\prime}} e^{-i B^{\\prime}} e^{-i C^{\\prime}}V$,这来自于$\\epsilon$-net。现在,如果我们再次替换整个论点,那么我们会得到一个更好的网络(如果我们不关心额外的门):$~(\\epsilon^{3/2})^{3/2}=\\epsilon^{(3/2)^2}$。更严格地,让我们通过(上限)量化新误差\n", + "因此,我们现在从 $\\epsilon$-net有效地构建了一个 $\\epsilon^{3/2}$-net,代价是总共应用5个门,即 $WV=e^{i B^{\\prime}} e^{i C^{\\prime}} e^{-i B^{\\prime}} e^{-i C^{\\prime}}V$,这来自于 $\\epsilon$-net。现在,如果我们再次替换整个论点,那么我们会得到一个更好的网络(如果我们不关心额外的门):$~(\\epsilon^{3/2})^{3/2}=\\epsilon^{(3/2)^2}$。更严格地,让我们通过(上限)量化新误差\n", "$$\n", "\\epsilon_{1}=c \\epsilon_{0}^{3 / 2} \\quad \\text { or } \\quad c^{2} \\epsilon_{1}=\\left(c^{2} \\epsilon_{0}\\right)^{3 / 2}\n", "$$\n", - "其中$\\epsilon_0$是 epsilon-net 中的原始值,并且$c$是某个常数。\n", + "其中 $\\epsilon_0$ 是 epsilon-net 中的原始值,并且 $c$ 是某个常数。\n", "\n", - "此外,如果需要花费(最大)$L_0$基本门在$\\epsilon$-net 中实现$V$,那么需要花费$L_1=5L_0$个门$\\{e^{i B^{\\prime}}, e^{i C^{\\prime}}, e^{-i B^{\\prime}}, e^{-i C^{\\prime}}, V\\}$来构建$\\epsilon^{3/2}$-net。如果我们更进一步,那么我们有\n", + "此外,如果需要花费(最大)$L_0$ 基本门在 $\\epsilon$-net 中实现 $V$,那么需要花费 $L_1=5L_0$ 个门 $\\{e^{i B^{\\prime}}, e^{i C^{\\prime}}, e^{-i B^{\\prime}}, e^{-i C^{\\prime}}, V\\}$ 来构建 $\\epsilon^{3/2}$-net。如果我们更进一步,那么我们有\n", "$$\n", "\\epsilon_{2}=c \\epsilon_{1}^{3 / 2} \\quad \\text { or } \\quad c^{2} \\epsilon_{2}=\\left(c^{2} \\epsilon_{1}\\right)^{3 / 2}=\\left(c^{2} \\epsilon_{0}\\right)^{(3 / 2)^{2}}\n", "$$\n", "\n", - "下一次(第 2 级),你需要应用来自 $\\epsilon^{3/2}$-net 的集合来近似门集合如$\\{e^{i B^{\\prime}}, e^{i C^{\\prime}}, e^{-i B^{\\prime}}, e^{-i C^{\\prime}}, WV \\}$ 。那将是$5(5L_0)$个门。\n", + "下一次(第 2 级),你需要应用来自 $\\epsilon^{3/2}$-net 的集合来近似门集合如 $\\{e^{i B^{\\prime}}, e^{i C^{\\prime}}, e^{-i B^{\\prime}}, e^{-i C^{\\prime}}, WV \\}$ 。那将是 $5(5L_0)$ 个门。\n", "\n", "一般来说,在级别 $k$,我们有\n", "$$\n", "c^{2} \\epsilon_{k}=\\left(c^{2} \\epsilon_{k-1}\\right)^{3 / 2}=\\left(c^{2} \\epsilon_{0}\\right)^{(3 / 2)^{k}}\n", "$$\n", - "我们总共需要$L_k=5L_{k-1}=5^k L_0$。\n", + "我们总共需要 $L_k=5L_{k-1}=5^k L_0$。\n", "\n", "现在,我们的情况是,如果我们愿意支付应用指数个门(以 $k$ 为单位)的成本,那么我们会在缩小误差方面获得双指数效应。因此,我们可能会获得一些优势(**homework**)\n", "\n", @@ -116,15 +124,26 @@ "L_{k}=O\\left(\\log \\left(1 / \\epsilon_{k}\\right)^{3.97}\\right)\n", "$$\n", "\n", - "这个表达式告诉我们,如果我们想要实现$\\epsilon_k$大小的近似值,那么您预计每个门都会有$O\\left(\\log \\left(1 / \\epsilon_{k}\\right)^{3.97}\\right)$的额外成本,这只会带来多项式开销。例如,在某个$n$量子比特的量子算法中,我们有一个 poly(n) 的电路。 将每个门改进为 $\\epsilon_k$后,我们仍然有一个多项式电路。" + "这个表达式告诉我们,如果我们想要实现 $\\epsilon_k$ 大小的近似值,那么您预计每个门都会有 $O\\left(\\log \\left(1 / \\epsilon_{k}\\right)^{3.97}\\right)$ 的额外成本,这只会带来多项式开销。例如,在某个 $n$ 量子比特的量子算法中,我们有一个 $poly(n)$ 的电路。 将每个门改进为 $\\epsilon_k$ 后,我们仍然有一个多项式电路。" ] } ], "metadata": { + "kernelspec": { + "display_name": "Python 3.9.13 ('mq')", + "language": "python", + "name": "python3" + }, "language_info": { - "name": "python" + "name": "python", + "version": "3.9.13" }, - "orig_nbformat": 4 + "orig_nbformat": 4, + "vscode": { + "interpreter": { + "hash": "6ea26b0ca9703e45d22ca948baff99d1d70a8502b08bee4ef4c347bc7486a73d" + } + } }, "nbformat": 4, "nbformat_minor": 2 diff --git a/lecture19.ipynb b/lecture19.ipynb index 89d575dff21efeb93ca8e7167ea849893ebd466e..fd60c4a7781d1a8f91cc6dd0b93c68c4d952de9c 100644 --- a/lecture19.ipynb +++ b/lecture19.ipynb @@ -6,25 +6,31 @@ "source": [ "![banner](https://mindspore.cn/static/img/logo_black.74c3909e.png)\n", "\n", - "# Lecture 19\n", - "\n", + "| Author |\n", + "| ------ |\n", + "| [@dsdsdshe](https://gitee.com/dsdsdshe)|" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ "到目前为止,我们的讨论相当笼统。适用于大多数量子算法的框架。现在,是时候研究一些“真实”量子算法的细节了,但这些算法可能并不“实用”,因为我们只是试图证明量子计算的想法。我们首先需要理清的是,量子计算机是如何进行经典计算的。在这里,重要的一点是 Toffoli 门对于经典计算机是“通用的”。想象一下,我们有一个经典电路,带有 AND、OR、NOT 等逻辑门,其想法是用 Toffoli 门(连同一些辅助位)替换每个逻辑门。\n", "\n", "有两个问题需要弄清楚。\n", "\n", "- 首先,经典计算是不可逆的(信息丢失),但量子计算是可逆的(信息守恒)。\n", - "\n", "- 其次,一些经典计算涉及随机性。\n", "\n", - "这两个问题都可以通过量子计算来克服,方法是保留信息并使用量子测量,例如在$|+\\rangle$态上测量。\n", + "这两个问题都可以通过量子计算来克服,方法是保留信息并使用量子测量,例如在 $|+\\rangle$ 态上测量。\n", "\n", - "## Toffoli 门\n", + "# Toffoli 门\n", "\n", - "让我们看一下toffoli门的逻辑表。\n", + "让我们看一下 Toffoli 门的逻辑表。\n", "\n", "![Toffoli gate logic table](images/Toffoli_logic_table.png)\n", "\n", - "【事实】与非门(NAND 门)(与门 后接 非门)对于经典计算是通用的。这足以证明如果Toffoli 门可以模拟与非门,那么Toffoli 门对于经典计算也是通用的。\n", + "【事实】与非门(NAND 门)(与门 后接 非门)对于经典计算是通用的。这足以证明如果 Toffoli 门可以模拟与非门,那么 Toffoli 门对于经典计算也是通用的。\n", "\n", "![NAND gate](images/NAND_gate.png)\n", "\n", @@ -36,7 +42,7 @@ "\n", "一个很好的类比:量子计算机确实可以模拟经典计算,但量子计算机不太可能取代经典计算机。为什么?就像飞机都可以像汽车一样操作,但我们不会用飞机代替汽车。\n", "\n", - "## 量子并行\n", + "# 量子并行\n", "\n", "当我还是一名研究生时,我是团队中唯一从事量子计算的人。在一次组会上,我试图解释量子计算,然后我写了这个($x \\in \\{ 0,1 \\}^n$):\n", "$$\n", @@ -256,7 +262,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### 量子叠加\n", + "## 量子叠加\n", "\n", "对于一个单量子比特,我们知道\n", "$$\n", @@ -273,15 +279,15 @@ "H^{\\otimes n}\\left|0^{n}\\right\\rangle=\\frac{1}{\\sqrt{2^{n}}} \\sum_{x \\in\\{0,1\\}^{n}}|x\\rangle\n", "$$\n", "\n", - "在$n$个量子比特上使用$n$个 Hadmard 门,可以创建具有 $2^n$ 输入项的量子叠加。指数希尔伯特空间是使其成为经典模拟难题的必要条件(但不是充分条件)。\n", + "在$n$个量子比特上使用 $n$ 个 Hadmard 门,可以创建具有 $2^n$ 输入项的量子叠加。指数希尔伯特空间是使其成为经典模拟难题的必要条件(但不是充分条件)。\n", "\n", - "结合前面的讨论,我们可以断言存在一个幺正的电路$U_f$,这样\n", + "结合前面的讨论,我们可以断言存在一个幺正的电路 $U_f$,这样\n", "$$\n", "\\boxed{\n", "\\sum_{x} a_{x} U_{f}|x\\rangle|0\\rangle=\\sum_{x} a_{x}|x\\rangle|f(x)\\rangle\n", "}\n", "$$\n", - "其中$f(x)$是一些可以表示为经典电路的函数。" + "其中 $f(x)$ 是一些可以表示为经典电路的函数。" ] }, { @@ -303,11 +309,11 @@ " System\n", " Info\n", "\n", - "Python3.9.7OSLinux x86_64Memory16.72 GBCPU Max Thread8DateTue Nov 29 14:18:40 2022\n", + "Python3.9.13OSLinux x86_64Memory8.2 GBCPU Max Thread6DateTue Nov 29 21:39:39 2022\n", "\n" ], "text/plain": [ - "" + "" ] }, "execution_count": 1, @@ -323,11 +329,8 @@ } ], "metadata": { - "interpreter": { - "hash": "01ef07bfcd890b3fb13769b93b40ebec23f083c4455175924b1f47ada90ba335" - }, "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "Python 3.9.13 ('mq')", "language": "python", "name": "python3" }, @@ -341,7 +344,12 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.7" + "version": "3.9.13" + }, + "vscode": { + "interpreter": { + "hash": "6ea26b0ca9703e45d22ca948baff99d1d70a8502b08bee4ef4c347bc7486a73d" + } } }, "nbformat": 4, diff --git a/lecture2.ipynb b/lecture2.ipynb index d58d57ae8a52a3968f30f57d0084ac5bc0cd08c8..75108671aa031024f215449e2548e42450c05820 100644 --- a/lecture2.ipynb +++ b/lecture2.ipynb @@ -6,6 +6,15 @@ "source": [ "![banner](https://mindspore.cn/static/img/logo_black.74c3909e.png)\n", "\n", + "| Author |\n", + "| ------ |\n", + "| [@zhuyikang](https://gitee.com/zhuyikang) |" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ "# 量子比特\n", "\n", "一个量子比特 qubit 可以用来描述一个二级系统,用狄拉克符号 $|\\psi \\rangle$ 表示。通常一个量子比特可以写作 \n", @@ -524,6 +533,34 @@ "> - `circ.svg()`:在 jupyter notebook 的环境中,MindQuantum 的很多类型都可以调用 `.svg()` 来实现更漂亮的输出,例如:`Circuit`、`MeasureResult` 等等。调用 `.svg()` 必需在代码块的末尾,如果想在代码块中间调用,需要使用 `IPython.display.display_svg` 函数。" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 习题\n", + "\n", + "## Exercise 1\n", + "\n", + "对 $|\\psi\\rangle = \\frac{|0\\rangle + (1+i)|1\\rangle}{\\sqrt{3}}$ 分别使用 $\\lbrace|0\\rangle, |1\\rangle \\rbrace$ 和\n", + "$\\lbrace |+\\rangle, |-\\rangle\\rbrace$ 进行测量。\n", + "\n", + "## Exercise 2\n", + "\n", + "画出下面几个单量子比特在Bloch球上的位置。\n", + "$$\n", + "\\begin{align*}\n", + "|\\psi_1\\rangle & = \\frac{|0\\rangle + |1\\rangle}{\\sqrt{2}} \\\\\n", + "|\\psi_2\\rangle & = \\frac{|0\\rangle - |1\\rangle}{\\sqrt{2}} \\\\\n", + "|\\psi_3\\rangle & = \\frac{|0\\rangle + i |1\\rangle}{\\sqrt{2}} \\\\\n", + "|\\psi_4\\rangle & = \\frac{|0\\rangle - i |1\\rangle}{\\sqrt{2}}\n", + "\\end{align*}\n", + "$$\n", + "\n", + "## Exercise 3\n", + "\n", + "对 $|\\psi\\rangle = \\frac{|01\\rangle - |10\\rangle}{\\sqrt{2}}$ 的两个比特进行测量。\n" + ] + }, { "cell_type": "code", "execution_count": 1, @@ -539,17 +576,18 @@ " Version\n", " \n", "mindquantum0.7.0\n", - "numpy1.20.0\n", + "numpy1.22.3\n", "matplotlib3.4.3\n", + "IPython8.6.0\n", "\n", " System\n", " Info\n", "\n", - "Python3.9.7OSLinux x86_64Memory16.72 GBCPU Max Thread8DateTue Nov 29 14:19:07 2022\n", + "Python3.9.13OSLinux x86_64Memory8.2 GBCPU Max Thread6DateTue Nov 29 20:38:10 2022\n", "\n" ], "text/plain": [ - "" + "" ] }, "execution_count": 1, @@ -560,41 +598,13 @@ "source": [ "from show_info import InfoTable\n", "\n", - "InfoTable('mindquantum', 'numpy', 'matplotlib')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 习题\n", - "\n", - "## Exercise 1\n", - "\n", - "对 $|\\psi\\rangle = \\frac{|0\\rangle + (1+i)|1\\rangle}{\\sqrt{3}}$ 分别使用 $\\lbrace|0\\rangle, |1\\rangle \\rbrace$ 和\n", - "$\\lbrace |+\\rangle, |-\\rangle\\rbrace$ 进行测量。\n", - "\n", - "## Exercise 2\n", - "\n", - "画出下面几个单量子比特在Bloch球上的位置。\n", - "$$\n", - "\\begin{align*}\n", - "|\\psi_1\\rangle & = \\frac{|0\\rangle + |1\\rangle}{\\sqrt{2}} \\\\\n", - "|\\psi_2\\rangle & = \\frac{|0\\rangle - |1\\rangle}{\\sqrt{2}} \\\\\n", - "|\\psi_3\\rangle & = \\frac{|0\\rangle + i |1\\rangle}{\\sqrt{2}} \\\\\n", - "|\\psi_4\\rangle & = \\frac{|0\\rangle - i |1\\rangle}{\\sqrt{2}}\n", - "\\end{align*}\n", - "$$\n", - "\n", - "## Exercise 3\n", - "\n", - "对 $|\\psi\\rangle = \\frac{|01\\rangle - |10\\rangle}{\\sqrt{2}}$ 的两个比特进行测量。\n" + "InfoTable('mindquantum', 'numpy', 'matplotlib', 'IPython')" ] } ], "metadata": { "kernelspec": { - "display_name": "Python 3.8.10 64-bit", + "display_name": "Python 3.9.13 ('mq')", "language": "python", "name": "python3" }, @@ -608,11 +618,11 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.10" + "version": "3.9.13" }, "vscode": { "interpreter": { - "hash": "916dbcbb3f70747c44a77c7bcd40155683ae19c65e1c03b4aa3499c5328201f1" + "hash": "6ea26b0ca9703e45d22ca948baff99d1d70a8502b08bee4ef4c347bc7486a73d" } } }, diff --git a/lecture20.ipynb b/lecture20.ipynb index fa3c72eab7d4ee900932fd7c1f1997d111e29ba2..22618a66e0491878c8143976ee8c4b0aa1b9b9a7 100644 --- a/lecture20.ipynb +++ b/lecture20.ipynb @@ -6,9 +6,17 @@ "source": [ "![banner](https://mindspore.cn/static/img/logo_black.74c3909e.png)\n", "\n", - "# Lecture 20\n", + "| Author |\n", + "| ------ |\n", + "| [@dsdsdshe](https://gitee.com/dsdsdshe)|" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ "\n", - "## Deutsch 算法(基于oracle的算法)\n", + "# Deutsch 算法(基于oracle的算法)\n", "\n", "我们应该首先了解 oracle 的概念,可以被认为是一个黑盒子,例如有人设计了一个经典电路,而没有向你解释它是什么,并且你不被允许查看它。\n", "\n", @@ -18,7 +26,7 @@ "|x\\rangle|0\\rangle \\rightarrow|x\\rangle|f(x)\\rangle\n", "}\n", "$$\n", - "我们不在乎$f(x)$是如何构造的。\n", + "我们不在乎 $f(x)$ 是如何构造的。\n", "\n", "此外,我们还可以进行以下操作(针对布尔函数)\n", "$$\n", @@ -34,14 +42,14 @@ "$$\n", "|x\\rangle \\rightarrow|x\\rangle|f(x)\\rangle \\rightarrow(-1)^{f(x)}|x\\rangle|f(x)\\rangle \\rightarrow(-1)^{f(x)}|x\\rangle\n", "$$\n", - "Deutsch 算法解决了以下问题:给定一个 oracle 布尔函数$f(x)$,它将一比特作为输入,一比特作为输出。有两种可能性:constant 或 balanced。\n", + "Deutsch 算法解决了以下问题:给定一个 oracle 布尔函数 $f(x)$,它将一比特作为输入,一比特作为输出。有两种可能性:constant 或 balanced。\n", "\n", "- 情况 1(constant):$f(0) = f(1)$\n", " - 两种可能,$f(0)=f(1)=0$ 或 $f(0)=f(1)=1$\n", "- 情况 2(balanced):$f(0) \\ne f(1)$\n", " - 两种可能,$\\{f(0)=1,f(1)=0\\}$ 或 $\\{f(0)=0,f(1)=1\\}$\n", "\n", - "传统上,必须对函数进行两次评估。如果你只调用一次oracle,你只能知道 $f(0)$ 或 $f(1)$,但不能同时知道两者。而 Deutsch 算法允许我们通过只调用一次oracle来解决问题(确定它是情况 1 还是情况 2)。\n", + "传统上,必须对函数进行两次评估。如果你只调用一次 oracle,你只能知道 $f(0)$ 或 $f(1)$,但不能同时知道两者。而 Deutsch 算法允许我们通过只调用一次 oracle 来解决问题(确定它是情况 1 还是情况 2)。\n", "\n", "**步骤1:**\n", "\n", @@ -52,15 +60,15 @@ "\n", "**步骤2:**\n", "\n", - "我们应用oracle:\n", + "我们应用 oracle:\n", "$$\n", "\\frac{1}{\\sqrt{2}}\\left((-1)^{f(0)}|0\\rangle+(-1)^{f(1)}|1\\rangle\\right)\n", "$$\n", - "请注意,如果是情况 1,那么这只是$|+\\rangle$(差一个正负号); 如果是情况 2,那么我们有$|-\\rangle$(差一个正负号)。\n", + "请注意,如果是情况 1,那么这只是 $|+\\rangle$(差一个正负号); 如果是情况 2,那么我们有 $|-\\rangle$(差一个正负号)。\n", "\n", "**步骤3:**\n", "\n", - "最后,我们只需要区分$|+\\rangle$或$|-\\rangle$态,可以通过作用 Hadamard 门来实现:$H|+\\rangle=|0\\rangle$,$H|-\\rangle=|1\\rangle$\n", + "最后,我们只需要区分 $|+\\rangle$ 或 $|-\\rangle$ 态,可以通过作用 Hadamard 门来实现:$H|+\\rangle=|0\\rangle$,$H|-\\rangle=|1\\rangle$\n", "\n", "![Deutsch Jozsa algorithm](images/Deutsch_Jozsa_algorithm.png)" ] @@ -156,15 +164,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Deutsch-Jozsa 算法\n", + "# Deutsch-Jozsa 算法\n", "\n", "后来,Jozsa 与 Deutsch 合作,将原始算法扩展到多个量子比特案例。\n", "\n", "Deutsch-Jozsa 算法求解的问题如下:\n", "\n", - "- 给定一个 n 比特布尔函数的oracle,$f(x)\\rightarrow \\{0,1\\}$,对于任意$x \\in \\{0,1\\}^n$\n", + "- 给定一个 $n$ 比特布尔函数的 oracle,$f(x)\\rightarrow \\{0,1\\}$,对于任意$x \\in \\{0,1\\}^n$\n", "- (promised problem)确定两种情况:constant 或 balanced\n", - "- **constant:** 对于所有的$x$都有 $f(x)=0$ 或 $f(x)=1$\n", + "- **constant:** 对于所有的 $x$ 都有 $f(x)=0$ 或 $f(x)=1$\n", "- **balanced:**($f(x)=0$ 的数量)=($f(x)=1$ 的数量)\n", "\n", "现在这是一个更加人造的问题。\n", @@ -174,7 +182,7 @@ "- **constant:** $f(00)=f(01)=f(10)=f(11)=0$\n", "- **balanced:** $f(00)=f(01)=0$ 和 $f(10)=f(11)=1$\n", "\n", - "让我们考虑解决问题的经典方法。从计算机科学的角度来看,我们经常对算法在最坏情况下的性能感兴趣;如果你尝试不到$2^n$的一半的组合,你仍然不能确定这个函数是constant还是balanced。因此,对于这个问题,经典的最坏情况需要我们尝试超过$2^{n-1}$种组合。\n", + "让我们考虑解决问题的经典方法。从计算机科学的角度来看,我们经常对算法在最坏情况下的性能感兴趣;如果你尝试不到 $2^n$ 的一半的组合,你仍然不能确定这个函数是 constant 还是 balanced。因此,对于这个问题,经典的最坏情况需要我们尝试超过 $2^{n-1}$ 种组合。\n", "\n", "现在让我们考虑量子算法:\n", "\n", @@ -191,7 +199,7 @@ "$$\n", "\\frac{1}{\\sqrt{2^{n}}} \\sum_{x \\in\\{0,1\\}^{n}} U_{f}|x\\rangle=\\frac{1}{\\sqrt{2^{n}}} \\sum_{x \\in\\{0,1\\}^{n}}(-1)^{f(x)}|x\\rangle\n", "$$\n", - "如果它是constant,那么我们在第一步中就有原始状态。如果它是 balanced 的,那么我们的东西会更复杂,但我们可以让它变得简单。\n", + "如果它是 constant,那么我们在第一步中就有原始状态。如果它是 balanced 的,那么我们的东西会更复杂,但我们可以让它变得简单。\n", "\n", "**步骤3:**\n", "\n", @@ -201,7 +209,7 @@ "$$\n", "此处未显示的部分在基向量中至少包含一个“1”。例如:$H^{\\otimes 2}|01\\rangle=(|0\\rangle+|1\\rangle)(|0\\rangle-|1\\rangle) / 2=(1 / 2)|00\\rangle+\\ldots$\n", "\n", - "现在,我们可以很清楚地看到, constant 的幅度为 1,而 balanced 的幅度为 0。总之,我们可以通过应用一次oracle来解决问题,并检查最终输出是否在 $|000\\ldots 0\\rangle$。" + "现在,我们可以很清楚地看到, constant 的幅度为 1,而 balanced 的幅度为 0。总之,我们可以通过应用一次 oracle 来解决问题,并检查最终输出是否在 $|000\\ldots 0\\rangle$。" ] }, { @@ -219,16 +227,16 @@ " Version\n", " \n", "mindquantum0.7.0\n", - "numpy1.20.0\n", + "numpy1.22.3\n", "\n", " System\n", " Info\n", "\n", - "Python3.9.7OSLinux x86_64Memory16.72 GBCPU Max Thread8DateTue Nov 29 14:19:22 2022\n", + "Python3.9.13OSLinux x86_64Memory8.2 GBCPU Max Thread6DateTue Nov 29 21:42:08 2022\n", "\n" ], "text/plain": [ - "" + "" ] }, "execution_count": 1, @@ -245,7 +253,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "Python 3.9.13 ('mq')", "language": "python", "name": "python3" }, @@ -259,11 +267,11 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.7" + "version": "3.9.13" }, "vscode": { "interpreter": { - "hash": "acc57148d012b3a87b6bd94e84aac5f0597fe9bee67f87efb58a2afa0e5376ad" + "hash": "6ea26b0ca9703e45d22ca948baff99d1d70a8502b08bee4ef4c347bc7486a73d" } } }, diff --git a/lecture21.ipynb b/lecture21.ipynb index 280d4d6a034ce5b508851c8e6a98a94f37840894..3e6c73f5c08539f9de97dd4ea93a7915fc7d21e6 100644 --- a/lecture21.ipynb +++ b/lecture21.ipynb @@ -6,9 +6,17 @@ "source": [ "![banner](https://mindspore.cn/static/img/logo_black.74c3909e.png)\n", "\n", - "# Lecture 21\n", + "| Author |\n", + "| ------ |\n", + "| [@dsdsdshe](https://gitee.com/dsdsdshe)|" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ "\n", - "## 量子模拟\n", + "# 量子模拟\n", "\n", "当我还是学生的时候,“量子模拟”这个词是指使用经典计算机来解决量子问题,例如动力学或基态等。我现在想,这个词现在意味着用量子设备解决量子问题。我们感兴趣的是研究模拟一些“局部”哈密顿函数的量子酉运算问题。\n", "\n", @@ -16,7 +24,7 @@ "$$\n", "i \\frac{d}{d t}|\\psi(t)\\rangle=H|\\psi(t)\\rangle\n", "$$\n", - "其中$H$被假定为时间无关的哈密顿量。\n", + "其中 $H$ 被假定为时间无关的哈密顿量。\n", "\n", "你只需要知道,可以将上述等式改写如下:\n", "$$\n", @@ -25,9 +33,9 @@ "\n", "我们的量子模拟目标是使用一组(基本)量子门(假设初始状态很容易准备或给定)来准备时间相关状态$|\\psi(t)\\rangle$。\n", "\n", - "### 定义误差\n", + "## 定义误差\n", "\n", - "给定一个运算符(矩阵)$X$,考虑另一个运算符$Y\\equiv X+\\Delta_x$。我们写为\n", + "给定一个运算符(矩阵)$X$,考虑另一个运算符 $Y\\equiv X+\\Delta_x$。我们写为\n", "$$\n", "X+O(\\epsilon) \\leftrightarrow\\left\\|\\Delta_{X}\\right\\|=O(\\epsilon)\n", "$$\n", @@ -57,7 +65,7 @@ "$$\n", "\\sum_{m=0}^{\\infty} \\frac{(\\|H\\| t)^{m}}{(m+2) !} \\leq \\sum_{m=0}^{\\infty} \\frac{1}{(m+2) !}=e-1-1<1\n", "$$\n", - "这是因为我们可以考虑$e^x=1+x+\\sum^\\infty_{m=2}\\frac{x^m}{m !}$,并且因此$e=1+1+\\sum^\\infty_{m=0}\\frac{1}{(m+1) !}$。\n", + "这是因为我们可以考虑 $e^x=1+x+\\sum^\\infty_{m=2}\\frac{x^m}{m !}$,并且因此 $e=1+1+\\sum^\\infty_{m=0}\\frac{1}{(m+1) !}$。\n", "\n", "作为结果,我们得到\n", "$$\n", @@ -66,20 +74,20 @@ "}\n", "$$\n", "\n", - "### k-local 哈密顿量\n", + "## k-local 哈密顿量\n", "\n", "让我们考虑一个包含 $n$ 个自旋 1/2 粒子(量子比特)的系统,总哈密顿量是自旋之间相互作用的总和,即,\n", "$$\n", "H=\\sum^L_{j=1}H_j\n", "$$\n", - "其中$H_j$只作用于最多 $k < n$ 个自旋。\n", + "其中 $H_j$ 只作用于最多 $k < n$ 个自旋。\n", "\n", - "重要的一点是你可以改变 $n$,但保持 $k$ 固定。在这里,我们更多地考虑数学,因此没有强加物理局部性,即$k$-local 并不意味着空间中的局部。一个需要解决的技术问题是,我们需要确保$L$不能是指数的。例如,哈密顿量的项恰好包含 $k$ 体相互作用,则\n", + "重要的一点是你可以改变 $n$,但保持 $k$ 固定。在这里,我们更多地考虑数学,因此没有强加物理局部性,即 $k$-local 并不意味着空间中的局部。一个需要解决的技术问题是,我们需要确保 $L$ 不能是指数的。例如,哈密顿量的项恰好包含 $k$ 体相互作用,则\n", "$$\n", "L \\le C^n_k=O(n^k)=poly(n)\n", "$$\n", "\n", - "### 对易情形\n", + "## 对易情形\n", "\n", "作为一种特殊情况,考虑所有项相互对易的情况,即 $[H_j,H_i]=0$。这是有可能发生的,例如伊辛模型: $H=\\sum J_{ij} Z_i Z_j$。\n", "\n", @@ -90,9 +98,9 @@ "\n", "为确保最终误差在 $\\epsilon$ 范围内,可以通过要求每个算子有一个以 $\\epsilon / L$ 为范围的误差来实现这一点。\n", "\n", - "如果我们考虑使用$H$门和$T$门模拟每个基本门,那么根据Solavay-Kitaev 定理,我们需要$O(log^c(L/\\epsilon))$个门。因为我们有 $L$ 个这样的项,所以我们需要考虑用$O\\left(L\\enspace log^c \\left(L/ \\epsilon\\right)\\right)$个门。\n", + "如果我们考虑使用 $H$ 门和 $T$ 门模拟每个基本门,那么根据 Solavay-Kitaev 定理,我们需要 $O(log^c(L/\\epsilon))$ 个门。因为我们有 $L$ 个这样的项,所以我们需要考虑用 $O\\left(L\\enspace log^c \\left(L/ \\epsilon\\right)\\right)$ 个门。\n", "\n", - "### 不对易情形\n", + "## 不对易情形\n", "\n", "在 $[H_j,H_i]\\ne 0$ 的情况下,我们的展开形式不再起作用,即\n", "$$\n", @@ -110,7 +118,7 @@ "e^{-i H t}=\\lim _{n \\rightarrow \\infty}\\left(e^{-i H_{1} t / n} e^{-i H_{2} t / n} \\cdots e^{-i H_{L} t / n}\\right)^{n}\n", "$$\n", "\n", - "但是这个等式并不那么实用,因为它需要$n \\rightarrow \\infty$。而我们对有限数量的项更感兴趣。\n", + "但是这个等式并不那么实用,因为它需要 $n \\rightarrow \\infty$。而我们对有限数量的项更感兴趣。\n", "\n", "---\n", "\n", @@ -143,7 +151,7 @@ "\\left\\|H_{1} \\Delta t+H_{2} \\Delta t+\\ldots+H_{L} \\Delta t\\right\\| 你可以在这里找到完整的可运行的样例代码:。" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 小作业\n", + "请对本案例中问题画出QAOA层数为p=2的采样结果图,与文档中p=4的情况进行对比,它们有什么区别?如何理解这一现象?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 参考文献\n", + "\n", + "[1] Edward Farhi, Jeffrey Goldstone, and Sam Gutmann. [A Quantum Approximate Optimization Algorithm](https://arxiv.org/pdf/1411.4028.pdf)" + ] + }, { "cell_type": "code", "execution_count": 1, @@ -795,33 +812,11 @@ "\n", "InfoTable('mindquantum', 'mindspore', 'networkx')" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 小作业\n", - "请对本案例中问题画出QAOA层数为p=2的采样结果图,与文档中p=4的情况进行对比,它们有什么区别?如何理解这一现象?" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 参考文献\n", - "\n", - "[1] Edward Farhi, Jeffrey Goldstone, and Sam Gutmann. [A Quantum Approximate Optimization Algorithm](https://arxiv.org/pdf/1411.4028.pdf)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [] } ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "Python 3.9.13 ('mq')", "language": "python", "name": "python3" }, @@ -835,11 +830,11 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.7" + "version": "3.9.13" }, "vscode": { "interpreter": { - "hash": "acc57148d012b3a87b6bd94e84aac5f0597fe9bee67f87efb58a2afa0e5376ad" + "hash": "6ea26b0ca9703e45d22ca948baff99d1d70a8502b08bee4ef4c347bc7486a73d" } } }, diff --git a/lecture3.ipynb b/lecture3.ipynb index 0dfc5330f0aaeade92e8078bab277ce362cd4829..e3c22019bba6ab7da8b84892f1140dc2c9887cc9 100644 --- a/lecture3.ipynb +++ b/lecture3.ipynb @@ -6,9 +6,16 @@ "source": [ "![banner](https://mindspore.cn/static/img/logo_black.74c3909e.png)\n", "\n", - "# Lecture 3\n", - "\n", - "## 贝尔态\n", + "| Author |\n", + "| ------ |\n", + "| [@dsdsdshe](https://gitee.com/dsdsdshe)|" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 贝尔态\n", "\n", "两比特的最大纠缠态称为贝尔态(总共四种):\n", "$$\n", @@ -26,7 +33,7 @@ "$$\n", "其中 $\\sum_x |c_x|^2=1$。\n", "\n", - "若想在MindQuantum中将模拟器的量子态设置为第一种贝尔态,则需要得知贝尔态的列向量:\n", + "若想在 MindQuantum 中将模拟器的量子态设置为第一种贝尔态,则需要得知贝尔态的列向量:\n", "$$\n", "\\frac{1}{\\sqrt{2}}(|00\\rangle + |11\\rangle) = \\frac{1}{\\sqrt{2}}\\begin{pmatrix}\n", "1 \\\\ 0 \\\\ 0 \\\\ 1\n", @@ -63,7 +70,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## 幺正变换\n", + "# 幺正变换\n", "\n", "先前提到量子态是一个(列)向量 $|\\psi\\rangle$(ket),并且其振幅的平方就是概率。与之对应的则是(行)向量 $\\langle \\psi|$(bra),\n", "\n", @@ -99,13 +106,13 @@ "$$\n", "这正是幺正矩阵的定义。\n", "\n", - "### 总结性回顾\n", + "## 总结性回顾\n", "\n", "- 任何对量子态的改变都可以用一个矩阵来表示。\n", "- 由于概率守恒,该矩阵必须保证幺正性。\n", "- 换句话说,任何量子计算的量子动力学行为都必须是一种幺正变换(的子集)。\n", "\n", - "### 作为幺正变换的量子计算?\n", + "## 作为幺正变换的量子计算?\n", "\n", "接下来,我们可以想象量子计算是由一类幺正变换来表示,例如\n", "$$\n", @@ -125,9 +132,14 @@ "\n", "- 量子线路:实现量子算法的一种方式(更大的幺正矩阵)\n", "- 量子门:量子电路的元素(较小的幺正矩阵)\n", - "- 算符:矩阵(不一定幺正)\n", - "\n", - "## 泡利 `X` 门\n", + "- 算符:矩阵(不一定幺正)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 泡利 `X` 门\n", "\n", "**单量子比特门** $\\equiv$ **单量子比特幺正矩阵(变换)**\n", "\n", @@ -170,7 +182,7 @@ "X\\begin{pmatrix}\\alpha \\\\ \\beta \\end{pmatrix} = \\begin{pmatrix} 0 & 1 \\\\ 1 & 0 \\end{pmatrix} \\begin{pmatrix}\\alpha \\\\ \\beta \\end{pmatrix} = \\begin{pmatrix}\\beta \\\\ \\alpha \\end{pmatrix}\n", "$$\n", "\n", - "现在我们可以尝试在MindQuantum中搭建一个简单的量子电路——对一个量子比特作用泡利 `X` 门。首先创建一个量子电路:" + "现在我们可以尝试在 MindQuantum 中搭建一个简单的量子电路——对一个量子比特作用泡利 `X` 门。首先创建一个量子电路:" ] }, { @@ -246,15 +258,16 @@ " Version\n", " \n", "mindquantum0.7.0\n", + "numpy1.22.3\n", "\n", " System\n", " Info\n", "\n", - "Python3.9.7OSLinux x86_64Memory16.72 GBCPU Max Thread8DateTue Nov 29 14:21:17 2022\n", + "Python3.9.13OSLinux x86_64Memory8.2 GBCPU Max Thread6DateTue Nov 29 20:40:22 2022\n", "\n" ], "text/plain": [ - "" + "" ] }, "execution_count": 1, @@ -265,13 +278,13 @@ "source": [ "from show_info import InfoTable\n", "\n", - "InfoTable('mindquantum')" + "InfoTable('mindquantum', 'numpy')" ] } ], "metadata": { "kernelspec": { - "display_name": "Python 3.8.10 64-bit", + "display_name": "Python 3.9.13 ('mq')", "language": "python", "name": "python3" }, @@ -285,11 +298,11 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.10" + "version": "3.9.13" }, "vscode": { "interpreter": { - "hash": "916dbcbb3f70747c44a77c7bcd40155683ae19c65e1c03b4aa3499c5328201f1" + "hash": "6ea26b0ca9703e45d22ca948baff99d1d70a8502b08bee4ef4c347bc7486a73d" } } }, diff --git a/lecture4.ipynb b/lecture4.ipynb index a7abfc116899b105c5f9d3b77285358e2855ab14..cda7cbb6b4a0ef0dc262749928917a0732066a47 100644 --- a/lecture4.ipynb +++ b/lecture4.ipynb @@ -6,9 +6,16 @@ "source": [ "![banner](https://mindspore.cn/static/img/logo_black.74c3909e.png)\n", "\n", - "# Lecture 4\n", - "\n", - "## 单量子门的矩阵表示\n", + "| Author |\n", + "| ------ |\n", + "| [@zhuyikang](https://gitee.com/zhuyikang) |" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 单量子门的矩阵表示\n", "\n", "对于一个单量子门 $\\mathcal{U}$ ,其作用效果如下:\n", "$$\n", @@ -42,7 +49,7 @@ "source": [ "# Pauli矩阵\n", "\n", - "下面介绍Pauli矩阵 $X, Y, Z$,它们的作用效果如下:\n", + "下面介绍 Pauli 矩阵 $X, Y, Z$,它们的作用效果如下:\n", "$$\n", "\\begin{align*}\n", "X |0\\rangle = |1\\rangle , \\quad & X |1\\rangle = |0\\rangle \\\\\n", @@ -122,13 +129,13 @@ "source": [ "Pauli矩阵具有如下的性质:\n", "$$\n", - "\\begin{align*}\n", + "\\begin{cases}\n", "X^2 = Y^2 = Z^2 = I \\\\\n", "XYZ = iI\\\\\n", "XY = iZ \\\\\n", "YZ = iX \\\\\n", "ZX = iY\n", - "\\end{align*}\n", + "\\end{cases}\n", "$$" ] }, @@ -259,7 +266,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**Theorem:** $R_{\\vec{n}}(\\theta)$ 的作用效果是在Bloch球中以 $\\vec{n}$ 为轴旋转 $\\theta$ 。\n", + "**Theorem:** $R_{\\vec{n}}(\\theta)$ 的作用效果是在 Bloch 球中以 $\\vec{n}$ 为轴旋转 $\\theta$ 。\n", "\n", "**Proof:**\n", "\n", @@ -303,7 +310,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "下面我们来使用mindquantum来验证一下旋转效果。\n", + "下面我们来使用 MindQuantum来验证一下旋转效果。\n", "\n", "首先我们构建一个线路来实现输入 $\\theta, \\phi$ 输出对应的量子态,显然可以从 $|0\\rangle$ 通过两个旋转来实现。" ] @@ -515,6 +522,39 @@ "> Bloch 球的颜色等许多参数都可以调节,详细 API 参照 [mindquantum.io](https://www.mindspore.cn/mindquantum/docs/zh-CN/master/mindquantum.io.html) 。" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 习题\n", + "\n", + "## Exercise 1\n", + "\n", + "我们定义 $[A, B] = AB - BA$,$\\lbrace A,B \\rbrace = AB + BA$,$\\vec{\\sigma} = (\\sigma_1, \\sigma_2, \\sigma_3) = (X, Y, Z)$,验证\n", + "\n", + "$$\n", + "\\lbrace \\sigma_i, \\sigma_j \\rbrace = 2\\delta_{i,j} I = \\begin{cases} 2I \\quad & i = j \\\\ 0 \\quad & i \\neq j \\end{cases}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Exercise 2\n", + "\n", + "写出 $R_x(\\theta), R_y(\\theta), R_z(\\theta)$ 的矩阵形式。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Exercise 3\n", + "\n", + "证明 $XR_y(\\theta)X = R_y(-\\theta)$" + ] + }, { "cell_type": "code", "execution_count": 1, @@ -531,16 +571,16 @@ " \n", "mindquantum0.7.0\n", "matplotlib3.4.3\n", - "numpy1.20.0\n", + "numpy1.22.3\n", "\n", " System\n", " Info\n", "\n", - "Python3.9.7OSLinux x86_64Memory16.72 GBCPU Max Thread8DateTue Nov 29 14:21:55 2022\n", + "Python3.9.13OSLinux x86_64Memory8.2 GBCPU Max Thread6DateTue Nov 29 21:08:05 2022\n", "\n" ], "text/plain": [ - "" + "" ] }, "execution_count": 1, @@ -553,44 +593,11 @@ "\n", "InfoTable('mindquantum', 'matplotlib', 'numpy')" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 习题\n", - "\n", - "## Exercise 1\n", - "\n", - "我们定义 $[A, B] = AB - BA$,$\\lbrace A,B \\rbrace = AB + BA$,$\\vec{\\sigma} = (\\sigma_1, \\sigma_2, \\sigma_3) = (X, Y, Z)$,验证\n", - "\n", - "$$\n", - "\\lbrace \\sigma_i, \\sigma_j \\rbrace = 2\\delta_{i,j} I = \\begin{cases} 2I \\quad & i = j \\\\ 0 \\quad & i \\neq j \\end{cases}\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Exercise 2\n", - "\n", - "写出 $R_x(\\theta), R_y(\\theta), R_z(\\theta)$ 的矩阵形式。" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Exercise 3\n", - "\n", - "证明 $XR_y(\\theta)X = R_y(-\\theta)$" - ] } ], "metadata": { "kernelspec": { - "display_name": "Python 3.8.10 64-bit", + "display_name": "Python 3.9.13 ('mq')", "language": "python", "name": "python3" }, @@ -604,11 +611,11 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.10" + "version": "3.9.13" }, "vscode": { "interpreter": { - "hash": "916dbcbb3f70747c44a77c7bcd40155683ae19c65e1c03b4aa3499c5328201f1" + "hash": "6ea26b0ca9703e45d22ca948baff99d1d70a8502b08bee4ef4c347bc7486a73d" } } }, diff --git a/lecture5.ipynb b/lecture5.ipynb index 94791df1381ea355e225fe32d415c3c128e56f71..4c791d9ee90f0246f9aea670377779e19a6482e3 100644 --- a/lecture5.ipynb +++ b/lecture5.ipynb @@ -6,21 +6,28 @@ "source": [ "![banner](https://mindspore.cn/static/img/logo_black.74c3909e.png)\n", "\n", - "# Lecture 5\n", - "\n", - "**计算$R_x(\\theta)$的矩阵**\n", + "| Author |\n", + "| ------ |\n", + "| [@dsdsdshe](https://gitee.com/dsdsdshe)|" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 计算 $R_x(\\theta)$ 的矩阵\n", "\n", - "考虑$R_x(\\theta)=e^{-i\\theta X/2}$,让我们回顾一下$e$指数上矩阵的定义——级数展开,现在我们考虑如下简单情形:\n", + "考虑 $R_x(\\theta)=e^{-i\\theta X/2}$,让我们回顾一下 $e$ 指数上矩阵的定义——级数展开,现在我们考虑如下简单情形:\n", "$$\n", "Q_\\theta = e^{\\theta X} = I+\\theta X + \\frac{\\theta^2}{2!}X^2+\\frac{\\theta^3}{3!}X^3+\\cdots\n", "$$\n", - "先前提到$X^2 = I$,因此\n", + "先前提到 $X^2 = I$,因此\n", "$$\n", "Q_{\\theta}=e^{\\theta X}=I+\\theta X+\\frac{\\theta^{2}}{2 !}+\\frac{\\theta^{3}}{3 !} X+\\ldots=\\left(1+\\frac{\\theta^{2}}{2 !}+\\ldots\\right) I+\\left(1+\\frac{\\theta^{4}}{3 !}+\\ldots\\right) X\n", "$$\n", - "又有$e^x=\\cosh{x}+\\sinh{x}$,因此我们可以将上式总结为$Q_\\theta=I\\cosh{\\theta}+X\\sinh{\\theta}$。\n", + "又有 $e^x=\\cosh{x}+\\sinh{x}$,因此我们可以将上式总结为 $Q_\\theta=I\\cosh{\\theta}+X\\sinh{\\theta}$。\n", "\n", - "将$\\theta$替换为$-i\\theta/2$,即得到\n", + "将 $\\theta$ 替换为 $-i\\theta/2$,即得到\n", "\n", "$$\n", "R_{x}(\\theta)=I \\cos \\frac{\\theta}{2}-i X \\sin \\frac{\\theta}{2}=\\left(\\begin{array}{cc}\n", @@ -35,27 +42,27 @@ "\\end{array}\\right) .\n", "$$\n", "\n", - "同样的,由于$Y|0\\rangle=i|1\\rangle$,并且\n", + "同样的,由于 $Y|0\\rangle=i|1\\rangle$,并且\n", "$$\n", "R_y(\\theta)=Icos\\frac{\\theta}{2}-iYsin\\frac{\\theta}{2}\n", "$$\n", - "这意味着$R_y(\\theta)|0\\rangle=cos\\frac{\\theta}{2}|0\\rangle+sin\\frac{\\theta}{2}|1\\rangle$。\n", + "这意味着 $R_y(\\theta)|0\\rangle=cos\\frac{\\theta}{2}|0\\rangle+sin\\frac{\\theta}{2}|1\\rangle$。\n", "\n", "---\n", "\n", - "## $R_z$门\n", + "# $R_z$门\n", "\n", - "$R_z$门有以下几个特性:\n", + "$R_z$ 门有以下几个特性:\n", "$$\n", "X R_{z}(\\theta) X=R_{z}(-\\theta)=R_{z}(\\theta)^{-1}=R_{z}(\\theta)^{\\dagger}\n", "$$\n", - "最后的关系式来源于$R_z(\\theta)$的幺正性。验证一下,$(Z^\\dagger=Z)$\n", + "最后的关系式来源于 $R_z(\\theta)$ 的幺正性。验证一下,$(Z^\\dagger=Z)$\n", "$$\n", "R_{z}(\\theta)^{\\dagger}=I \\cos \\frac{\\theta}{2}+i Z \\sin \\frac{\\theta}{2}=e^{i \\theta Z / 2}\n", "$$\n", "第一个关系式也是正确的,有如下两种方式验证:\n", "\n", - "1. 直接的办法,已知$R_{z}(\\theta)(\\alpha|0\\rangle+\\beta|1\\rangle)=\\alpha e^{-i \\theta / 2}|0\\rangle+\\beta e^{i \\theta / 2}|1\\rangle$,则有\n", + "1. 直接的办法,已知 $R_{z}(\\theta)(\\alpha|0\\rangle+\\beta|1\\rangle)=\\alpha e^{-i \\theta / 2}|0\\rangle+\\beta e^{i \\theta / 2}|1\\rangle$,则有\n", "$$\n", "\\begin{aligned}\n", "X R_{z}(\\theta) X(\\alpha|0\\rangle+\\beta|1\\rangle) &=X R_{z}(\\theta)(\\alpha|1\\rangle+\\beta|0\\rangle) \\\\\n", @@ -63,20 +70,20 @@ "&=\\alpha e^{i \\theta / 2}|0\\rangle+\\beta e^{-i \\theta / 2}|1\\rangle\n", "\\end{aligned}\n", "$$\n", - "然后与$R_{z}(-\\theta)(\\alpha|0\\rangle+\\beta|1\\rangle)=\\alpha e^{i \\theta / 2}|0\\rangle+\\beta e^{-i \\theta / 2}|1\\rangle$比较。\n", + "然后与 $R_{z}(-\\theta)(\\alpha|0\\rangle+\\beta|1\\rangle)=\\alpha e^{i \\theta / 2}|0\\rangle+\\beta e^{-i \\theta / 2}|1\\rangle$ 比较。\n", "\n", "2. “更好”的方法可能是:\n", "$$\n", "X R_{z}(\\theta) X=X I X \\cos \\frac{\\theta}{2}-i X Z X \\sin \\frac{\\theta}{2}=I \\cos \\frac{\\theta}{2}+i Z \\sin \\frac{\\theta}{2}\n", "$$\n", - "因为我们知道$X Z X=-Z $,或 $ Z X+X Z=0 $ 亦或 $ X Z=-X Z$(对于任何泡利矩阵的组合都成立)\n", + "因为我们知道 $XZX=-Z$,或 $ZX+XZ=0$ 亦或 $XZ=-XZ$(对于任何泡利矩阵的组合都成立)\n", "\n", "**Figure from wikipedia**\n", "\n", "![commutative_relation](images/commutative_relation.png)\n", "\n", - "- 注意到$XY-YX=2iZ$,这意味着$XY=iZ$。两个不同的泡利矩阵相乘与第三个泡利矩阵成正比。\n", - "- 现在让我们在 MindQuantum 中验证上述性质,我们随便选取一个$\\theta$的值,然后观察$X R_{z}(\\theta) X$、$R_{z}(-\\theta)$、$R_{z}(\\theta)^{-1}$和$R_{z}(\\theta)^{\\dagger}$作用在$|0\\rangle$态上的结果是否相同。\n" + "- 注意到 $XY-YX=2iZ$,这意味着 $XY=iZ$。两个不同的泡利矩阵相乘与第三个泡利矩阵成正比。\n", + "- 现在让我们在 MindQuantum 中验证上述性质,我们随便选取一个 $\\theta$ 的值,然后观察 $X R_{z}(\\theta) X$、$R_{z}(-\\theta)$、$R_{z}(\\theta)^{-1}$ 和 $R_{z}(\\theta)^{\\dagger}$ 作用在 $|0\\rangle$ 态上的结果是否相同。\n" ] }, { @@ -234,7 +241,7 @@ "\n", "---\n", "\n", - "## Hadamard 门\n", + "# Hadamard 门\n", "\n", "几乎所有量子电路都有 Hadamard 门:\n", "$$\n", @@ -275,7 +282,7 @@ "$$\n", "并且有$S=T^2$。\n", "\n", - "实际上,在实验室中,人们可能不具备从任意方向控制量子比特旋转的能力。比如说,如果我们只能实现$R_z$和$R_y$该怎么办?\n", + "实际上,在实验室中,人们可能不具备从任意方向控制量子比特旋转的能力。比如说,如果我们只能实现 $R_z$ 和 $R_y$ 该怎么办?\n", "\n", "在 MindQuantum 中也有 `H` , `S` 和 `T` 门,使用方法如下:" ] @@ -310,7 +317,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### 作业\n", + "# 作业\n", "\n", "1. 请用 MindQuantum 验证下式是否成立\n", "$$\n", @@ -325,15 +332,45 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + " \n", + " \n", + "\n", + "\n", + "
SoftwareVersion
mindquantum0.7.0
SystemInfo
Python3.9.13
OSLinux x86_64
Memory8.2 GB
CPU Max Thread6
DateTue Nov 29 21:08:24 2022
\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from show_info import InfoTable\n", + "\n", + "InfoTable(\"mindquantum\")" + ] } ], "metadata": { "kernelspec": { - "display_name": "Python 3.8.10 64-bit", + "display_name": "Python 3.9.13 ('mq')", "language": "python", "name": "python3" }, @@ -347,12 +384,12 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.10" + "version": "3.9.13" }, "orig_nbformat": 4, "vscode": { "interpreter": { - "hash": "916dbcbb3f70747c44a77c7bcd40155683ae19c65e1c03b4aa3499c5328201f1" + "hash": "6ea26b0ca9703e45d22ca948baff99d1d70a8502b08bee4ef4c347bc7486a73d" } } }, diff --git a/lecture6.ipynb b/lecture6.ipynb index cbde047a228916016eee6610714a4121df6633bf..a9b600396fc8a5d3aa8a011481fb6fc5f499ea01 100644 --- a/lecture6.ipynb +++ b/lecture6.ipynb @@ -6,6 +6,15 @@ "source": [ "![banner](https://mindspore.cn/static/img/logo_black.74c3909e.png)\n", "\n", + "| Author |\n", + "| ------ |\n", + "| [@zhuyikang](https://gitee.com/zhuyikang) |" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ "# Z-Y-Z 分解\n", "\n", "**Theorem:**\n", @@ -164,7 +173,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "Python 3.9.13 ('mq')", "language": "python", "name": "python3" }, @@ -178,11 +187,11 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.5" + "version": "3.9.13" }, "vscode": { "interpreter": { - "hash": "fe23db6dbd04142dcf620a84033ad5fbdd1968100e6cb68cefa531a9613914d5" + "hash": "6ea26b0ca9703e45d22ca948baff99d1d70a8502b08bee4ef4c347bc7486a73d" } } }, diff --git a/lecture7.ipynb b/lecture7.ipynb index c4c52ad1a8f65c1e1349f2bf669d54224665673c..250c4add7d0c4a08e9ae142b8e8e9146a1f3de9c 100644 --- a/lecture7.ipynb +++ b/lecture7.ipynb @@ -6,15 +6,22 @@ "source": [ "![banner](https://mindspore.cn/static/img/logo_black.74c3909e.png)\n", "\n", - "# Lecture 7\n", - "\n", - "## ABC分解\n", + "| Author |\n", + "| ------ |\n", + "| [@dsdsdshe](https://gitee.com/dsdsdshe)|" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# ABC分解\n", "\n", "对于一个任意的单比特幺正门,可以有以下分解:\n", "$$\n", "U=e^{i\\alpha}AXBXC\n", "$$\n", - "其中$A$,$B$和$C$是旋转算符的乘积,$X$是泡利$X$算符,并且有$ABC=I$。这个分解对于构建两比特控制$U$门起到重要作用。问题的关键在于该如何找到$A, B, C$的显式形式,并且满足$ABC=I$。\n", + "其中 $A$,$B$ 和 $C$ 是旋转算符的乘积,$X$ 是泡利 $X$ 算符,并且有 $ABC=I$。这个分解对于构建两比特控制 $U$ 门起到重要作用。问题的关键在于该如何找到 $A, B, C$ 的显式形式,并且满足 $ABC=I$。\n", "\n", "---\n", "\n", @@ -24,27 +31,28 @@ "$$\n", "R_{y}\\left(\\frac{\\gamma}{2}\\right) X^{c} R_{y}\\left(\\frac{-\\gamma}{2}\\right) X^{c}\n", "$$\n", - "(i) $c=1$,我们有$R_y(\\frac{\\gamma}{2})XR_y(\\frac{-\\gamma}{2})X=R_y(\\gamma)$\n", "\n", - "(ii) $c=0$,我们有$R_y(\\frac{\\gamma}{2})R_y(\\frac{-\\gamma}{2})=I$\n", + "1. $c=1$,我们有 $R_y(\\frac{\\gamma}{2})XR_y(\\frac{-\\gamma}{2})X=R_y(\\gamma)$\n", "\n", - "这就是一个基本的控制$R_y$门。现在如果我们考虑如下形式:\n", + "2. $c=0$,我们有 $R_y(\\frac{\\gamma}{2})R_y(\\frac{-\\gamma}{2})=I$\n", + "\n", + "这就是一个基本的控制 $R_y$ 门。现在如果我们考虑如下形式:\n", "$$\n", "R_{z}(\\beta) R_{y}\\left(\\frac{\\gamma}{2}\\right) \\cdot X^{c} R_{y}\\left(\\frac{-\\gamma}{2}\\right) X^{c}\n", "$$\n", - "(i) 当$c=1$时上式回归到$R_z(\\beta)R_y(\\gamma)$,这还缺少一个因子$R_z(\\delta)$。\n", "\n", - "(ii) 当$c=0$,我们有$R_z(\\beta)$。\n", + "1. 当 $c=1$ 时上式回归到 $R_z(\\beta)R_y(\\gamma)$,这还缺少一个因子 $R_z(\\delta)$。\n", + "2. 当 $c=0$,我们有 $R_z(\\beta)$。\n", "\n", - "因此我们需要为这些情况构造$R_z$门。让我们考虑这额外的部分,\n", + "因此我们需要为这些情况构造 $R_z$ 门。让我们考虑这额外的部分,\n", "$$\n", "X^xR_z(a)X^cR_z(b)\n", "$$\n", - "(i) $c=1$,上式变为$R_z(-a+b)$;\n", "\n", - "(ii) $c=0$,上式变为$R_z(a+b)$。\n", + "1. $c=1$,上式变为 $R_z(-a+b)$;\n", + "2. $c=0$,上式变为 $R_z(a+b)$。\n", "\n", - "因此我们只要令$\\delta=-a+b$和$-\\beta=a+b$,亦即$a=-(\\beta+\\delta)/2$和$b=(\\delta-\\beta)/2$。综合以上内容,如下形式应当能给出正确解答:\n", + "因此我们只要令 $\\delta=-a+b$ 和 $-\\beta=a+b$,亦即 $a=-(\\beta+\\delta)/2$ 和 $b=(\\delta-\\beta)/2$。综合以上内容,如下形式应当能给出正确解答:\n", "$$\n", "R_{z}(\\beta) R_{y}\\left(\\frac{\\gamma}{2}\\right) \\cdot X^{c} R_{y}\\left(\\frac{-\\gamma}{2}\\right) X^{c} \\cdot X^{c} R_{z}(a) X^{c} R_{z}(b)=R_{z}(\\beta) R_{y}\\left(\\frac{\\gamma}{2}\\right) X^{c} R_{y}\\left(\\frac{-\\gamma}{2}\\right) R_{z}(a) X^{c} R_{z}(b)\n", "$$\n", @@ -58,11 +66,16 @@ "\\end{aligned}\n", "$$\n", "\n", - "关于单比特门的讨论到这里就结束了,接下来我们将关注双比特门,即$4\\times 4$的幺正矩阵。\n", - "\n", - "## CNOT门\n", + "关于单比特门的讨论到这里就结束了,接下来我们将关注双比特门,即 $4\\times 4$ 的幺正矩阵。\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# CNOT门\n", "\n", - "CNOT门应该是双比特门中最有名的一个,其作用在计算基矢的效果如下:\n", + "CNOT 门应该是双比特门中最有名的一个,其作用在计算基矢的效果如下:\n", "$$\n", "|00\\rangle \\rightarrow |00\\rangle\n", "$$\n", @@ -84,9 +97,9 @@ "|x,y\\rangle \\rightarrow |x,y\\oplus x\\rangle\n", "$$\n", "\n", - "其中$y\\oplus x$是按位乘法(模二加法),等同于异或门(XOR gate)。\n", + "其中 $y\\oplus x$ 是按位加法(模二加法),等同于异或门(XOR gate)。\n", "\n", - "以下是CNOT门的矩阵形式:\n", + "以下是 CNOT 门的矩阵形式:\n", "$$\n", "U_{\\mathrm{CNOT}}=\\left[\\begin{array}{l}\n", "1 \\\\\n", @@ -116,21 +129,21 @@ "\\end{array}\\right]\n", "$$\n", "\n", - "在量子线路中,CNOT门用下面的符号表示:\n", + "在量子线路中,CNOT 门用下面的符号表示:\n", "\n", "![cnot in circuit](images/cnot_gate.png)\n", "\n", - "实际上CNOT门就是控制X门:\n", + "实际上 CNOT 门就是控制 X 门:\n", "\n", "![cnot equivalent](images/cnot_equivalent.png)\n", "\n", - "CNOT门是可逆的,并且有$CNOT \\enspace CNOT=I$。\n", + "CNOT 门是可逆的,并且有 $CNOT \\enspace CNOT=I$。\n", "\n", - "稍后我们将证明CNOT门与单比特门的集合对于量子计算是通用的,即我们可以用它们构造任意数量的量子比特的所有幺正变换。\n", + "稍后我们将证明 CNOT 门与单比特门的集合对于量子计算是通用的,即我们可以用它们构造任意数量的量子比特的所有幺正变换。\n", "\n", - "---\n", "\n", - "在 MindQuanutum 中一般通过为X门添加控制位的方式得到CNOT门,因为 MindQuantum 可以简洁地为任意量子门添加控制位,只需要输入控制位作为第二个参数。也可以直接使用 `CNOT` 门(不推荐),`CNOT(1, 0)` 表示 `q0` 控制位 `q1` 目标位。" + "\n", + "> 在 MindQuanutum 中一般通过为 `X` 门添加控制位的方式得到 CNOT 门,因为 MindQuantum 可以简洁地为任意量子门添加控制位,只需要输入控制位作为第二个参数 `X.on(1, 0)`。也可以直接使用 `CNOT` 门(不推荐),`CNOT(1, 0)` 表示 `q0` 控制位 `q1` 目标位。" ] }, { @@ -241,9 +254,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## SWAP门\n", + "# SWAP门\n", "\n", - "三个CNOT门可以构成SWAP门:\n", + "三个 CNOT 门可以构成 SWAP 门:\n", "\n", "![SWAP gate](images/swap_gate.png)\n", "\n", @@ -257,21 +270,19 @@ "\\end{aligned}\n", "$$\n", "\n", - "可以看到,SWAP门的作用正是交换两个比特的量子态,数学表示如下:\n", + "可以看到,SWAP 门的作用正是交换两个比特的量子态,数学表示如下:\n", "\n", "$$\n", - "U_{S W A P}(\\alpha|0\\rangle+\\beta|1\\rangle)(\\gamma|0\\rangle+\\delta|1\\rangle)=(\\gamma|0\\rangle+\\delta|1\\rangle)(\\alpha|0\\rangle+\\beta|1\\rangle)\n", + "U_{\\text{SWAP}}(\\alpha|0\\rangle+\\beta|1\\rangle)(\\gamma|0\\rangle+\\delta|1\\rangle)=(\\gamma|0\\rangle+\\delta|1\\rangle)(\\alpha|0\\rangle+\\beta|1\\rangle)\n", "$$\n", "\n", "也可以记为以下形式:\n", "\n", "$$\n", - "U_{S W A P}(\\alpha \\gamma|00\\rangle+\\beta \\gamma|10\\rangle+\\alpha \\delta|01\\rangle+\\beta \\delta|11\\rangle)=\\alpha \\gamma|00\\rangle+\\beta \\gamma|01\\rangle+\\alpha \\delta|10\\rangle+\\beta \\delta|11\\rangle\n", + "U_{\\text{SWAP}}(\\alpha \\gamma|00\\rangle+\\beta \\gamma|10\\rangle+\\alpha \\delta|01\\rangle+\\beta \\delta|11\\rangle)=\\alpha \\gamma|00\\rangle+\\beta \\gamma|01\\rangle+\\alpha \\delta|10\\rangle+\\beta \\delta|11\\rangle\n", "$$\n", "\n", - "---\n", - "\n", - "在MindQuantum中,SWAP门的用法与其它基本门相似,唯一的区别是它有两个目标比特,因此需要将包含两个目标位的`list[int]`作为参数输入:" + "> 在 MindQuantum 中,`SWAP` 门的用法与其它基本门相似,唯一的区别是它有两个目标比特,因此需要将包含两个目标位的 `list[int]` 作为参数输入:" ] }, { @@ -314,37 +325,18 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## 作业\n", + "# 作业\n", "\n", - "1. 若$q_0$处于叠加态$| \\psi\\rangle =\\frac{1}{\\sqrt{2}}(|0\\rangle + |1\\rangle)$,$q_1$处于$|0\\rangle$态,现在对$q_0$、$q_1$作用CNOT门(控制位为$q_0$,目标位为$q_1$),请问该两比特系统的末态是什么样的,你是否能叫出它的名字?请用MindQuantum计算或验证你的结果。\n", + "1. 若 $q_0$ 处于叠加态 $| \\psi\\rangle =\\frac{1}{\\sqrt{2}}(|0\\rangle + |1\\rangle)$,$q_1$ 处于 $|0\\rangle$ 态,现在对 $q_0$、$q_1$ 作用 CNOT 门(控制位为 $q_0$,目标位为 $q_1$),请问该两比特系统的末态是什么样的,你是否能叫出它的名字?请用 MindQuantum 计算或验证你的结果。\n", "\n", - "Hint:Lecture 5 中我们学过,哈达玛门`H`作用在$|0\\rangle$态效果如下:\n", + "Hint:Lecture 5 中我们学过,哈达玛门 `H` 作用在 $|0\\rangle$ 态效果如下:\n", "$$\n", "H|0\\rangle=\\frac{1}{\\sqrt{2}}(|0\\rangle+|1\\rangle)\n", - "$$" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "2. 请你用MindQuantum验证SWAP门可以分解为三个CNOT门(即两者矩阵等价)。" + "$$\n", + "\n", + "2. 请你用 MindQuantum 验证 SWAP 门可以分解为三个 CNOT 门(即两者矩阵等价)。" ] }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, { "cell_type": "code", "execution_count": 1, @@ -364,11 +356,11 @@ " System\n", " Info\n", "\n", - "Python3.9.7OSLinux x86_64Memory16.72 GBCPU Max Thread8DateTue Nov 29 14:22:20 2022\n", + "Python3.9.13OSLinux x86_64Memory8.2 GBCPU Max Thread6DateTue Nov 29 21:09:07 2022\n", "\n" ], "text/plain": [ - "" + "" ] }, "execution_count": 1, @@ -385,7 +377,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3.8.10 64-bit", + "display_name": "Python 3.9.13 ('mq')", "language": "python", "name": "python3" }, @@ -399,11 +391,11 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.10" + "version": "3.9.13" }, "vscode": { "interpreter": { - "hash": "916dbcbb3f70747c44a77c7bcd40155683ae19c65e1c03b4aa3499c5328201f1" + "hash": "6ea26b0ca9703e45d22ca948baff99d1d70a8502b08bee4ef4c347bc7486a73d" } } }, diff --git a/lecture8.ipynb b/lecture8.ipynb index 34369be9ef67f63fc85e75e907ed4311907a3dcd..16e892c1b3316dea3ccacf94c8a5cffadc82affb 100644 --- a/lecture8.ipynb +++ b/lecture8.ipynb @@ -6,6 +6,15 @@ "source": [ "![banner](https://mindspore.cn/static/img/logo_black.74c3909e.png)\n", "\n", + "| Author |\n", + "| ------ |\n", + "| [@zhuyikang](https://gitee.com/zhuyikang) |" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ "# 量子线路\n", "\n", "一个量子线路(非常大的酉变换)包括一系列的门(小一些的酉变换),其中每一条线代表一个量子比特,从左往右依次作用每个门(矩阵乘法作用顺序是从右到左)。\n", @@ -16,7 +25,7 @@ "\n", "# CZ门\n", "\n", - "下面介绍一个例子——控制Z门(CZ门):" + "下面介绍一个例子——控制 Z 门(CZ门):" ] }, { @@ -194,7 +203,7 @@ "\n", "如果仅仅是单量子比特,那么 $e^{i\\alpha}$ 作为全局相位,我们可以忽略它(全局相位在物理上没有观测效应)。\n", "\n", - "如果是 $C(U)$ 二量子比特门,此时就不能忽略掉 $e^{i\\alpha}$。不妨设 $|q_1 q_0\\rangle$,控制比特是 q0:\n", + "如果是 $C(U)$ 二量子比特门,此时就不能忽略掉 $e^{i\\alpha}$。不妨设 $|q_1 q_0\\rangle$,控制比特是 $q_0$:\n", "$$\n", "\\begin{align*}\n", "|00\\rangle & \\rightarrow |00\\rangle \\\\\n", @@ -451,6 +460,26 @@ "circ.svg()" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 习题\n", + "\n", + "## Exercise 1\n", + "\n", + "使用 H 门来实现 **交换** CNOT 门的控制比特和目标比特。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Exercise 2\n", + "\n", + "使用 CNOT 和 单量子比特门 来构造 $R_y(\\theta)$ 。" + ] + }, { "cell_type": "code", "execution_count": 1, @@ -466,16 +495,17 @@ " Version\n", " \n", "mindquantum0.7.0\n", - "numpy1.20.0\n", + "numpy1.22.3\n", + "IPython8.6.0\n", "\n", " System\n", " Info\n", "\n", - "Python3.9.7OSLinux x86_64Memory16.72 GBCPU Max Thread8DateTue Nov 29 14:22:48 2022\n", + "Python3.9.13OSLinux x86_64Memory8.2 GBCPU Max Thread6DateTue Nov 29 21:12:05 2022\n", "\n" ], "text/plain": [ - "" + "" ] }, "execution_count": 1, @@ -486,33 +516,13 @@ "source": [ "from show_info import InfoTable\n", "\n", - "InfoTable('mindquantum', 'numpy')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 习题\n", - "\n", - "## Exercise 1\n", - "\n", - "使用 H 门来实现 **交换** CNOT 门的控制比特和目标比特。" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Exercise 2\n", - "\n", - "使用 CNOT 和 单量子比特门 来构造 $R_y(\\theta)$ 。" + "InfoTable('mindquantum', 'numpy', 'IPython')" ] } ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "Python 3.9.13 ('mq')", "language": "python", "name": "python3" }, @@ -526,11 +536,11 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.7" + "version": "3.9.13" }, "vscode": { "interpreter": { - "hash": "fe23db6dbd04142dcf620a84033ad5fbdd1968100e6cb68cefa531a9613914d5" + "hash": "6ea26b0ca9703e45d22ca948baff99d1d70a8502b08bee4ef4c347bc7486a73d" } } }, diff --git a/lecture9.ipynb b/lecture9.ipynb index ba1b27b5041805efde35802e82d1162493a3ffd9..2282e5ac7f9d49cc47d37800fc6d4a5510423b98 100644 --- a/lecture9.ipynb +++ b/lecture9.ipynb @@ -6,11 +6,18 @@ "source": [ "![banner](https://mindspore.cn/static/img/logo_black.74c3909e.png)\n", "\n", - "# Lecture 9\n", - "\n", - "## CC-U 门分解\n", + "| Author |\n", + "| ------ |\n", + "| [@dsdsdshe](https://gitee.com/dsdsdshe)|" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# CC-U 门分解\n", "\n", - "接下来的讨论是为之后证明CNOT与单比特门的集合的通用性做铺垫,我们需要一些分解线路的方法作为工具。\n", + "接下来的讨论是为之后证明 CNOT 与单比特门的集合的通用性做铺垫,我们需要一些分解线路的方法作为工具。\n", "\n", "对于多控制门,我们考虑以下情况:\n", "$$\n", @@ -20,9 +27,9 @@ "\n", "![CC-U gate decomposition](images/CC_U_decomposition.png)\n", "\n", - "这是一种用受控V门简化CC-U门的标准分解方法。\n", + "这是一种用受控 V 门简化 CC-U 门的标准分解方法。\n", "\n", - "为了理解它(不是证明它),让我们忘记第一个和最后一个控制操作。 在这种情况下,中间部分给出了以下变换:\n", + "为了理解它(不是证明它),让我们忘记第一个和最后一个控制操作。在这种情况下,中间部分给出了以下变换:\n", "\n", "$$\n", "\\begin{aligned}\n", @@ -33,17 +40,15 @@ "\\end{aligned}\n", "$$\n", "\n", - "CC-U门的效果实际上是这样:\n", + "CC-U 门的效果实际上是这样:\n", "$$\n", "C_{U}=|00\\rangle\\langle 00|\\otimes I+| 01\\rangle\\langle 01|\\otimes I+| 10\\rangle\\langle 10|\\otimes I+| 11\\rangle\\langle 11| \\otimes U\n", "$$\n", "如果我们现在应用回第一个和最后一个受控操作,那么我们会得到正确的答案。\n", "\n", - "
\n", + "我们也可以选择一个实例,用 MindQuantum 验证以上线路的等价性,现在我们令 $U = Y$。\n", "\n", - "我们也可以选择一个实例,用 MindQuantum 验证以上线路的等价性,现在我们令$U = Y$。\n", - "\n", - "首先构建Toffoli门,可以通过`list`将多个控制位输入`Y`门的第二个参数得到多控制Y门。" + "首先构建 Toffoli 门,可以通过 `list` 将多个控制位输入 `Y` 门的第二个参数得到多控制 Y 门。" ] }, { @@ -76,7 +81,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "接下来需要得到$V$使得$V^2 = Y$,这可以通过接口`Power()`实现。然后构建出相应线路。" + "接下来需要得到 $V$ 使得 $V^2 = Y$,这可以通过接口 `Power()` 实现。然后构建出相应线路。" ] }, { @@ -148,9 +153,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Toffoli 门\n", + "# Toffoli 门\n", "\n", - "当$U = X$时,得到的CC-X门被称为Toffoli门。在这种情况下,$V=(1-i)(I+iX)/2$。可以快速证明$V$是幺正的:\n", + "当 $U = X$时,得到的 CC-X 门被称为 Toffoli 门。在这种情况下,$V=(1-i)(I+iX)/2$。可以快速证明 $V$ 是幺正的:\n", "$$\n", "V^\\dagger = (1+i)(I-iX)/2\n", "$$\n", @@ -158,23 +163,32 @@ "$$\n", "V^{\\dagger} V=\\frac{1}{4}(1-i)(1+i)(I-i X)(I+i X)=\\frac{1}{2}(I+I)=I\n", "$$\n", - "现在我们知道如何用CNOT+单比特门集合来模拟Toffoli门。接下来是Toffoli门的第一个应用,分解多控制$U$门:\n", + "现在我们知道如何用 CNOT 和单比特门集合来模拟 Toffoli 门。接下来是 Toffoli 门的第一个应用,分解多控制 $U$ 门:\n", "$$\n", "C_{n}(U)\\left|x_{1} x_{2} x_{3} x_{4} x_{5}\\right\\rangle|\\psi\\rangle=\\left|x_{1} x_{2} x_{3} x_{4} x_{5}\\right\\rangle U^{x_{1} x_{2} x_{3} x_{4} x_{5}}|\\psi\\rangle\n", "$$\n", - "下图中的$|c_1\\rangle,|c_2\\rangle\\cdots |c_5\\rangle$就等同于$\\left|x_{1} x_{2} x_{3} x_{4} x_{5}\\right\\rangle$:\n", + "下图中的 $|c_1\\rangle,|c_2\\rangle\\cdots |c_5\\rangle$ 就等同于 $\\left|x_{1} x_{2} x_{3} x_{4} x_{5}\\right\\rangle$:\n", "\n", "![multiple-control U gate decomposition](images/multiple_CU_decomposition.png)\n", "\n", - "以上线路可以直接看出其效果:如果$c_1$和$c_2$都是$|1\\rangle$,则第一个辅助比特翻转为$|1\\rangle$;如果$c_3$和第一个辅助比特都是$|1\\rangle$则第二个辅助比特翻转为$|1\\rangle$(这意味着$c_1,c_2,c_3$都是$|1\\rangle$),依此类推。因此最后只有所有控制位都为$|1\\rangle$时才作用$U$门,即实现了多控制$U$门。\n", + "以上线路可以直接看出其效果:如果 $c_1$ 和 $c_2$ 都是 $|1\\rangle$,则第一个辅助比特翻转为 $|1\\rangle$;如果 $c_3$ 和第一个辅助比特都是 $|1\\rangle$ 则第二个辅助比特翻转为 $|1\\rangle$(这意味着 $c_1,c_2,c_3$ 都是 $|1\\rangle$),依此类推。因此最后只有所有控制位都为 $|1\\rangle$ 时才作用 $U$ 门,即实现了多控制 $U$ 门。\n", "\n", "**示例**\n", "\n", - "考虑初态$\\alpha|00000\\rangle|\\psi\\rangle+\\beta|11111\\rangle|\\psi\\rangle$,插入中间的辅助量子比特后表示为$\\alpha|00000\\rangle|0000\\rangle|\\psi\\rangle+\\beta|11111\\rangle|0000\\rangle|\\psi\\rangle$。现在作用上述量子线路(到CU处截止),得到的量子态如下:\n", + "考虑初态 $\\alpha|00000\\rangle|\\psi\\rangle+\\beta|11111\\rangle|\\psi\\rangle$,插入中间的辅助量子比特后表示为 $\\alpha|00000\\rangle|0000\\rangle|\\psi\\rangle+\\beta|11111\\rangle|0000\\rangle|\\psi\\rangle$。现在作用上述量子线路(到CU处截止),得到的量子态如下:\n", "$$\n", "\\alpha|00000\\rangle|0000\\rangle|\\psi\\rangle+\\beta|11111\\rangle|1111\\rangle U|\\psi\\rangle\n", "$$\n", - "此时辅助比特与系统比特纠缠在一起,这不是我们想要的。因此我们需要在最后将它们全部重置为$|0\\rangle$态,这正是后半部分的那些顺序相反的Toffoli门的作用。" + "此时辅助比特与系统比特纠缠在一起,这不是我们想要的。因此我们需要在最后将它们全部重置为 $|0\\rangle$ 态,这正是后半部分的那些顺序相反的 Toffoli 门的作用。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 作业\n", + "\n", + "设上图中的多控制 U 门为 $U = R_x(\\frac{\\pi}{5})$,请用 MindQuantum 验证多控制 $R_x$ 门可以分解为多个 Toffoli 门和控制 $R_x$ 门(验证线路矩阵等价)。" ] }, { @@ -192,16 +206,16 @@ " Version\n", " \n", "mindquantum0.7.0\n", - "numpy1.20.0\n", + "numpy1.22.3\n", "\n", " System\n", " Info\n", "\n", - "Python3.9.7OSLinux x86_64Memory16.72 GBCPU Max Thread8DateTue Nov 29 14:23:15 2022\n", + "Python3.9.13OSLinux x86_64Memory8.2 GBCPU Max Thread6DateTue Nov 29 21:16:34 2022\n", "\n" ], "text/plain": [ - "" + "" ] }, "execution_count": 1, @@ -214,27 +228,11 @@ "\n", "InfoTable('mindquantum', 'numpy')" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 作业\n", - "\n", - "设上图中的多控制U门为$U = R_x(\\frac{\\pi}{5})$,请用MindQuantum验证多控制$R_x$门可以分解为多个Toffoli门和控制$R_x$门(验证线路矩阵等价)。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "Python 3.9.13 ('mq')", "language": "python", "name": "python3" }, @@ -248,11 +246,11 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.7" + "version": "3.9.13" }, "vscode": { "interpreter": { - "hash": "acc57148d012b3a87b6bd94e84aac5f0597fe9bee67f87efb58a2afa0e5376ad" + "hash": "6ea26b0ca9703e45d22ca948baff99d1d70a8502b08bee4ef4c347bc7486a73d" } } }, diff --git a/vqc.ipynb b/vqc.ipynb index 1011f0f4c832b93f1f470fc2cbccc89af8c5e2e4..c182f08025deb3243d830c45d992264650a69844 100644 --- a/vqc.ipynb +++ b/vqc.ipynb @@ -1,5 +1,16 @@ { "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![banner](https://mindspore.cn/static/img/logo_black.74c3909e.png)\n", + "\n", + "| Author |\n", + "| ------ |\n", + "| [@zhuyikang](https://gitee.com/zhuyikang) |" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -54,61 +65,7 @@ }, { "data": { - "image/svg+xml": [ - "
\n", - "\n", - "\n", - "q0:\n", - " \n", - "\n", - "q1:\n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "X\n", - " \n", - "\n", - "\n", - "\n", - "\n", - "Y\n", - " \n", - "\n", - "\n", - "\n", - "\n", - "H\n", - " \n", - "\n", - "\n", - "\n", - "\n", - "H\n", - " \n", - "\n", - "\n", - "\n", - "\n", - "RX\n", - " \n", - "\n", - "theta\n", - " \n", - "\n", - "\n", - "\n", - "\n", - "RZ\n", - " \n", - "\n", - "phi\n", - " \n", - "\n", - "
" - ], + "image/svg+xml": "
\n\n\nq0:\n \n\nq1:\n \n\n\n\n\n\nX\n \n\n\n\n\nY\n \n\n\n\n\nH\n \n\n\n\n\nH\n \n\n\n\n\nRX\n \n\ntheta\n \n\n\n\n\nRZ\n \n\nphi\n \n\n
", "text/plain": [ "" ] @@ -149,61 +106,7 @@ "outputs": [ { "data": { - "image/svg+xml": [ - "
\n", - "\n", - "\n", - "q0:\n", - " \n", - "\n", - "q1:\n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "X\n", - " \n", - "\n", - "\n", - "\n", - "\n", - "Y\n", - " \n", - "\n", - "\n", - "\n", - "\n", - "H\n", - " \n", - "\n", - "\n", - "\n", - "\n", - "H\n", - " \n", - "\n", - "\n", - "\n", - "\n", - "RX\n", - " \n", - "\n", - "0\n", - " \n", - "\n", - "\n", - "\n", - "\n", - "RZ\n", - " \n", - "\n", - "1\n", - " \n", - "\n", - "
" - ], + "image/svg+xml": "
\n\n\nq0:\n \n\nq1:\n \n\n\n\n\n\nX\n \n\n\n\n\nY\n \n\n\n\n\nH\n \n\n\n\n\nH\n \n\n\n\n\nRX\n \n\n0\n \n\n\n\n\nRZ\n \n\n1\n \n\n
", "text/plain": [ "" ] @@ -407,16 +310,16 @@ " Version\n", " \n", "mindquantum0.7.0\n", - "mindspore1.8.1\n", + "mindspore1.9.0\n", "\n", " System\n", " Info\n", "\n", - "Python3.9.7OSLinux x86_64Memory16.72 GBCPU Max Thread8DateTue Nov 29 14:23:41 2022\n", + "Python3.9.13OSLinux x86_64Memory8.2 GBCPU Max Thread6DateTue Nov 29 21:48:06 2022\n", "\n" ], "text/plain": [ - "" + "" ] }, "execution_count": 1, @@ -447,7 +350,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.7" + "version": "3.9.13" }, "vscode": { "interpreter": {