量子编程IV:异地不是问题

量子纠缠是一件很令人困惑的事情,不但常人难以理解,就连高山仰止如爱因斯坦,也觉得不可思议、简直是幽灵一般的现象。简单的说,量子纠缠是两个粒子(其实可以是多个,这里简化问题,就只说两个)之间的一种关联。这种关联跨越空间的限制,两者分处不同的城市这都不是问题,即使在宇宙的两极也不会断绝这种关联。这样的纠缠,十分虐狗。

我们已经知道,量子行为是随机的。如果一个量子,其状态为1/sqrt(2)·|0> + 1/sqrt(2)·|1>,那么这个量子就同时处于|0>态和|1>态。一旦测量,这个量子有0.5的概率坍塌至|0>态、有0.5的概率坍塌至|1>态。至于究竟是坍塌至|0>态还是|1>态,这是完全随机的。

考虑一个由两个粒子构成的量子体系,其状态为1/sqrt(2)·|00> + 1/sqrt(2)·|11>。这个量子体系同时处于|00>态和|11>态,一旦测量,这个量子体系有0.5的概率坍塌至|00>态、有0.5的概率坍塌至|11>态。坍塌至|0>态还是|1>态,是完全随机的。我们观察该量子体系中的第一个粒子(也就是|00>或|11>中的第一位),可以发现,第一个粒子坍塌至|0>态还是|1>态是完全随机的,概率均为0.5;类似的第二个粒子坍塌至|0>态还是|1>态也是完全随机的,概率均为0.5。

如果对这个由两个粒子构成的量子体系中的一个粒子进行一次测量,比如这次测量只测第一个粒子的状态。结果发现,第一个粒子的量子状态坍塌至|0>态。那么,我们立刻可以确定,如果对第二个粒子进行测量,结果肯定是|0>态。类似的,如果第一个粒子测得|1>态,那么第二个粒子肯定是|1>态。也即,虽然第二个粒子的状态是完全随机的,但是,一旦第一个粒子被测量,第二个粒子的状态立刻就被确定了。相应的,如果是先测第二个粒子的状态,那么一旦第二个粒子状态确定,第一个粒子的状态也就立刻被确定了。换言之,两个粒子的状态是随机的,但是两者的状态不是独立的。两者互相关联,测量其中一个使其状态由随机坍塌至确定,另一个也立刻被确定。即使两者相距千里。萬里。千萬里。

思考两个问题,两个粒子构成的量子体系,量子状态为1/sqrt(2)·|01> + 1/sqrt(2)·|11>,是否构成量子纠缠?量子状态为1/sqrt(2)·|01> + 1/sqrt(2)·|10>,是否构成量子纠缠?答案:第一个状态不是,该状态下,第一个粒子状态确定后,不能确定第二个粒子状态;第二个状态是,该状态下,第一个粒子状态确定后,第二个粒子的状态立刻确定。

物理实现上,对于不同的粒子可以使用不同方法创造量子纠缠状态。比如,让一个光子通过BBO晶体,可以得到两个低频光子。这两个光子的偏振有两个状态,都是水平方向和都是竖直方向。这两个光子构成的量子体系同时处于这两种状态,一旦测量,坍塌至任一状态的概率为0.5。如果测量其中一个光子,那么另一个光子的状态也就立刻确定。

编写算法时,实现两个量子位的纠缠需要用到量子计算机中一种重要的单元,CNOT门(受控非门)。受控非门是两元运算逻辑门,参与运算的第一个量子位是控制位、第二个量子位是目标位。当第一位是|0>时,第二位原样输出;第一位是|1>时,第二位进行反转(若是|0>、则变|1>,若是|1>、则变|0>)。第二位是否执行非操作的前提条件是第一位是否为|1>,因而称为受控非门。CNOT门的传输矩阵为{{1, 0, 0, 0}, {0, 1, 0, 0}, {0, 0, 0, 1}, {0, 0, 1, 0}}。一个由两个量子位构成的量子体系,量子态为a|00> + b|01> + c|10> + d|11>。可以算出:

CNOT·{{a}, {b}, {c}, {d}} = {{a}, {b}, {d}, {c}}

也就是说,经过CNOT门,变为a|00> + b|01> + d|10> + c|11>。第一位测得为|0>,第二位的概率保持不变;第一位测得为|1>,第二位的|0>和|1>状态概率对换。

