目录
一、前言
1、引言
在经典计算机中,最基本的单元是比特,而最基本的控制单元则是逻辑门(比如说与门、或门、非门等等),可以通过逻辑门的组合控制整个电路。类似的,在量子计算中,最基本的单元是量子比特,而处理量子比特的方式叫做量子逻辑门。但是量子逻辑门与经典逻辑门也是有区别的,量子逻辑门是可逆的,所有的量子逻辑门运算都是一种酉运算。使用量子逻辑门,有意识的使量子态发生演化,达到自己想要的结果。所以,量子逻辑门是构成量子算法的基础,并且这些量子逻辑门由矩阵构成。设计好一个优秀的量子计算线路图有助于我们完成量子计算的任务。如下图就是一个简易的量子计算线路图,其中q[0]、q[1]可以理解为寄存器,|0>是量子的初状态。H、S、Z是量子门,CR是受控量子门而最后的这个红色框框的作用是测量。
所以说,学明白量子逻辑门对我们设计线路图及其关键。这篇文章中,我们将学习多种多样的量子逻辑门。
2、Bloch球
为了更加直观的感受我们今天讲解的逻辑门的作用,我们引入了布洛赫球(Bloch球),它能够方便的表述一个量子比特的任意状态。如果量子态是一个纯态,那么它是球面上的一点。点的z坐标衡量了它是|0>与它是|1>的概率。即P(|0>)=,P(|1>)=
。球的z正半轴代表|0>,负半轴代表|1>。
平行与XoY平面对这个球作截面,所得到的这个圆象征的相位的复平面。如下图所示,为单位复数的幅角。经过这个过程,可以使球上的每个点与纯态联系起来。
相信很多读者们不了解为什么这个球能表述一个量子比特的任意状态,我们给出推理过程:首先我们要知道任意一个量子比特|x>可以写成|x>=a|0>+b|1>,而我们知道。且a与b均为复数形式,均可以写成q+pi的形式,也可以根据欧拉公式(即
,一个复数可以写作是指数形式)把a和b写作
的形式。如,我们把a写成
,b写成
。
而根据(模的平方和为1),我们可以求得
。平方和为1我们又容易想到圆的参数方程,即
,
,这样能减少参数的数量,即将
与
用一个
所代替。同时,我们希望式子更为简便,能不能把两个
用一个
来代替呢?答案是我们可以通过同除来“消灭”一个参数,所以有
,因为
这一部分模的平方为1,也就是说量子的物理状态不会改变,所以我们可以依据这个特性再次消除掉一个参数。由此得到的含有
和
两个参数的方程,它的几何意义就是一个球。并且
,
。
那么我们定义时量子态指向z正半轴,
时量子态指向x正半轴,垂直于XoZ平面且过球心的为y轴。经过计算,z正半轴为|0>态,z负半轴为-|0>态,完全不符合上面这个Bloch球呀,是不是定义这个球的人弄错了?
答案是我们为了能让z正半轴满足为|0>态,z负半轴为|1>态,所以把θ换成了2分之θ。这样子能让|0>的对立面就是|1>,看起来更加直观。a与b相应的修改为,
。
则x正半轴表示为,负半轴表示为
;y正半轴表示为
,负半轴表示为
。这就是布洛赫球的全部几何信息。
3、pyqpanda的安装
量子计算编程的主要库是pyqpanda(python语言环境下)以及Qpanda2(C++语言环境下)。不过小编更喜欢用python,所以这里说明一下python中的pyqpanda安装的相关问题以及解决方案。
首先,小编第一次用pycharm安装pyqpanda就报错了。报错的结果如下图:
然后小编想着是不是因为网速问题没有下载下来,于是小编选择在终端进行下载,并且直接开了一个热点,外加换了一个源,但结果还是不尽如人意。换源指令如下:
pip install pyqpanda -i https://pypi.tuna.tsinghua.edu.cn/simple
后来我在网上搜索解决方案,得出的结论是:小编的python版本太高了,已经在3.10了。而pyqpanda只能在版本3.6-3.9的python环境中下载下来。找到问题的关键,解决思路不就清晰了。于是小编重新下载了一个低版本的python,然后就很顺利的用下述命令下载下来了!!
pip install pyqpanda
然后新建一个项目,输入下述代码,看看能否运行:
import pyqpanda as pq
if __name__ == "__main__":
# 初始化量子虚拟机
machine = pq.init_quantum_machine(pq.QMachineType.CPU)
qubits = pq.qAlloc_many(3)
cbits = pq.cAlloc_many(2)
cbits[0].set_val(0)
cbits[1].set_val(1)
prog = pq.QProg()
branch_true = pq.QProg()
branch_false = pq.QProg()
# 构建QIf正确分支以及错误分支
branch_true.insert(pq.H(qubits[0])) \
.insert(pq.H(qubits[1])) \
.insert(pq.H(qubits[2]))
branch_false.insert(pq.H(qubits[0]))
# 构建QIf
qif = pq.create_if_prog(cbits[0] > cbits[1], branch_true, branch_false)
# QIf插入到量子程序中
prog.insert(qif)
# 概率测量
result = pq.prob_run_dict(prog, qubits, -1)
# 打印概率测量结果
print(result)
pq.destroy_quantum_machine(machine)
二、单量子比特逻辑门
1、自旋矩阵
自旋矩阵有时也被称为泡利矩阵,有三种形式,分别称为X门、Y门以及Z门。
①X门
它之所以称之为X门,主要原因是它的作用效果相当于量子态绕Bloch球的x轴旋转π。我们不难发现,X门的作用是将|0>转换为|1>,将|1>转换为|0>与非门相对应。因此我们可以推理出对应的矩阵完成这一行为。
经过计算,对于X门,它的泡利运算矩阵为。按照我们的数学基础,我们很容易验证这一矩阵能否完成绕x轴旋转π的任务:
X门作用于叠加态的结果是:
②Y门
与X门的命名规则类似,之所以称为Y门,是因为它的作用效果相当于量子态绕Bloch球的y轴旋转了π。它的矩阵形式为。其分别作用于|0>与|1>的效果为:
Y门作用于叠加态的结果是:
③Z门
同理,它的作用效果相当于量子态绕Bloch球的z轴旋转了π。矩阵形式为。我们仍然研究其作用于|0>与|1>的效果。
Z门作用于叠加态的结果是:
2、H门
Hadamard门简称为H门,也叫阿达马门。它是一种能将基态转变为叠加态的量子门。它的矩阵形式为H=,相当于
。也就是说可以用X门以及Z门来制备H门。我们仍然研究它对于|0>以及|1>的作用。
我们把|1>态经过H门后的状态称为|->态,而|0>态经过H门后的状态称为|+>态。
运用著名的恒等关系通过检查来化简电路很有好处,证明下面三个恒等关系:HXH=Z,HYH=-Y,HZH=X。(自己带入矩阵验算即可,这里就不做过多的演示了)
那么,理论知识到这里已经快要结束了,小编将会在后续课程中讲到多量子比特门以及pyqpanda的编程问题,感兴趣的小伙伴可以持续关注小编的文章!
亲,能给小编点一个免费的赞和收藏吗?下期更精彩哦!