在上一篇博客中,我们用矩阵的语言介绍了量子计算中基本量子单元——量子比特,与量子门操作的相关概念。通过对量子态的各种操作,相当于传统计算机中对经典比特的操作,就可以完成一系列的运算了。但是量子计算的一个待解决的问题是,所有存储在量子态中的信息是没办法从经典世界直接读取的,只能通过量子测量,使得量子态坍缩到经典比特之后,才能够在经典世界里进行读取。
如果通过各种量子门操作构成的量子线路,也称为量子算法,会使得一个给定的量子态\(\left|\psi_0\right>\)变化到目标量子态\(\left|\psi_t\right>\)。那么以当前时代的量子计算机的条件来说,还没办法做到直接在量子态上存储和读取信息,只能够将其坍缩到经典比特上,去获取测量得到的分布信息,以此来近似为真实的量子态信息。当然,这个过程需要大量的测量。举一个具体的例子来说,假如我们对一个初始态为\(\left|0\right>\)的量子比特作用一个\(H\)门,那么得到的结果是:
那么最终量子测量所得到的概率应该为\(\left|0\right>:50%,\left|1\right>:50%\),而我们如果实际去测量的话,以IBM Composer(参考链接1)为例,就会得到这样的采样(通过量子测量得到经典统计结果的过程,也可以称之为采样)结果:
可以看到,采样得到量子态并不是完全等同于理论预测值,但是也非常的接近,采样得到\(\left|1\right>\)态的概率约为:49.22%。需要明确的是,这个误差是来自于测量本身的统计误差,随着测量次数的增长,这个误差会被逐渐的消减。而在真实的量子计算机上面去运行这样的程序的话,还有可能存在系统误差、环境误差等影响,这也是当前的量子计算机还得不到重大应用的根本原因所在。
那么回到我们所讲述的量子测量,可以看到在IBM Composer的截图中,我们在Hadamard门之后加了一个Measure的操作,并且在Measure操作的logo上还带了一个Z的字母,这表示的是量子测量在Z轴上进行,可以简单的理解为,把一个布洛赫球上的量子态矢量投影到Z轴上进行读取,最后得到一个统计的结果,布洛赫球的示意图如下所示:
如果用数学矩阵来表示的话,Measure在量子计算中使用到了一个Observable观测量的概念,通过给定测量基,来使得量子态矢量坍缩,我们假定这样的一组测量基:
这里所使用的狄拉克符号,其实就是横向量与列向量,只是一个物理学上常用的简写标记,我们重点关注一下测量基的应用。测量基得到的结果是这样的形式:
然后把我们上述所得到的量子态矢量与测量基矩阵代入到上面的这个式子中,就可以得到以下的测量结果:
这就等同于我们在Z轴的测量基下所计算得的理论预期结果,跟上述IBM Composer所得到的结果是一致的,这就是量子测量的最基本的运算。而在真正的量子算法实现过程中,尤其以近几年非常热门的NISQ(Near Term Intermediate Scale Quantum Computing)近期量子算法为例,其用于测量的测量基有依赖于实际的待求解问题,需要在实验过程中构造非常复杂的测量基,这个就留着后面的NISQ专题再进行介绍。
量子的世界与经典的世界存在着信息的隔阂,我们可以通过多个量子比特所构成的量子态去存储大量的信息,以及进行规模大到经典计算机所无法执行的运算。但是毕竟我们还依然生活在经典的世界中,最终我们还是需要将量子态坍缩到经典比特再进行读取,而这个使得量子态坍缩的过程,就是一种量子测量的方法。通过大量的量子测量,我们就可以近似的获得到量子态矢量中所存储的信息。
本文首发链接为:https://www.cnblogs.com/dechinphy/p/quantum-measure.html
作者ID:DechinPhy
更多原著文章请参考:https://www.cnblogs.com/dechinphy/
打赏专用链接:https://www.cnblogs.com/dechinphy/gallery/image/379634.html
腾讯云专栏同步:https://cloud.tencent.com/developer/column/91958
这里是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,
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
我对如何计算通过{%assignvar=0%}赋值的变量加一完全感到困惑。这应该是最简单的任务。到目前为止,这是我尝试过的:{%assignamount=0%}{%forvariantinproduct.variants%}{%assignamount=amount+1%}{%endfor%}Amount:{{amount}}结果总是0。也许我忽略了一些明显的东西。也许有更好的方法。我想要存档的只是获取运行的迭代次数。 最佳答案 因为{{incrementamount}}将输出您的变量值并且不会影响{%assign%}定义的变量,我
给定一个nxmbool数组:[[true,true,false],[false,true,true],[false,true,true]]有什么简单的方法可以返回“该列中有多少个true?”结果应该是[1,3,2] 最佳答案 使用转置得到一个数组,其中每个子数组代表一列,然后将每一列映射到其中的true数:arr.transpose.map{|subarr|subarr.count(true)}这是一个带有inject的版本,应该在1.8.6上运行,没有任何依赖:arr.transpose.map{|subarr|subarr.in
因为我现在正在做一些时间测量,我想知道是否可以在不使用Benchmark类或命令行实用程序time的情况下测量用户时间或系统时间。使用Time类只显示挂钟时间,而不显示系统和用户时间,但是我正在寻找具有相同灵active的解决方案,例如time=TimeUtility.now#somecodeuser,system,real=TimeUtility.now-time原因是我有点不喜欢Benchmark,因为它不能只返回数字(编辑:我错了-它可以。请参阅下面的答案。)。当然,我可以解析输出,但感觉不对。*NIX系统的time实用程序也应该可以解决我的问题,但我想知道是否已经在Ruby中实
给定两个大小相等的数组,如何找到不考虑位置的匹配元素的数量?例如:[0,0,5]和[0,5,5]将返回2的匹配项,因为有一个0和一个5共同;[1,0,0,3]和[0,0,1,4]将返回3的匹配项,因为0有两场,1有一场;[1,2,2,3]和[1,2,3,4]将返回3的匹配项。我尝试了很多想法,但它们都变得相当粗糙和令人费解。我猜想有一些不错的Ruby习惯用法,或者可能是一个正则表达式,可以很好地回答这个解决方案。 最佳答案 您可以使用count完成它:a.count{|e|index=b.index(e)andb.delete_at
Ruby中如何“一般地”计算以下格式(有根、无根)的JSON对象的数量?一般来说,我的意思是元素可能不同(例如“标题”被称为其他东西)。没有根:{[{"title":"Post1","body":"Hello!"},{"title":"Post2","body":"Goodbye!"}]}根包裹:{"posts":[{"title":"Post1","body":"Hello!"},{"title":"Post2","body":"Goodbye!"}]} 最佳答案 首先,withoutroot代码不是有效的json格式。它将没有包