我们看一个稍微复杂一点的算法。算法涉及两个量子位,初始状态均为|0>态。第一个量子位q1通过哈达玛门之后作为控制位与第二个量子q2一起通过CNOT门。

q1为|0>态,通过哈达玛门后结果为:1/sqrt(2)·|0> + 1/sqrt(2)·|1>

再与|1>态的q2一起通过CNOT门后结果为:1/sqrt(2)·|00> + 1/sqrt(2)·|11>  ----(1)

表达式(1)所表示的状态,有0.5的概率是q1为|0>且q2为|0>,还有0.5的概率是q1为|1>且q2为|1>。对于这个状态,我们可以发现,只要测量一个量子位的值,另一个量子位的值立刻确定。比如测得第一个量子位状态为|0>,就立刻可以确定第二个量子位为|0>;再比如测得第二个量子位为|1>,就立刻可以知道第一个量子位为|1>。因此,两个量子位处于纠缠态。

类似的,可以分析初始状态q1为|0>且q2为|1>、q1为|1>且q2为|0>、q1为|1>且q2为|1>这三种情况。通过同样的算法——第一个量子位q1通过哈达玛门之后作为控制位与第二个量子q2一起通过CNOT门——之后,两个量子位都处于纠缠态。换言之,这是一种可以将两个量子位进行纠缠的算法。

我们来用Q#进行量子纠缠的模拟。C#主控程序如下:

Q#量子计算模块中主要内容如下:

其中红框处实现的是我们的算法:第一个量子位q1通过哈达玛门之后作为控制位与第二个量子q2一起通过CNOT门。希望能够将两个量子位进行纠缠。对于q1和q2不同状态的组合,我们每个状态运行1000次,以观察测量结果的概率。运行结果如下:

上图显示了q1和q2不同初始状态的四种组合,经过算法后的测量结果。方便起见,我们只看最后一种情况,初始状态q1为|1>且q2为|1>。经过算法,q1为|0>且q2为|1>的测量结果有496次,与理论预测0.5概率吻合;q1为|0>且q2为|1>的测量结果有504次,与理论预测0.5概率吻合。这两种状态叠加存在,但是,一旦我们测得其中一个量子位的状态,另一个量子位的状态立刻确定。也就是,这两个量子位成功纠缠。

上图中其它三种情况也是类似,经过算法后,两个量子位都能成功纠缠。实际上,这四种输出状态就是大名鼎鼎的贝尔态(以科学家约翰·贝尔的名字命名),是一种简单的量子纠缠状态(只涉及两个粒子、两个粒子输入态只有|0>态或|1>态而不涉及叠加态)。需要说明的是,这里所有情况下,进行量子纠缠的成功率均为100%。这是因为我们使用的是模拟器,这个模拟器模拟的是理想状态的量子计算机。要将真实的量子计算机的保真率提升到100%,这其中还有很多工作要做。

上面就是这篇博文的全部内容:介绍了量子纠缠的概念,模拟仿真了一种算法,实现了对两个量子位进行量子纠缠。薛定谔说,量子纠缠是量子力学领域最显著的特点,没有之一(“I would not call entanglement ONE but rather THE characteristic trait of quantum mechanics”,原谅我的渣翻译)。我觉得薛定谔说的对。

未经允许请勿转载

原文地址:http://blog.51cto.com/13763747/2125848

时间: 2024-11-07 14:36:57

量子编程IV:异地不是问题的相关文章

量子计算III:Hello, QUANTUM world!

Visual Studio 2017 中加装Microsoft Quantum Development Kit开发包后,就可以使用Q#语言编写量子算法程序.量子编程的新世界就在眼前,我们要不要先打声招呼"Hello, QUANTUM world!". 量子计算机是基于量子特性设计的计算机,我们在使用量子计算机之前,需要考虑一个问题:如何使用,或者说,按照什么模式来使用.粗略的做个类比,核弹是基于核反应的zha弹,威力无穷.当我们拥有了核弹这样的神器,我们应该构建一种怎样的策略来使用:是

有限状态机FSM和层次状态机HSM

前言 就单片机而言,程序可以分为两类:带操作系统的程序和前后台程序:前后台程序从架构上又分为顺序机和状态机. 广义地说, 任何一个程序都是一个状态机, 因为它总是要记住一些状态, 然后根据输入进行输出. 狭义上说,状态机不是指随随便便的一个程序, 而是指某一类程序, 也就是状态机编程程序. FSM 简单讲就是将行为分为一个一个的状态,状态与状态之间的过渡通过事件的触发来形成.比如士兵的行为有"巡逻","追击敌人","攻击敌人","逃跑&

