学习量子自旋、纠缠和量子计算机操作

qspin的Python项目详细描述


量子自旋,这是一个小软件包,有助于学习量子自旋和纠缠是如何工作的。https://en.wikipedia.org/wiki/quantum_state>;` `;
`pauli matrices<;https://en.wikipedia.org/wiki/pauli_matrices>;`;
`singlet state<;https://en.wikipedia.org/wiki/singlet_state>;`;
`triplet state<;https://en.wikipedia.org/wiki/triplet_state>;`;
`密度矩阵<;https://en.wikipedia.org/wiki/density\u matrix>;``量子纠缠<;https://en.wikipedia.org/wiki/quantum\u entrange>;``熵<;https://en.wikipedia.org/wiki/von\u neumann\u entropy>;``量子逻辑门<;https://en.wikipedia.org/wiki/quantum_u logic_u gate>;`
]

-book:**量子力学-理论最小值**,Leanaard Susskind和Art Friedman,基础书籍,2014年。(主要是第6章和第7章)
-代码::bash

pip install--升级qspin

**开箱即用测试:**
代码::python

$python
>;>;import qspin
>;>;qspin.all廑tests()


从美国进口胸罩、胸罩、U、D、S、S、S、S、S、S、S、S、S、S、S、S、S、S、S、S、S、S、S、S、S、S、S、S、S、S、S、S、S、S、S、S、S、U
>>U>;
>D>;D
>D>;
>>>>U+D>D>D>D>D>D>D>D>D>D>D>D>D>D>D>D>D>D>D>D>D>D>D>D>D>D>D>D>D>D>D>D>D>D>D>D>D>D>D>D>D>D>D>
u>;+i&d>;

**运算符**
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

……编码:python

>
>>>>>
[0 1]>
[1 0]>
>>>>>>>>>>>>>>>>>>>>>>>[[0.+0.J-0.-1.J]
[0.+1.J 0.+0.J 0.+0.J]]]
>>>>
>>>>>>>>
>[0-1]>
>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>>>>>>>>>>>>124;u>;
>;>;sz*d
-d>;

**可观测值的期望值**
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

sz是自旋z分量的可观测值,对于"向上"状态,唯一的
结果us+1,因此期望值为+1。


代码::python

>;u.h*s z*u
1.0
>;sz.average(u)计算可观测值平均值的另一种方法
1.0

