From 42ba863172d6845aa21fcc0c7d571230a933ef90 Mon Sep 17 00:00:00 2001 From: dsdsdshe Date: Wed, 10 Aug 2022 21:39:54 +0800 Subject: [PATCH] lecture3 and lecture5 --- images/commutative_relation.png | Bin 0 -> 35834 bytes lecture3.ipynb | 261 +++++++++++++++++++++++ lecture5.ipynb | 358 ++++++++++++++++++++++++++++++++ 3 files changed, 619 insertions(+) create mode 100644 images/commutative_relation.png create mode 100644 lecture3.ipynb create mode 100644 lecture5.ipynb diff --git a/images/commutative_relation.png b/images/commutative_relation.png new file mode 100644 index 0000000000000000000000000000000000000000..39f0782c80f6bd6b3f81e0e6fca9eb3ca7504d67 GIT binary patch literal 35834 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 literal 0 HcmV?d00001 diff --git a/lecture3.ipynb b/lecture3.ipynb new file mode 100644 index 0000000..813dd9e --- /dev/null +++ b/lecture3.ipynb @@ -0,0 +1,261 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Lecture 3\n", + "## 贝尔态\n", + "- 两比特的最大纠缠态称为贝尔态(总共四种):\n", + "$$\n", + "|\\psi_{Bell} \\rangle = \\frac{1}{\\sqrt{2}}(|00\\rangle + |11\\rangle)\n", + "$$\n", + "\n", + "- 剩下三种贝尔态为\n", + "$$\n", + "\\frac{1}{\\sqrt{2}}(|00\\rangle - |11\\rangle),\\enspace\\frac{1}{\\sqrt{2}}(|01\\rangle + |10\\rangle),\\enspace \\frac{1}{\\sqrt{2}}(|01\\rangle - |10\\rangle)\n", + "$$\n", + "\n", + "- 多比特量子态表示为:\n", + "$$\n", + "|\\psi_n \\rangle = \\sum_{x\\in[0,1]^n}c_{x_1 x_2 \\cdots x_n}|x_1 x_2 \\cdots x_n\\rangle = \\sum_{x\\in [0,1]^n} c_x|x\\rangle \\ ,\n", + "$$\n", + "其中 $\\sum_x |c_x|^2=1$。\n", + "\n", + "- 若想在MindQuantum中将模拟器的量子态设置为第一种贝尔态,则需要得知贝尔态的列向量:\n", + "$$\n", + "\\frac{1}{\\sqrt{2}}(|00\\rangle + |11\\rangle) = \\frac{1}{\\sqrt{2}}\\begin{pmatrix}\n", + "1 \\\\ 0 \\\\ 0 \\\\ 1\n", + "\\end{pmatrix}\n", + "$$\n", + "然后通过`set_qs`接口改变模拟器状态,该接口会自动将输入向量归一化,因此可以省略系数,如下所示:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "√2/2¦00⟩\n", + "√2/2¦11⟩\n" + ] + } + ], + "source": [ + "from mindquantum.simulator import Simulator\n", + "import numpy as np\n", + "\n", + "sim = Simulator('projectq', 2)\n", + "sim.set_qs(np.array([1, 0, 0, 1]))\n", + "bell_state = sim.get_qs(ket=True)\n", + "print(bell_state)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 幺正变换\n", + "- 先前提到量子态是一个(列)向量$|\\psi\\rangle$(ket),并且其振幅的平方就是概率。与之对应的则是(行)向量$\\langle \\psi|$(bra),\n", + "\n", + "$$\n", + "|\\psi \\rangle = \\alpha |0\\rangle + \\beta |1 \\rangle \\to \\langle \\psi| \\equiv \\alpha^* \\langle 0 | + \\beta^* \\langle 1|\n", + "$$\n", + "\n", + "内积则称为 \"bracket\"\n", + "\n", + "$$\n", + "\\langle \\psi| \\psi \\rangle = |\\alpha|^2+|\\beta|^2=1\n", + "$$\n", + "\n", + "这也被称为归一化条件。\n", + "\n", + "- 因此若量子态是一个向量,则改变量子态的操作必须是一个矩阵(基于线性代数)。\n", + "$$\n", + "|\\psi\\rangle \\to U|\\psi\\rangle\n", + "$$\n", + "在对偶空间则表示为\n", + "$$\n", + "\\langle\\psi|\\to \\langle\\psi|U^\\dagger\n", + "$$\n", + "其中$A^\\dagger \\equiv (A^T)^*$。\n", + "\n", + "- 为了保证概率守恒,我们需要\n", + "$$\n", + "\\langle \\psi|\\psi\\rangle = \\langle \\psi|U^\\dagger U|\\psi\\rangle = 1\n", + "$$\n", + "对于所有可能的$|\\psi\\rangle$都成立。\n", + "\n", + "- 这就意味着\n", + "$$\n", + "U^\\dagger U = I \\Rightarrow U^\\dagger = U^{-1}\n", + "$$\n", + "这正是幺正矩阵的定义。\n", + "\n", + "### 总结性回顾\n", + "- 任何对量子态的改变都可以用一个矩阵来表示。\n", + "\n", + "- 由于概率守恒,该矩阵必须保证幺正性。\n", + "\n", + "- 换句话说,任何量子计算的量子动力学行为都必须是一种幺正变换(的子集)。\n", + "\n", + "### 作为幺正变换的量子计算?\n", + "- 接下来,我们可以想象量子计算是由一类幺正变换来表示,例如\n", + "$$\n", + "U|\\psi_{in}\\rangle=|\\psi_{out}\\rangle\n", + "$$\n", + "- 传统上,物理学家以这种方式解决问题:已知初态和哈密顿量,寻找末态。\n", + "- 但对于量子计算,通常我们已知初态与末态,而目标是找到量子线路$U$(量子算法)。\n", + "- 与经典计算相比较:\n", + "$$\n", + "f(x_{in})=y_{out}\n", + "$$\n", + "- 我们稍后会表明量子计算是更加普适的,这意味着我们也可以用量子计算机完成经典计算任务。\n", + "- 问题的关键是一旦定义好输入与输出之间的逻辑关系,我们需要知道如何在物理上实现其对应的幺正变换(称为量子电路)。\n", + "- 回想一下,经典电路由基本的逻辑运算组成。(AND, OR, NOT, NAND等)\n", + "- 量子电路同样应该由基本逻辑运算组成,它们是什么?(我们会在之后发现)\n", + "\n", + "\n", + "## 术语\n", + "- 量子线路:实现量子算法的一种方式(更大的幺正矩阵)\n", + "\n", + "- 量子门:量子电路的元素(较小的幺正矩阵)\n", + "\n", + "- 算符:矩阵(不一定幺正)\n", + "\n", + "## 泡利`X`门\n", + "**单量子比特门$\\equiv$单量子比特幺正矩阵(变换)**\n", + "\n", + "- 让我们从经典的单比特门入手:\n", + "$$\n", + "Logical \\enspace NOT \\enspace gate: \\enspace 1 \\to 0 \\enspace and \\enspace 0 \\to 1\n", + "$$\n", + "- 而现在我们想要如下效果\n", + "$$\n", + "Logical \\enspace NOT \\enspace gate: \\enspace |1\\rangle \\to |0\\rangle \\enspace and \\enspace |0\\rangle \\to |1\\rangle\n", + "$$\n", + "这也被称为**比特翻转**。\n", + "\n", + "- 使用泡利`X`门就可以做到上述操作\n", + "$$\n", + "\\sigma_x \\equiv U_X \\equiv X = |1\\rangle\\langle 1| = \\begin{pmatrix} 0 & 1 \\\\ 1 & 0 \\end{pmatrix}\n", + "$$\n", + "\n", + "- 可以验证泡利`X`门是幺正矩阵:\n", + "$$\n", + "X^\\dagger X = \\begin{pmatrix} 0 & 1 \\\\ 1 & 0 \\end{pmatrix}\\begin{pmatrix} 0 & 1 \\\\ 1 & 0 \\end{pmatrix} = \\begin{pmatrix} 1 & 0 \\\\ 0 & 1 \\end{pmatrix} = I\n", + "$$\n", + "\n", + "- 用狄拉克符号可以容易的验证:\n", + "\n", + "$$\n", + "X|1\\rangle = (|1\\rangle\\langle 0|+|0\\rangle\\langle 1|)|1\\rangle = |1\\rangle\\langle 0|1\\rangle + |0\\rangle\\langle 1|1\\rangle = |0\\rangle\n", + "$$\n", + "\n", + "$$\n", + "X|0\\rangle = (|1\\rangle\\langle 0|+|0\\rangle\\langle 1|)|0\\rangle = |1\\rangle\\langle 0|0\\rangle + |0\\rangle\\langle 1|0\\rangle = |1\\rangle\n", + "$$\n", + "\n", + "- 泡利`X`门作用在任意量子态的效果如下:\n", + "$$\n", + "X|\\psi\\rangle=X(\\alpha|0\\rangle+\\beta|1\\rangle)=\\alpha X|0\\rangle+\\beta X|1\\rangle = \\alpha |1\\rangle+\\beta |0\\rangle\n", + "$$\n", + "\n", + "$$\n", + "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", + "
\n", + "\n", + "- 现在我们可以尝试在MindQuantum中搭建一个简单的量子电路——对一个量子比特作用泡利`X`门。首先创建一个量子电路:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1¦0⟩\n" + ] + } + ], + "source": [ + "from mindquantum.core.circuit import Circuit\n", + "\n", + "circ = Circuit()\n", + "quantum_state = circ.get_qs(ket=True)\n", + "print(quantum_state)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "可以看到电路的初始量子态处于$|0\\rangle$态,现在我们作用泡利`X`门,然后打印电路量子态:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "q0: ──X──\n", + "1¦1⟩\n" + ] + } + ], + "source": [ + "from mindquantum.core.gates import X\n", + "\n", + "circ += X.on(0) #对第0个比特作用X门\n", + "print(circ) #打印线路\n", + "new_state = circ.get_qs(ket=True)\n", + "print(new_state)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "可以看到,对$q0$作用泡利`X`门后,量子态变为$|1\\rangle$态。" + ] + } + ], + "metadata": { + "interpreter": { + "hash": "128f52b0cdc33bc7d2583e313ce49af13392215631bffc3f029664446222cd2a" + }, + "kernelspec": { + "display_name": "Python 3.9.12 ('base')", + "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.9.9" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/lecture5.ipynb b/lecture5.ipynb new file mode 100644 index 0000000..c7e4fdb --- /dev/null +++ b/lecture5.ipynb @@ -0,0 +1,358 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Lecture 5\n", + "\n", + "**Lecture 4 课后练习解答**\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", + "$$\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", + "\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", + "c_{\\theta} & 0 \\\\\n", + "0 & c_{\\theta}\n", + "\\end{array}\\right)-i\\left(\\begin{array}{cc}\n", + "0 & s_{\\theta} \\\\\n", + "s_{\\theta} & 0\n", + "\\end{array}\\right)=\\left(\\begin{array}{cc}\n", + "c_{\\theta} & -i s_{\\theta} \\\\\n", + "-i s_{\\theta} & c_{\\theta}\n", + "\\end{array}\\right) .\n", + "$$\n", + "\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", + "\n", + "---\n", + "\n", + "**下面的特性你需要了解:**\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", + "$$\n", + "R_{z}(\\theta)^{\\dagger}=I \\cos \\frac{\\theta}{2}+i Z \\sin \\frac{\\theta}{2}=e^{i \\theta Z / 2}\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", + "$$\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", + "&=X\\left(\\alpha e^{i \\theta / 2}|1\\rangle+\\beta e^{-i \\theta / 2}|0\\rangle\\right) \\\\\n", + "&=\\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", + "\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", + "\n", + "**Figure from wikipedia**\n", + "\n", + "![commutative_relation](images/commutative_relation.png)\n", + "\n", + "- 注意到$XY-YX=2iZ$,这意味着$XY=iZ$。两个不同的泡利矩阵相乘与第三个泡利矩阵成正比。\n", + "\n", + "
\n", + "\n", + "- 现在让我们在 MindQuantum 中验证上述性质,我们随便选取一个$\\theta$的值,然后观察$X R_{z}(\\theta) X$、$R_{z}(-\\theta)$、$R_{z}(\\theta)^{-1}$和$R_{z}(\\theta)^{\\dagger}$作用在$|0\\rangle$态上的结果是否相同。\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "q0: ──X────RZ(1)────X──\n", + "(0.8775825618903728+0.479425538604203j)¦0⟩\n" + ] + } + ], + "source": [ + "from mindquantum.core.gates import RZ, X\n", + "from mindquantum.core.circuit import Circuit\n", + "\n", + "theta = 1\n", + "\n", + "# X Rz(𝜃) X\n", + "circ = Circuit()\n", + "circ += X.on(0)\n", + "circ += RZ(theta).on(0)\n", + "circ += X.on(0)\n", + "print(circ)\n", + "print(circ.get_qs(ket=True))" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "q0: ──RZ(-1)──\n", + "(0.8775825618903728+0.479425538604203j)¦0⟩\n" + ] + } + ], + "source": [ + "# Rz(-𝜃)\n", + "circ2 = Circuit()\n", + "circ2 += RZ(-theta).on(0)\n", + "print(circ2)\n", + "print(circ2.get_qs(ket=True))" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "q0: ──RZ(1)^-1──\n", + "(0.877582561890373+0.4794255386042032j)¦0⟩\n" + ] + } + ], + "source": [ + "# inverse of Rz(𝜃)\n", + "from mindquantum.core.gates import Power\n", + "circ3 = Circuit()\n", + "circ3 += Power(RZ(theta), -1).on(0)\n", + "print(circ3)\n", + "print(circ3.get_qs(ket=True))" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "q0: ──RZ(-1)──\n", + "(0.8775825618903728+0.479425538604203j)¦0⟩\n" + ] + } + ], + "source": [ + "# Rz(𝜃) with dagger\n", + "circ4 = Circuit()\n", + "circ4 += RZ(theta).hermitian().on(0)\n", + "print(circ4)\n", + "print(circ4.get_qs(ket=True))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "可以看到四种方式得到的线路末态完全一致。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "- 最后,为何一定是$X, Y, Z$?我们也可以考虑一个任意的旋转。这需要我们定义\n", + "$$\n", + "R_{n}(\\theta) \\equiv e^{-i(\\theta / 2) n \\cdot \\sigma}=c_{\\theta} I-i s_{\\theta}(n \\cdot \\sigma)\n", + "$$\n", + "其中$n\\cdot\\sigma\\equiv n_x X+n_y Y+n_z Z$,且$n_x^2+n_y^2+n_z^2=1$。(第二个等式是一个好的练习/作业)\n", + "\n", + "- 该旋转算子可以生成任意的单量子比特旋转$U$(相差一个全局相位)。从某种意义上说,给定任何的$U$,人们总是可以选择角度$\\theta$和旋转轴$\\hat{n}$,使得(**想想看**)\n", + "$$\n", + "U=e^{i\\alpha}R_n(\\theta)\n", + "$$\n", + "\n", + "---\n", + "\n", + "- 部分证明:首先,任何 $2\\times 2$ 矩阵都可以用泡利矩阵展开(完全基)。回想一下,任何状态都可以用 0,1 基分解,即$|\\psi\\rangle=a|0\\rangle+b|1\\rangle$。一开始你不需要知道 a 和 b。 为了确定它们,我们可以使用内积,$\\langle 0|\\psi\\rangle=a\\langle 0|0\\rangle + b\\langle 0|1\\rangle=a$。\n", + "\n", + "- 类似的,我们可以对泡利矩阵做同样的事。即对任意$2\\times 2$矩阵$U$,我们总是可以写出\n", + "$$\n", + "U=aI+bX+cY+dZ\n", + "$$\n", + "\n", + "- 第一步,$X, Y, Z$泡利矩阵是无迹的。(迹 $\\operatorname{Tr}$ 含义是对矩阵对角线上的值求和;$\\operatorname{Tr}$ 是线性运算)\n", + "$$\n", + "\\operatorname{Tr}(U)=a \\operatorname{Tr}(I)+b \\operatorname{Tr}(X)+c \\operatorname{Tr}(Y)+d \\operatorname{Tr}(Z)=2 a\n", + "$$\n", + "这意味着$a=\\operatorname{Tr}(U)/2$。\n", + "\n", + "- 接下来我们将$X$作用于$U$,得到\n", + "$$\n", + "XU=aX+bI+cXY+dXZ\n", + "$$\n", + "\n", + "- 然后对上式求迹,\n", + "$$\n", + "\\operatorname{Tr}(X U)=b \\operatorname{Tr}(I)+c \\operatorname{Tr}(X Y)+d \\operatorname{Tr}(X Z)=2 b\n", + "$$\n", + "这意味着 $b=\\operatorname{Tr}(XU)/2$ 。同理有 $c=\\operatorname{Tr}(YU)/2$ 和 $d=\\operatorname{Tr}(ZU)/2$ 。\n", + "\n", + "- 至此,如果我们使$a=|a|e^{i\\alpha}$,离证明完成已经非常接近了。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "---\n", + "\n", + "- 哈达玛门$H$ (Hadamard gate):(我认为几乎所有量子电路都有哈达玛门)\n", + "$$\n", + "H \\equiv \\frac{1}{\\sqrt{2}}\\left(\\begin{array}{cc}\n", + "1 & 1 \\\\\n", + "1 & -1\n", + "\\end{array}\\right)=\\frac{1}{\\sqrt{2}}\\left(\\begin{array}{l}\n", + "1 \\\\\n", + "1\n", + "\\end{array}\\right)\\langle 0|+\\frac{1}{\\sqrt{2}}\\left(\\begin{array}{c}\n", + "1 \\\\\n", + "-1\n", + "\\end{array}\\right)\\langle 1|\n", + "$$\n", + "其中\n", + "$$\n", + "H|0\\rangle=\\frac{1}{\\sqrt{2}}(|0\\rangle+|1\\rangle) \\quad, H|1\\rangle=\\frac{1}{\\sqrt{2}}(|0\\rangle-|1\\rangle)\n", + "$$\n", + "\n", + "- 注意到$H$也是自逆的,即$H^2=I$,并且$H=(X+Z)/\\sqrt{2}$。\n", + "\n", + "- 以下是一些哈达玛门的性质会在之后用到:\n", + "$$\n", + "HXH=Z\\quad HZH=X\\quad HYH=-Y\n", + "$$\n", + "\n", + "- 例如,$HR_x(\\theta)H=Icos\\frac{\\theta}{2}-iHXHsin\\frac{\\theta}{2}=R_z(\\theta)$。\n", + "\n", + "- 最后我们还需要知道另外两个单比特门:\n", + "$$\n", + "S \\equiv\\left(\\begin{array}{ll}\n", + "1 & 0 \\\\\n", + "0 & i\n", + "\\end{array}\\right) \\quad, \\quad T \\equiv\\left(\\begin{array}{cc}\n", + "1 & 0 \\\\\n", + "0 & e^{i \\pi / 4}\n", + "\\end{array}\\right)\n", + "$$\n", + "并且有$S=T^2$。\n", + "\n", + "- 实际上,在实验室中,人们可能不具备从任意方向控制量子比特旋转的能力。\n", + "\n", + "- 比如说,如果我们只能实现$R_z$和$R_y$该怎么办?\n", + "\n", + "
\n", + "\n", + "在 MindQuantum 中也有 `H` , `S` 和 `T` 门,使用方法如下:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "q0: ──H───────\n", + "\n", + "q1: ──S────T──\n" + ] + } + ], + "source": [ + "from mindquantum.core.gates import H, S, T\n", + "from mindquantum.core.circuit import Circuit\n", + "\n", + "circ = Circuit()\n", + "circ += H.on(0)\n", + "circ += S.on(1)\n", + "circ += T.on(1)\n", + "print(circ)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 作业\n", + "\n", + "1. 请用 MindQuantum 验证下式是否成立\n", + "$$\n", + "H|0\\rangle=\\frac{1}{\\sqrt{2}}(|0\\rangle+|1\\rangle) \\quad, H|1\\rangle=\\frac{1}{\\sqrt{2}}(|0\\rangle-|1\\rangle)\n", + "$$\n", + "\n", + "2. 请用 MindQuantum 验证下式是否成立\n", + "$$\n", + "HR_x(\\theta)H=R_z(\\theta)\n", + "$$" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "interpreter": { + "hash": "aee8b7b246df8f9039afb4144a1f6fd8d2ca17a180786b69acc140d282b71a49" + }, + "kernelspec": { + "display_name": "Python 3.9.9 64-bit", + "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.9.9" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} -- Gitee