QEP原理

1.QP简介: 量子平台(Quantum Platform, 简称QP)是一个用于实时嵌入式系统的软件框架,QP是轻量级的.开源的.基于层次式状态机的.事件驱动的平台. QP包括事件处理器(QEP).轻量级的事件驱动框架(QF).任务调度微内核(QK)和实时跟踪调试器(QS)四个部分. 利用QP可以开发出结构清晰的嵌入式应用程序(使用C或C++语言). 2.QEP核心思想 QEP的核心思想就是,用一个函数指针指向当前状态函数,使用这个函数指针有条件地执行某状态函数,并根据执行结果执行其它的相应动

QF结构分析

1.QP简介: 量子平台(Quantum Platform, 简称QP)是一个用于实时嵌入式系统的软件框架,QP是轻量级的.开源的.基于层次式状态机的.事件驱动的平台. QP包括事件处理器(QEP).轻量级的事件驱动框架(QF).任务调度微内核(QK)和实时跟踪调试器(QS)四个部分. 利用QP可以开发出结构清晰的嵌入式应用程序(使用C或C++语言). 图1.QP总体结构 2.QP之QF简介 QF是QP的核心,可以把QF理解为软件总线(software bus,SBus).在这个软件总线上连接着

bash编程快速入门

首先,我们简单的介绍一下bash,bash是GNU计划编写的Unixshell,它是许多Linux平台上的内定shell,它提供了用户与系统的很好的交互,对于系统运维人员,bash的地位是举足轻重的,bash编程能很快处理日常的任务 bash入门,一个最简单的bash例子 #vim hello.sh #!/bin/bash #This is the first example of the bash #echo "Hello world" 下面,我们就这个简单的bash 脚本来介绍一下

370 门免费编程与计算机科学在线课程

简评:这篇文章为大家整理出 370 门精选的免费高质量编程计算机科学类的课程(涵盖程序语言.人工智能.深度学习与机器学习等热门话题).这370 门课程是从 Class Central数据库里面的 7000 门课程挑选出来的,每个课程的 Rating(评价)也是由该网站上获取下来的平均值. 370 门课程里面根据难易程度被分为: 入门 中级 进阶 所收录的大部分教程都已经更新完毕了,你可以按照自己的节奏(Self Paced)随时观看学习,有小部分教程还在持续更新至中,当然了,它们全都是免费的!

编程模拟自然(九):元胞自动机

序 旧书有云:发鸠之山,其上多柘木.有鸟焉,其状如乌,文首.白喙.赤足,名曰精卫,其鸣自詨. 一日,精卫游于码海,溺而不返,后常衔西山之木石,以堙于海.有诗为证: 万事有不平,尔何空自苦: 长将一寸身,衔木到终古? 我愿平码海,身沉心不改: 码海无平期,我心无绝时. 呜呼!君不见,西山衔木众鸟多,鹊来燕去自成窠! (前情提要:主角元乘坐返回舱降落到了码海上,随后遇到了个鸟人...) “咳咳,远道的客人,我名精卫XIV,乃是先祖精卫鸟的第十四代后裔...”鸟人作自我介绍 “...你是谁,从哪里来又

Linux下的多进程编程

1.进程 1.1进程的定义 <计算机操作系统>这门课对进程有这样的描述:进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器.程序是指令.数据及其组织形式的描述,进程是程序的实体. 1.2进程的概念 进程的概念主要有两点: 第一,进程是一个实体.每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text

编程一开始就应该养成的好习惯

有些编程规范,学编程第一天就应该了解,这些习惯比你多学两章知识来的更为实际,他们甚至可能会直接影响你的编程生涯,所以,不要一开始觉得这些习惯都不重要,有很多同学认为等到技术成熟的时候再考虑它们,殊不知,坏习惯一旦养成需要花费多大的经历才能更正.一开始就对自己要求严格一些,慢慢的养成习惯,却也不觉得这些规范是束缚,而认为是天经地义的事情. 好的编程命名习惯不止是可以提高代码的可读性,其实还可以大大提高你的开发效率,例如,Android中各种控件的命名,好的命名可以让你快速的在Activity中找到