将 Python 提升到新的水平

简要介绍使用 QuTiP 模拟量子系统。

随着《Linux Journal》的复兴,我想让本文也实现一次量子跃迁(双关语),并探讨一下量子计算。正如并行编程的初期一样,量子计算的下一个障碍是开发能够完成有用的工作,同时又能充分利用这种新硬件潜力的算法。

然而不幸的是,大多数人手边没有方便的量子计算机来开发代码。绝大多数人需要在模拟系统上开发想法和算法,这对于这种基础算法设计来说已经足够了。

那么,让我们来看看可用于模拟量子系统的 Python 模块之一——特别是 QuTiP。在这篇短文中,我将重点介绍如何使用代码的机制,而不是量子计算的理论。

第一步是安装 QuTiP 模块。在大多数机器上,您可以使用以下命令安装它:


sudo pip install qutip

这对大多数人来说应该都适用。如果您需要一些最新最强大的功能,您可以随时通过访问 主页 从源代码安装 QuTiP。

安装完成后,启动一个 Python 实例并输入以下 Python 命令,以验证一切正常:


>> from qutip import *
>> about()

您应该看到有关版本号和安装路径的详细信息。

第一步是创建一个量子比特。这是用于量子计算的最简单的数据单元。以下代码为双能级量子系统生成一个量子比特:


>> q1 = basis(2,0)
>> q1
   Quantum object: dims = [[2], [1]], shape = (2, 1), type = ket
   Qobj data =
   [[ 1.]
    [ 0.]]

就其本身而言,这个对象并没有太多作用。当您开始对这样的对象应用算符时,模拟就开始了。例如,您可以应用 sigma plus 算符(它等效于量子态的升算符)。您可以使用其中一个算符函数来做到这一点:


>> q2 = sigmap * q1
>> q2
   Quantum object: dims = [[2], [1]], shape = (2, 1), type = ket
   Qobj data =
   [[ 0.]
    [ 0.]]

正如您所看到的,从该算符的应用中,您得到了零向量作为结果。

您可以将多个量子比特组合成一个张量对象。以下代码展示了如何实现这一点:


>> from qutip import *
>> from scipy import *
>> q1 = basis(2, 0)
>> q2 = basis(2,0)
>> print q1
   Quantum object: dims = [[2], [1]], shape = [2, 1], type = ket
   Qobj data =
   [[ 1.]
    [ 0.]]
>> print q2
   Quantum object: dims = [[2], [1]], shape = [2, 1], type = ket
   Qobj data =
   [[ 1.]
    [ 0.]]
>> print tensor(q1,q2)
   Quantum object: dims = [[2, 2], [1, 1]], shape = [4, 1], type = ket
   Qobj data =
   [[ 1.]
    [ 0.]
    [ 0.]
    [ 0.]]

这会将它们耦合在一起,并且算符会将它们视为单个对象。这使您可以开始构建由多个量子比特和更复杂的算法组成的系统。

当您开始处理更复杂的算法时,可以使用更通用的对象和算符。您可以使用以下构造函数创建基本量子对象:


>> q = Qobj([[1], [0]])
>> q
   Quantum object: dims = [[2], [1]], shape = [2, 1], type = ket
   Qobj data =
   [[1.0]
    [0.0]]

这些对象有几个可见的属性,例如形状和维度数,以及存储在对象中的实际数据。您可以像使用任何其他 Python 对象一样,在常规算术运算中使用这些量子对象。例如,如果您有两个泡利算符 sz 和 sy,您可以创建一个哈密顿量,如下所示:


>> H = 1.0 * sz + 0.1 * sy

然后您可以对这个复合对象应用运算。您可以使用以下命令获得迹:


>> H.tr()

在这种特殊情况下,您可以使用 eigenenergies() 方法找到给定哈密顿量的本征能量。


>> H.eigenenergies()

还有几个辅助对象可用于为您创建这些量子对象。前面使用的 basis 构造函数就是其中一个辅助对象。还有其他辅助对象,例如 fock()coherent()

因为您将处理的状态远远超出您日常经验,所以可能很难理解任何特定算法中正在发生的事情。因此,QuTiP 包含一个非常完整的可视化库,以帮助您直观地看到代码中正在发生的事情。为了初始化图形库,您可能需要在程序的顶部添加以下代码:


>> import matplotlib.pyplot as plt
>> import numpy as np
>> from qutip import *

从这里,您可以使用 sphereplot() 函数生成轨道的三维球面图。plot_energy_levels() 函数接受给定的量子对象并计算该对象的关联能量。除了能量之外,您还可以使用 plot_expectation_values() 函数绘制给定系统的期望值。

在使用 QuTiP 方面,我只介绍了冰山一角。它具有允许您模拟整个量子系统并观察它们随时间演化的功能。希望这篇短文能够突出显示一个可供您使用的工具,如果您决定开始研究量子系统和计算。

加载 Disqus 评论