量子计算作为一种新的计算框架,采用了以超导、离子阱等物理体系的新语言来描述我们传统中所理解的矩阵运算。不同于传统计算机中的比特(经典比特)表示方法,量子计算的基本单元被称为量子比特。我们可以通过一个布洛赫球的模型来理解二者的区别:
传统比特用高电平和低电平来表示一个经典比特的1态和0态,分别对应于布洛赫球模型的南极点和北极点。这是经典比特所能够表示的信息,相当于球表面的两个点,而一个量子比特所能够表示的信息,是整个球的表面(球体内部的点在特定体系下也能够取到,一般我们只取球的表面来表示量子比特的信息)。除了两个极点所表示的信息,与经典比特所表示的信息一致之外,其他的布洛赫球表面的点,表示的是量子力学中所特有的叠加态。也就是说,一个量子比特不仅仅可以表示0态和1态,还可以用一个概率分布来表示0态和1态的叠加态:\(qstate=P(state=0)\cdot\bold{0}+P(state=1)\cdot\bold{1}\)
除了通过叠加态扩展了表示空间之外,量子计算还可以通过量子纠缠的特性,来制造非矩阵乘积态。举个比较通俗的例子来说,如果我们抛两枚硬币到地上,得到的结果,就是两个硬币各自状态的矩阵乘积态:\([正面,反面]\otimes[正面,反面]=[正面正面,正面反面,反面正面,反面反面]\),换句话说,两个硬币之间是独立的。而量子纠缠,就可以使得我们能够得到\([正面正面,反面反面]\)这样的结果集合,也就是将二者绑定。也正是对量子叠加和量子纠缠这两个重要量子特性的应用,使得量子计算机相比于传统计算机能够表现出性能上的极大优势,这种优势被称为Quantum Supremacy/Quantum Advantage,也就是量子优越性。同时,量子计算也被认为是打破传统半导体的摩尔定律或者指数墙的最有力工具。
前面我们提到,量子比特可以表示为0态和1态的一个叠加态,那么就不能用一个元素来表示了,我们可以一个量子态表述为:
因为\(p_0\)和\(p_1\)分别表示的是取得0态与1态的概率,那么从线性叠加的角度来考虑,我们必须把0态和1态定义成矢量形式(基矢)的狄拉克符号:
基于这两个基矢,我们可以重写单量子比特的量子态的形式:
通常情况下,如果是一个归一化的量子态(纯态),有:
这同时也告诉我们,\(p_0\)的本质意义其实是取得0态的概率的开根号(也就是概率幅),并非取得0态的概率,这个表述可能会导致一些疑惑,但是这样也是为了告诉大家叠加态与概率的关系。。表示完单量子比特的信息,我们同样可以推理一下多量子比特信息的表示,比如两量子比特和三量子比特的量子态表示:
从这个表示形式中,我们也可以看出,一个\(n\)量子比特的量子计算机所能够表示的信息,是\(2^n\)的空间,是指数级别上升的。所以一般认为,当量子计算机发展到50个完美量子比特以上时,就会真正意义上的实现量子优越性。
这里插一段话,讲述一个不太经常被提到的,虽然不是很难,但是有可能让人感到迷惑的问题:给定的布洛赫球,实际上有三个坐标轴,为什么所表述的信息是\(2^n\),而不是\(3^n\)次方?我们再回顾一下单量子比特的表达形式:
公式中的\(i\)表示虚数单位,而这两个复数中所附带的相位,就是那一条缺失的坐标轴。但是,为什么这一个维度被“忽略”了呢?这一点其实跟硬件实现有关,在后面我们要提到的量子测量的模块中,一般只针对一个轴进行测量,制造坍缩的量子态,这就使得实际上只有两个轴向的操作会影响到最终的结果。但是我们又必须同时具备这三个轴,因为最终用于执行量子测量的轴,有可能是三个轴的某个叠加的位置(比如x=y=z这条直线)。
在完成了量子比特的定义之后,我们需要定义一些基础的量子比特的操作,就类似于经典比特的逻辑门操作(与门、非门、与或门等等)。先从单个量子比特开始,我们首先回顾一下单位矩阵三个泡利矩阵:
单位矩阵我们都可以理解,就是保持量子态不变。而通过这些基础的泡利矩阵,我们可以用\(R^{-i\theta M},M=\sigma^X,\sigma^Y,\sigma^Z\)去构造一些列绕\(X,Y,Z\)轴旋转的单比特旋转矩阵。我们可以把这些旋转矩阵的形式列出来,首先回顾一下指数矩阵的泰勒级数展开:
将矩阵\(-i\theta M\)代入其中可以得到:
这便得到了将量子比特绕三个绕XYZ轴旋转的旋转矩阵。特殊地,在很多算法中都会使用到这样的一个单量子比特操作:Hadamard门,其定义为:
一般很少被提到,Hadamard门操作的几何意义,就是将一个量子比特绕X-Z的角平分线旋转180度。另外还有相位角量子门操作的形式:
当相位角取得\(\pi\)时,相位角等价于\(\sigma^Z\)。而相位门跟\(e^{-i\theta \sigma^Z}\)的不同之处在于,\(e^{-i\theta \sigma^Z}\)是分别对0态和1态的相位进行旋转,最后再进行叠加,而相位门是固定了0态的位置而旋转1态的相位,最终再进行叠加。从量子态上来看,二者实际上是等价的:
根据以上的单比特门,加上一个双比特门,理论上就可以构成任意比特数的等效量子逻辑门,一般常用的两比特量子逻辑门是CNOT门,也叫CX门,其矩阵形式如下所示:
通过Hadamard门与CX门,就可以构建一个两比特的纠缠态:Bell State,我们可以用IBM的Composer(参考链接3)来演示一下:
从左下角的概率分布结果,我们就可以了解到最终的量子态为:\(\frac{\sqrt{2}}{2}\left|00\right>+\frac{\sqrt{2}}{2}\left|11\right>\),这一点也可以从量子逻辑门操作来进行简单的分析,首先看下第一个量子比特作用Hadamard门的结果:
此时两个量子比特没有作用过两比特门,因此还是矩阵乘积态:
此时再作用一个CX门,得到最终的量子态:
这样,就完成了一个完全纠缠态的制备。制备完成后,对其中的任意一个量子比特进行测量,如果得到的结果是0态,那么另一个量子比特结果必然也是0态。除了CX门,还有另外一个有可能被经常使用到的两比特量子门是Swap门,顾名思义,就是交换两个量子比特的信息,其矩阵形式为:
从矩阵元素上就可以看出其物理图像,Swap的本质操作是交换作用的两个量子比特的概率幅,因为\(\left|00\right>\)和\(\left|11\right>\)态本身就具备对称关系,因此只需要交换\(\left|01\right>\)和\(\left|10\right>\)这两个量子态的振幅即可,因此只有矩阵中间的两个元素进行了交换。
量子计算是一门当下非常火热的技术,抛开个别企业对量子计算的过分吹嘘不谈,其本身是一门非常有意义的跨学科研究领域。本文仅从非物理科班专业的角度——用矩阵的语言去描述量子计算的基础单元和基础操作,包含量子态的含义、单比特量子门操作以及两比特量子门操作的矩阵形式。并且附带一定的物理图像,这一点其实非常重要,如果不断的推导公式,最终有可能迷失了其物理图像,这就脱离了我们做研究的初衷。
本文首发链接为:https://www.cnblogs.com/dechinphy/p/quantum-base.html
作者ID:DechinPhy
更多原著文章请参考:https://www.cnblogs.com/dechinphy/
打赏专用链接:https://www.cnblogs.com/dechinphy/gallery/image/379634.html
腾讯云专栏同步:https://cloud.tencent.com/developer/column/91958
我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
这里是Ruby新手。完成一些练习后碰壁了。练习:计算一系列成绩的字母等级创建一个方法get_grade来接受测试分数数组。数组中的每个分数应介于0和100之间,其中100是最大分数。计算平均分并将字母等级作为字符串返回,即“A”、“B”、“C”、“D”、“E”或“F”。我一直返回错误:avg.rb:1:syntaxerror,unexpectedtLBRACK,expecting')'defget_grade([100,90,80])^avg.rb:1:syntaxerror,unexpected')',expecting$end这是我目前所拥有的。我想坚持使用下面的方法或.join,
几个月前,我读了一篇关于rubygem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:
点向量坐标矩阵的几何意义介绍旋转矩阵的几何含义之前,先介绍一下点向量坐标矩阵的几何含义点:在一维空间下就是一个标量,如同一条直线上,以任意某一个位置为0点,以一定的尺度间隔为1,2,3...,相反方向为-1,-2,-3...;如此就形成了一维坐标系,这时候任何一个点都可以用一个数值表示,如点p1=5,即即从原点出发沿着x轴正方向移动5个尺度;点p2=-3,负方向移动3个尺度; 在一维坐标系上过原点做垂直于一维坐标系的直线,则形成了二维坐标系,此时描述一个点需要两个数值来表示点p3=(3,2),即从原点出发沿着x轴正方向移动3个尺度,在此基础上沿着y轴正方向移动两个尺度的位置就是点p3。
?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------
嗨~大家好,这里是可莉!今天给大家带来的是7个C语言的经典基础代码~那一起往下看下去把【程序一】打印100到200之间的素数#includeintmain(){ inti; for(i=100;i 【程序二】输出乘法口诀表#includeintmain(){inti;for(i=1;i 【程序三】判断1000年---2000年之间的闰年#includeintmain(){intyear;for(year=1000;year 【程序四】给定两个整形变量的值,将两个值的内容进行交换。这里提供两种方法来进行交换,第一种为创建临时变量来进行交换,第二种是不创建临时变量而直接进行交换。1.创建临时变量来
1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,
Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功
项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU
ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear