大家好,欢迎来到IT知识分享网。
相信通过前面几节课的学习,大家已经多多少少对量子计算这门课感到了浓厚的兴趣。前面我们讲到了|0>态,讲到了|1>态,这些都属于基态,但是我们今天要学习的是几种更为复杂的状态,其中包含特别有意思的贝尔态。
目录
一、纯态和混合态介绍
1、介绍
比如说就是一个纯态,它能拆解为|0><0|,同理
也是,因为能拆解为|1><1|。
如果不能用向量的形式描述量子态,是借助密度矩阵的形式描述的,那么这个量子态就是混合态,系统就是处于混合态(mixed state),称为是在ρ的系综里不同纯态的混合。”
总结一下上面这段话,就是对于纯态它可以借助矢量和密度算子两种形式进行描述;但是对于混合态,是只能借助密度矩阵的形式进行描述的。
2、判定方法
通常会使用tr()[矩阵对角线之和]与1的关系,来判定它是不是纯态。如果tr(
)=1,表明它是一个纯态,如果tr(
)<1表明这是一个混合态。
3、量子门与密度矩阵
我们做一个题目,立马就会了:
Ted使用一个量子线路对自己手中的初态∣0〉进行演化,但她的量子线路有些故障,有1/4的概率什么都不做,1/4的概率作用X门,1/2的概率作用H门。则她所获得的末态对应的密度矩阵应该是
【解析】:由题意知道,Ted的态有四分之一的概率在|0>态,由四分之一的概率在|1>态,还有二分之一的概率在|+>态。根据概率矩阵的定义ρ=<0|+\frac{1}{4}|1><1|+\frac{1}{2}|+><+|">,求得密度矩阵为
。
二、贝尔态
1、直积态与纠缠态
我们来看看它们的定义。
直积态:复合系统的量子态|a>可以表示为若干个孤立子系统|a1>、|a2>、|a3>……|an>的直积形式,这些子系统相互独立,不存在纠缠,即|a>=|a1>|a2>|a3>……|an>,则此符合量子态称之为直积态。
纠缠态:若一个量子系统不能写成若干个子系统的直积形式,则称此量子态为纠缠态。
看不懂的话,还是让小编举个例子吧!
例如:|01>就是直积态,很明显,因为这就是|0>
|1>,而我们接下来要学习的贝尔态都不是直积态,并且我们通过对贝尔态的学习可以发现:纠缠态和纯态并不对立。
2、介绍
贝尔态是一个极其复杂的状态,也被称为EPR态或者EPR对。它是用首次提出这些奇怪性质的学者贝尔,以及Einstein(没错,就是爱因斯坦)、Podolsky、Rosen的名字命名的。
好的,现在热烈欢迎,四位嘉宾登场!有请,潘周聃。(帅气扭头)
=\frac{|00>+|11>}{\sqrt{2}}”>,
=\frac{|01>+|10>}{\sqrt{2}}” />
=\frac{|00>-|11>}{\sqrt{2}}”>,
=\frac{|01>-|10>}{\sqrt{2}}” />
不难发现,以上四种量子态均不能写作 ∣ϕ>= (a∣0>+b∣1>)⊗(c∣0> +d∣1>) ,不过还是希望大家头铁的去试一试,看看是不是果真如此。
那么,它是纯态吗?相信很多读者听名字,纠觉得纯态和纠缠态势不两立,水火不容。刚好用这个例子,来证明,这两种状态均可存在于一体。
证明方法:请算出概率矩阵的平方,判断这个新得到的矩阵,对角线之和是不是等于1。
3、构造方法
①假设输入为|0>与|0>,首先高位量子比特经过Hadamard Gate,(高位量子比特作为控制比特,低位量子比特作为目标比特),则可以得到+|11>}{\sqrt{2}}”>。
②假设输入为|0>与|1>,首先在pyqpanda中低位量子比特要从|0>变为|1>需要经过一个X门,并且高位量子比特需要经过Hadamard Gate,(高位量子比特作为控制比特,低位量子比特作为目标比特),则可以得到+|10>}{\sqrt{2}}”>。
假设输入为|1>与|0>,首先在pyqpanda中高位量子比特要从|0>变为|1>需要经过一个X门,并且高位量子比特还需要经过Hadamard Gate,(高位量子比特作为控制比特,低位量子比特作为目标比特),则可以得到-|11>}{\sqrt{2}}”>。
④假设输入为|1>与|1>,首先在pyqpanda中高位量子比特与低位量子比特要从|0>变为|1>需要经过一个X门高位量子比特还要经过Hadamard Gate,(高位量子比特作为控制比特,低位量子比特作为目标比特),则可以得到-|10>}{\sqrt{2}}”>。
三、实践:构造bell态
题目:请用“3、构造方法”里的思路,构造出四种贝尔态。要求输入字符串表示是哪一种贝尔态,返回值为量子状态。
from pyqpanda import * import numpy as np #输入字符串,返回状态列表 def question1(input: str) -> list: def getFirstNum(input: str) -> int: return int(input[0]) # 获取输入字符的第一个数字 def getSecondNum(input: str) -> int: return int(input[1]) # 获取输入字符的第二个数字 num1 = getFirstNum(input) num2 = getSecondNum(input) qvm = CPUQVM() qvm.init_qvm() qubits = qvm.qAlloc_many(2) cbits = qvm.cAlloc_many(2) cbits[1].set_val(num2) cbits[0].set_val(num1) # 构造量子程序prog prog = QProg() # 构造量子程序的各个条件分支 progstart = QProg() progend = QProg() # 当输入00与01时,不需要插入X门 # 当输入10与11时,需要将0态转变为1态,即加一个X门 progstart.insert(X(qubits[1])) # 如果输入00或者10,则第二条线路输入0态,否则执行X门操作,将其变为1态 progend.insert(X(qubits[0])) # qif1执行对第一条线路的改造,qif2执行对第二条线路的改造 qif1 = create_if_prog(cbits[0], progstart) qif2 = create_if_prog(cbits[1], progend) prog.insert(qif1) prog.insert(qif2) prog.insert(H(qubits[1])) prog.insert(CNOT(qubits[1], qubits[0])) # 用prob_run_list测概率 result2 = qvm.prob_run_list(prog, qubits, -1) #使用get_qstate()函数返回列表 result = qvm.get_qstate() # 返回此概率列表 return result print("本题的结果为:") print("当输入为00时,结果为", question1("00")) print("当输入为01时,结果为", question1("01")) print("当输入为10时,结果为", question1("10")) print("当输入为11时,结果为", question1("11"))
输出的结果为:
结果正确!
那么,如果您感觉小编写的文章对您有帮助,请点个赞与收藏再走好嘛?谢谢大家!
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/129458.html