(`q.h'是hermitian共轭;它将ket转换为br a,如:math:`\braket{u s z u}')。
运算符(本例中为sz)是已知的。在量子力学中,作为一种可观察的东西,
意味着它可以测量一些东西。这里它是自旋的z分量。
可观测的本征值是观测的可能结果。
每种状态下都有一个波函数。我们把波函数内部存储为向量,每个分量都是基本征态的波函数值。
算符(观测值)存储为矩阵,也定义在相同的基础上。
整个qspin的假定基是:math:`\ket{u}和:math:`\ket{d}单个颗粒。代码:python

>;>;u
u>;
>;>;u.phi
矩阵([[1.],
[0.]])

**特征值**
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

.matrix"提取运算符的矩阵表示。"代码::python

>;>import numpy as np
>;>sz
[[10]
[0-1]
>;>ev,evec=np.linalg.eig(sz.matrix)
>;>ev
阵列([1.,-1.])
>>>evec
>矩阵([[1,0.],
[0,1.]]])
>>gt>>
>;sx自旋x
[[0 1]
[1 0]]
>>>gt>>>>ev,evec=np.linallg.eig(sx.矩阵)
>>ev
>ev
>阵列([1.,-1.])
>>>>ev>ev
>ev
>阵列([1.,-1.])
>>
>>>>>>>>evec

>gt>>;evec
矩阵([[0.70710678,-0.70710678],
[0.70710678,0.70710678]])


有一种方便的"eig"方法,可以生成特征值列表和特征向量列表,特征向量是状态:

。电动汽车,EVEC=SX.EIG(
>>>>>>>>>>>>>>>>>>>>>>>>>>>>EVEC
>阵列([1.,=1.])
>>>>>>>>>>><0.707107 u>;+0.707107 d>;,-0.707107 u>;+0.707107 d>;]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>/>(数组([1.,-1.]),[u>;,d>;])

请注意,spin-x可观察对象具有与spin-z、+1和-1相同的特征值。但在我们的基础上,特征向量是不同的,因为我们使用的是{:math:`\ket{u}`,:math:`\ket{d}}}基础。它们分别是
:数学:`(\ket{u}+\ket{d})/\sqrt{2}`(测量为sx=+1)和
:数学:`(\ket{u}-\ket{d})/\sqrt{2}`(测量为sx=-1)分别为sx=-1。

**条件概率**
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
条件概率使用具有测量特征向量的状态,平方。因此,在给定粒子处于以下状态时,测量sx=+1的概率是:math:`\ket{u}`是:

。代码::python

>;>l=(u+d).n"左"状态。.n规范化状态
>;>;(bra(l)*ket(u))**2向上给定左的期望值
0.5
>;>.np.abs(l.h*u)**2另一种方法。.h表示爱马仕共轭物;将ket转换为bra
0.5
>;>l.prob(sx,l)
1.0
>;>l.prob(sx,u)
0.5


**测量**
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

可观测到的量子测量包括将状态"折叠"到可观测到的一个本征状态。


代码::python

>>l=(u+d).n
>>sz.measure(l)
(1.0,u>;)

向上或向下
(在这种情况下,粒子以"左自旋"状态开始的概率为50-50)。
测量函数返回测量值,在这种情况下为1.0,
和折叠状态,:数学:`\ket{u}`.

**state的字符串表示**
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

代码::python

>;>u=ket(''u>;')或ket('u')(垂直线和括号可选)
>;>d=ket(''d>;')或ket('d')
>;>u
>;
>;>d
>;

基函数的字符串表示默认为"u"和"d"。作为
另一种选择,表示可以设置为
0'和'1'或向上和向下箭头(后者要求
终端能够显示Unicode字符)。

密码::python

>>>gt;qspin.set_base_base_repr('01')
>;u=ket('0')
>;d=ket('1')
>;u=ket('0')
>;u+d。n
0.707107 0.707107>0.707107 1>;

with:code:`qspin.set_base_repr('箭头')>

>with:code:`qspin.set_base_base_base_repr('u repr('箭头')`>>>>>>[1,0])`renders as:math:`\ket{\uparrow}`
这提供了可爱的打印输出,但对于字符串输入来说并不太有用,因为上箭头和下箭头是Unicode。

**波函数定义**
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

也可以使用波函数定义状态,以矩阵列向量的形式给出
。规范化状态是一个很好的实践。代码:python

>;>w=ket(np.矩阵([1,1.]).t).n
>;>w
0.707106781187 u>;+0.707106781187 d>;




从基态的外积形成投影算符。

……巨蟒:巨蟒

>;rho=ket(''u>;'u>;")*胸罩('<;u'u'124;")+ket(''d>;")*胸罩('<;d'd'124;"))
>;;也可以这样做:
>;u=ket(''u>;"));d=ket(''d>;'''d>;);
>>;
>>;rho=ket(u)*胸罩(u)*胸罩(u)*胸罩(u)也可以这样做:
>;
>>br/>>;
>;+KET(D)*胸罩(D)
>;>rho
[[1.0.]
[0.1.]]
>;>;u
1.0 u>;
>;>;rho*u
1.0 u>;
>;>;rho*d
1.0 d>;

代码::python

>;u.kind
"ket"
>;br a(u).kind
"bra"

**密度矩阵和熵**
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

为单个粒子的集合创建密度矩阵。

代码::python

>;来自qspin导入熵
>;p=[0.5,0.5]
>;rho=p[0]*胸罩(''u>;')。density()+p[1]*胸罩(''d>;')。density();确保概率加为1
>;熵(rho)不是零,因为存在混合态
0.69314718055994529
>;rho=(br a(''u>;')+bra(''d>;')).n.密度(''br/>>;熵(rho)为零,因为所有电子都是在"u+d"状态下制备的。使用后运算。n.

von neumann**熵**是
:数学:`s=-\sum-i(p-i log(p-i)),其中:数学:`p-i`是密度矩阵的特征值。
熵本质上是量子态测量中的随机性。它可以应用于任何纯态或混合态的密度矩阵。(a
纯态的熵为零。)

**多粒子态**
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

多粒子态在由hilbert空间的kronecker积形成的空间中。因为多粒子量子态可以是混合态,与经典的
系统(仅在:math:`n`dimensional space)相比,
有更多的可能状态向量(:math:`2^n`dimensional vector space)

这是一种对我们来说很重要的方法:python
>
>>>>>gt;u u=u>u>u
>>>>gt;d d=ket(或ket(dd)或ket(dd)
>;s=(d**u**u+u**u+d**u+d**d**d**d**u+d**d**u)s=(d**u**u+d**d**u)。n
>>>s
>0.57735;udu>0.57735;duu>0.57735;duu>0.57735;duu>0.57735;ddu>0.57735;d d gt;

多粒子算符与kronecker积类似。密码:python

>>>gt;s2x=sx=sx
>;s2x
[[0 0 0 0 0 1]
[0 0 0 0 1 0]
[0 0 0 0 0 1 0 0 0 0 0 0 0]
[0 0 1 0 0 0 0 0 0 0]

**部分追踪**
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>

>>多粒子态的密度矩阵为:数学:`2^N`。部分
轨迹是形成粒子子集密度矩阵的一种方法。追踪出粒子的"数学:'m'产生一个:数学:'2^{n-m}乘以2^{n-m}密度矩阵。
部分追踪在分析多粒子态的许多方面都很重要,
包括评估纠缠。

代码:python

>;>sing=(u**d-d**u).n
>;>rho=sing.density()
>;>rho
matrix([[0.,0。,0。,0。],
[0.,0.5,-0.5,0。],
[0.,-0.5,0.5,0。],
[0.,0。,0。,0。]])
>;>rhoa=ptrace(rho,[1])跟踪粒子1("bob"),得到粒子0("alice")密度
>;矩阵([[0.5,0)。],
[0.,0.5]])

**纠缠态**
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

粒子,你可以测试它的纠缠度:

…代码::python

>;>sing=(u**d-d**u).n
>;>sing.angledd()
true
>;>(u**u).angled()
false

包括:
hadamard,not,swap,受控门,平方根门,移相门。

从qspin进口u,d,gate
>
>>>>>从qspin进口u,d,gate
>>;swap=gate('swap')
>>;swap*(u**d)
du>;
>;h=gate('hadamard')
>;h*u
>0.707>>0.707>>0.707>>0.707>>d>;
>>>;h*dd>d>d
>>>>>;hd>d>d>d>d>d>d>d>d>d>d>d>d>d

0.707| u>;-0.707 d>;

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
在数据库中存储密码的java加密方法   java正则表达式否定整个正则表达式   java为什么要得到这个Hashmap输出?   看不到玻璃鱼爪哇SE 6   类对象包装器中的Java基本数据字段   java从文本文件中读取整数并存储到单独的变量中?(扫描仪)   优化大型Java数据阵列的处理和管理   如何使用Java XML包装类创建对象   java为ExecutorService invokeAll()创建包装器   java如何在Android Studio 1.0.0中设置Facebook SDK?获取SDK位置未找到错误   java在尝试从线程启动动画时调用了FromErrorThreadException   java根据哈希确认文件内容   通过java在neo4j中获取索引值相同的所有节点?   java为什么我的Validare邮政编码(布尔)程序返回false?   java会话自动从servlet/jsp生成,尽管存在以下条件:<%@page session=“false”%>   创建新LANsocket时拒绝java连接   java如何多线程更新由sql代码更新的数据库?   安卓 Java使用类作为集合来添加项   安卓为什么我的清单文件不声明java包?