量子化学与计算爱好者指南-全-
量子化学与计算爱好者指南(全)
原文:
zh.annas-archive.org/md5/1d80b1f049d7b65c786811d17773ecc2译者:飞龙
前言
“学习就是发现你已经知道的东西。做就是证明你知道。教学就是提醒其他人他们也和你一样知道。你们都是学习者、实践者、教师。”
——理查德·巴赫

图 0.1 – 学习量子计算和量子化学 [作者]
本书旨在揭示量子化学和计算的秘密,讨论基于当前限制的量子技术未来,展示当前量子理论实现的实用性和不足,并分享我们对这个主题的热爱。
本书不是传统意义上的量子化学或量子计算展示,而是通过量子力学公设的说明,特别是通过 Python 代码和开源量子化学软件包的展示,解释这两个主题如何交织在一起。
量子化学在工业中有许多应用,从药物设计到能源创造,再到近年来量子计算的发展。有了足够的量子化学和量子力学公设的知识,我们可以克服人类面临的一些主要障碍,并产生积极的影响。我们希望你能学到足够的细节,成为未来新和有生产力的解决方案的一部分。
我们的目标读者
欢迎所有类型的读者。然而,从中受益最大的是那些在学习的早期阶段对化学和计算机科学感兴趣的人;高中生和早期大学生,或者想要获取与计算相关的量子化学背景的专业人士,无论是从算法还是硬件的角度来看。我们还总结了与解决化学问题相关的有用数学和微积分。这些主题将吸引对量子计算化学和计算职业感兴趣的来自各个行业垂直领域的读者。
你将站在激动人心的前沿,有机会扩展你的想法并开始进行你的模拟实验。
量子化学的快速应用路径
我们选择以这种方式撰写这本书,以便为好奇的读者揭示量子概念的基础。本书通过描述量子力学的五个公设,介绍了量子化学概念的基础,包括这些概念如何与量子信息理论相关联,以及使用 Python、SimPy [Simpy]、QuTiP [QuTiP]、开源量子化学软件包 PySCF [PySCF]、ASE [ASE_0]、PyQMC [PyQMC]、Psi4 [Psi4_0]和 Qiskit [Qiskit]代码的原子和分子系统的基本编程示例。具备 Python 的入门级理解就足以阅读代码,并且只需要一个浏览器就可以访问 Google Colaboratory 并运行我们提供的云中的配套 Jupyter 笔记本。每一章都包含与历史名言相关的量子概念的艺术渲染。
在 1990 年代、2000 年代和 2010 年代,计算化学软件包的开发取得了惊人的进步,最近还有 Qiskit Nature [Qiskit_Nature] [Qiskit_Nat_0]。我们概述并介绍了以现代方式讨论的基本量子化学概念,并将这些概念与量子信息理论和计算联系起来。我们使用 Python、PySCF 和 Qiskit Nature 进行说明。
量子化学
量子力学的根本原理和五个公设直接影响到材料研究和计算化学,用于寻找新药和催化剂,使化学物质从一种形式转换为另一种形式的转换过程更加高效和清洁。量子化学对于设计利用原子和/或离子的特性的未来量子计算机也是必不可少的。然而,量子化学仍然是一个难以捉摸的话题,似乎需要很多年才能掌握。
我们认为,传统上对这一主题的长期成就与对该主题感知的复杂性以及为了提高传统计算的可访问性和可用性而做出的历史近似直接相关。有了近似,并且科学界广泛接受这是唯一的前进方式,一些基本概念常常被忽视、误解并被从依赖这些想法的学科中排除。我们认为这是一个分享我们对量子化学的热爱,以充分发挥其潜力,使这一主题更加友好和易于接近的机会。
我们将分享足够详细的解释,以便您理解历史上确立的限制。例如,我们提出了适用于所有基本粒子的泡利不相容原理的通用公式,这也适用于复合粒子,而许多教科书对此解释不足。
量子故事还有更多内容,但作为一本面向好奇者的第一本书,内容太多。因此,我们计划写下一本书,扩展那些尚未在科学界广泛应用的尖端量子思想。
如何导航本书
我们建议您按照章节的顺序阅读,并逐步掌握本书后面将有用到的概念、方法和工具。
-
第一章**,介绍量子概念,介绍了量子化学和量子计算的历史,并介绍了自然的基本构建块:粒子与物质、光与能量,以及量子数。
-
第二章**,量子力学的公设,为量子物理学的非专业人士提供了理解本书内容所需的量子力学和量子信息理论的概念、定义和符号。
-
第三章**,量子电路计算模型,介绍了量子电路计算模型和 Qiskit Nature,这是一个开源框架,提供了计算分子基态能量、激发态和偶极矩的工具。
-
第四章**,分子哈密顿量,介绍了分子哈密顿量,建模分子的电子结构和费米子到量子比特的映射。
-
第五章**,变分量子本征求解器(VQE)算法,展示了求解分子基态的过程,重点关注氢分子,并使用 Qiskit Nature 的变分量子本征求解器(VQE)算法进行说明。
-
第六章**,超越 Born-Oppenheimer,展示了尚未普及的超越 Born-Oppenheimer 方法。
-
第七章**,结论,是下一本书的开篇。
-
第八章**,参考文献,提供了每个章节末尾给出的所有参考文献的汇总列表。
-
第九章**,术语表,提供了一种方便的查找术语的方法。
-
附录 A,准备数学概念,通过 Python 代码示例介绍了概念。
-
附录 B,在云中使用 Jupyter 笔记本,解释了如何使用云上的免费环境来运行我们提供的配套 Jupyter 笔记本。
-
附录 C,商标,列出了本书中使用的产品所有商标。
要充分利用本书
以下软件和硬件列表可以帮助您访问 Google Colaboratory(Colab),这是一个完全在云上运行的免费 Jupyter Notebook 环境,提供在线共享的 Jupyter 笔记本实例,无需下载或安装任何软件:

下载示例代码文件
您可以从 GitHub 下载本书的示例代码文件github.com/PacktPublishing/Quantum-Chemistry-and-Computing-for-the-Curious。如果代码有更新,它将在 GitHub 仓库中更新。
要下载配套笔记本的完整版本,您可以扫描以下二维码或访问提供的链接进行下载。

account.packtpub.com/getfile/9781803243900/code
我们还有来自我们丰富的图书和视频目录的其他代码包,可在github.com/PacktPublishing/找到。查看它们!
使用的约定
本书使用了多种文本约定。
文本中的代码:表示文本中的代码单词、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 昵称。以下是一个示例:“量子电路中没有循环,但我们可以有一个经典循环来附加一个量子子电路。在 Qiskit 中,我们使用QuantumRegister类创建量子比特寄存器,使用QuantumCircuit类创建量子电路。”
代码块设置如下:
q = QuantumRegister(2)
qc = QuantumCircuit(q)
qc.h(q[0])
qc.cx(q[0], q[1])
qc.draw(output='mpl')
任何命令行输入或输出都应如下编写:
Mo: 1s² 2s² 2p⁶ 3s² 3p⁶ 4s² 3d¹⁰ 4p⁶ 5s² 4d⁴
联系我们
我们始终欢迎读者的反馈。
一般反馈:如果您对本书的任何方面有任何疑问,请通过电子邮件发送至 customercare@packtpub.com,并在邮件主题中提及书名。
勘误:尽管我们已经尽最大努力确保内容的准确性,但错误仍然可能发生。如果您在这本书中发现了错误,我们将非常感激您能向我们报告。请访问 www.packtpub.com/support/errata 并填写表格。
盗版:如果您在互联网上发现我们作品的任何非法副本,我们将非常感激您能提供位置地址或网站名称。请通过电子邮件发送至 copyright@packt.com 并附上材料的链接。
如果您有兴趣成为作者:如果您在某个领域有专业知识,并且您有兴趣撰写或为本书做出贡献,请访问 authors.packtpub.com。
参考文献
[ASE_0] 原子模拟环境 (ASE),wiki.fysik.dtu.dk/ase/index.html
[NumPy] NumPy:初学者的绝对基础,numpy.org/doc/stable/user/absolute_beginners.html
[Psi4_0] Psi4 手册主索引,psicode.org/psi4manual/master/index.html
[PyQMC] PyQMC,一个实现实空间量子蒙特卡罗技术的 Python 模块,github.com/WagnerGroup/pyqmc
[PySCF] 基于 Python 的化学模拟框架 (PySCF),pyscf.org/
[Qiskit] Qiskit,qiskit.org/
[Qiskit_Nat_0] Qiskit_Nature, github.com/Qiskit/qiskit-nature/blob/main/README.md
[Qiskit_Nature] 介绍 Qiskit Nature,Qiskit,Medium,2021 年 4 月 6 日,medium.com/qiskit/introducing-qiskit-nature-cb9e588bb004
[QuTiP] QuTiP,在 Bloch 球上绘图,qutip.org/docs/latest/guide/guide-bloch.html
[SimPy] SimPy 是 Python 的离散事件模拟,simpy.readthedocs.io/en/latest
分享您的想法
一旦您阅读了《好奇者的量子化学与计算》,我们非常期待听到您的想法!请点击此处直接访问亚马逊评论页面并分享您的反馈。
您的评论对我们和科技社区都非常重要,并将帮助我们确保我们提供高质量的内容。
第一章:介绍量子概念
“在街头玩耍的孩子们中,有些人可以解决我物理学中最顶尖的一些问题,因为他们拥有我早已失去的感觉感知模式。”
– 罗伯特·J·奥本海默

图 1.1 – 女孩看着原子图像 [改编自 Getty 授权的图像]
预测尚未通过实验测量的物质、材料和物质的行为是一个令人兴奋的前景。现代计算工具使您能够在免费资源上开展虚拟实验。如果您希望得到与自然运作方式相匹配的结果,理解化学运作的现代模型是至关重要的。
经典物理学在预测带有牛顿万有引力定律的球的轨迹或太阳周围的行星轨迹方面表现良好。然而,通过量子物理学可以找到对自然(尤其是化学)的更准确描述,量子物理学包含了量子力学公设,这是量子化学和量子计算的基础。为了获得对化学预测的更深入理解,需要设计量子化学算法以实现高精度。仅仅编程近似方法并在量子计算机上运行以实现比在经典计算机上实现的相同方法更高的精度是不够的。
量子物理学的公设不被认为是自然法则,也无法通过数学或实验来证明;相反,它们只是对粒子和物质行为的指导方针。尽管这些公设的制定花费了几十年,而它们被更广泛的科学界理解则花费了一个世纪,但它们仍然是预测物质和粒子性质的有力工具,是量子化学和计算的基础。
本章并不是对整个量子物理历史的全面介绍;然而,我们将提及一些关键人物,并介绍我们认为在 20 世纪最具影响力的主题。我们讨论了粒子的基本概念和物质的组成,光的物理性质及其行为,以及能量及其与物质的关系。我们将这些概念扩展到与某些类型的化学应用和性质相关的量子数,这些性质可以专门用于量子计算的发展和预测物质状态。
在本章中,我们将涵盖以下主题:
-
第 1.1 节,理解量子化学和力学的历史
-
第 1.2 节,粒子和物质
-
第 1.3 节,量子数和物质的量子化
-
第 1.4 节,光和能量
-
第 1.5 节,量子计算简史
-
第 1.6 节,复杂度理论洞察
技术要求
本章的配套 Jupyter 笔记本可以从 GitHub 下载,网址为 github.com/PacktPublishing/Quantum-Chemistry-and-Computing-for-the-Curious,已在 Google Colab 环境中测试,该环境免费且完全在云端运行,以及 IBM Quantum Lab 环境中。请参阅附录 B** – 利用云端的 Jupyter 笔记本,获取更多信息。
1.1. 理解量子化学和力学的历史
了解 20 世纪早期量子化学的发展对于理解量子力学的公设是如何被发现的是非常重要的。它还将帮助你掌握使我们能够实现科学里程碑的主要近似。我们将提及本书后续章节中将讨论和描述的概念,所以如果你不理解这些想法或含义,请不要担心。我们只是想简单地使用量子概念的术语,为本书后面部分介绍的量子力学的五个公设提供一些背景。

图 1.2 – 罗伯特·J·奥本海默 – 爱德华·韦斯科特(美国政府摄影师),公有领域,via Wikimedia Commons
量子力学在科学界引起颠覆性讨论已有超过一个世纪。量子力学最著名的争议是它在二战期间催生了原子弹。罗伯特·J·奥本海默(图 1.2),被认为是原子弹之父,也是至今为止最广泛使用且最有影响力的近似方法之一:1926 年的玻恩-奥本海默(BO)近似的发明者 [Intro_BOA_1] [Intro_BOA_2]。这将在第六章**,超越玻恩-奥本海默中详细介绍。BO 近似假设原子核的运动与电子的运动是解耦的,并导致了至今为止大多数计算技术和软件包的形成,包括量子计算中使用的量子比特的基本设计。
到奥本海默与他的学术导师马克斯·玻恩一起发表关于 BO 近似的博士论文时,许多科学家已经为量子化学做出了贡献。量子力学一词首次出现在玻恩 1924 年的论文关于量子力学 [Born] 中。量子力学在 1925 年至 1926 年间形成,其他主要贡献来自以下人士:
-
马克斯·普朗克,因普朗克常数和普朗克关系(第 1.4 节,光和能量)
-
路易·德布罗意,因德布罗意波长(第 1.3 节,量子数和物质的量子化)
-
魏纳·海森堡,因海森堡不确定性原理(第 1.4 节,光和能量)
-
艾尔温·薛定谔因薛定谔方程(第 1.4 节,光和能量)。
-
保罗·狄拉克因狄拉克方程,一个适用于费米子系统的相对论波动方程,以及狄拉克符号,也称为括号符号(第 1.3 节,量子数和物质的量子化)。
-
沃尔夫冈·泡利因泡利不相容原理(第 1.3 节,量子数和物质的量子化)。
这些科学家参加了第 5 届索尔维量子力学会议(图 1.3),以及其他未讨论的非常具有影响力的科学家。这张图片捕捉了第一代对 20 世纪产生巨大影响的量子科学家。

图 1.3 – 1927 年索尔维量子力学会议。图像属于公共领域
由于泡利不相容原理(PEP),BO 近似是一个必要的发展,该原理于 1925 年提出。泡利描述了 PEP 对电子的描述,它表明两个相同原子的电子不可能同时具有以下四个量子数的相同值:
,主量子数;
,角动量量子数;
,磁量子数;和
,自旋量子数。他的工作已进一步扩展到玻色子粒子。PEP 导致一种特定的计算复杂性,从而引发了 BO 近似的必要性;有关更多详细信息,请参阅第 1.6 节,复杂性理论洞察。我们将在第 1.3 节,量子数和物质的量子化中详细介绍量子量,并描述不同粒子类型的 PEP。
上述思想领袖群体的快速发展得益于其前辈们的重要基础工作以及他们与氢原子相关的发现——周期表中所有元素中最简单的元素:
-
约翰·巴尔末于 1885 年发现了巴尔末发射线系列[巴尔末系列]。
-
约翰内斯·里德堡于 1888 年推广了巴尔末方程,适用于氢的所有跃迁[化学光谱]。
-
理查德·利曼从 1906 年到 1914 年发现了氢原子紫外光谱线的利曼系列[利曼系列]。
-
弗里德里希·帕申于 1908 年在红外波段发现了帕申光谱线[化学光谱]。
氢原子的结构将在第 1.4 节,光和能量中讨论,并在第五章“变分量子本征值求解器(VQE)算法”中进行计算概述。
约翰内斯·里德伯格的工作导致了光谱学中使用的根本常数的定义。1908 年,里德伯格与沃尔特·里茨并肩工作,开发了关于频率和元素光谱线之间关系的 Rydberg-Ritz 组合原理[Rydberg-Ritz]。原子的 Rydberg 状态用于量子计算,这在第三章**量子计算电路模型中进行了讨论。
在 Rydberg-Ritz 组合原理发展一年后,Ritz 开发了一种解决特征值问题的方法[Rayleigh–Ritz],这种方法在今天的计算化学领域得到广泛应用,被称为Rayleigh-Ritz 变分定理。这种方法是第五章**变分量子本征求解器(VQE)算法中详细讨论的变分量子本征求解器(VQE)的灵感来源。
与约翰·威廉·斯特拉特,第三代雷利男爵约翰·威廉·斯特拉特对 Rayleigh-Ritz 变分方法的机械测试相结合,尽管这种方法是由 Ritz 编写和公式的,但因其与光的 Rayleigh 散射而闻名,这种方法被称为 Rayleigh-Ritz 方法。简而言之,它允许对特征值问题的解进行近似。他的工作导致了将叠加原理应用于近似总波函数的方法;这种数学展开是量子力学中描述的第二章量子力学的公理之一。
在对氢原子有了更好的理解之后,1913 年,尼尔斯·玻尔试图用关于量化和量子理论的基本概念更详细地描述原子的结构[Bohr_1] [Bohr_2]。他因玻尔模型而获得了 1922 年的诺贝尔奖。在他的论文中,许多文章验证、预测和评估了小原子(Z < 7)的非常准确的 Rydberg 状态以及小分子的转动-振动(rovibrational)状态。玻尔的原子模型描述了从第二、第一和第三原子电子层开始的电子能级跃迁,即巴耳末系、莱曼系和帕邢系,以及之前发现的相应的氢发射光谱。
在 20 世纪 30 年代,林纳斯·鲍林和埃德加·布莱特·威尔逊小爵士普及了量子力学,正如它目前应用于化学一样[鲍林]。鲍林最终在 1954 年获得了诺贝尔化学奖,后来在 1964 年,他因在量子力学方面的政治活动而获得了诺贝尔和平奖。
自从这些重大贡献以来,量子力学公理的发展至今一直保持大致相同。
多亏了经典计算机的发展和巧妙的计算方法,已经产生了许多计算化学软件包,以进一步加深我们对化学的理解。除了 瑞利-里茨变分定理 之外,还有一些显著的方法,例如 量子蒙特卡罗 (QMC) [QMC]、哈特里-福克 (HF) 方法、耦合簇 (CC) 和 密度泛函理论 (DFT) 等。在这本书中,我们将使用 Python 和开源量子化学软件包,如 PySCF、ASE、PyQMC、Psi4 和 Qiskit,在后续章节中展示一些这些方法。
在 20 世纪末,理查德·费曼(Richard Feynman)指出,量子概念可以用于量子计算 [Preskill_40y]。物理学家乔纳森·道林(Jonathan Dowling)和杰拉尔德·米尔本(Gerard Milburn)于 2002 年写道,我们已经进入了一个第二次量子革命,积极地在量子信息、量子传感、量子通信和模拟量子模拟中应用量子力学 [Dowling]。我们将在 第 1.5 节,量子计算简史 中总结量子计算的历史。这次第二次量子革命被视为一种利用物质和量子力学的公理来克服计算复杂性的方法。
问题变成了:在量子计算机中实施近似方法的目的何在?量子计算机是否应该帮助我们超越上述方法?我们打算在这本书中回答这些问题,特别是在 第六章“超越玻恩-奥本海默”中。
1.2. 粒子和物质
通常,粒子和物质具有三个独特的、不会改变的性质:质量、电荷和磁自旋。对于某些粒子,这些性质可能为零;否则,这些性质是实数,可以通过实验测量。质量只能为正,而电荷可以是正的或负的。
在以下小节中,我们将回顾基本粒子和复合粒子,包括费米子和玻色子。理解这些类型的粒子对于理解量子化学和量子计算的可能应用是基本的。
基本粒子
基本粒子要么是费米子,要么是玻色子 [Part_1]。术语“费米子”是由狄拉克提出的,他受到了物理学家恩里科·费米(Enrico Fermi)的启发。基本玻色子粒子是标准模型 [Std_model] 的一部分,并不一定参与量子化学,而是基本物理学的一部分。
电子 (
) 是与量子化学相关的主要基本费米子粒子。电子的质量为 9.1093837015 x 10-31 千克(kg) [电子质量] 和负一的电荷(-1)。电子的大小约为 10-15 厘米(cm)。在大多数计算方法模拟中,我们改变参考质量,使电子的质量等于 1,从而使计算更简单。还有μ子(
)和τ子(
)粒子,它们具有负一的电荷(-1),但比电子重得多。相关的反粒子,正电子(
)、反μ子(
)和反τ子(
),与它们的对应粒子质量相同,但电荷相反(+1)。标准的计算模型只能处理电子。最近的高级科学程序能够处理电子与μ子和τ子以及反粒子的替代。
物质结构的当前观点在图 1.4中展示,使用氢原子作为最简单的例子。我们在图像中描绘了夸克,但想了解更多关于这方面的知识,请访问 CERN [CERN_quark]。请注意,我们在原子核周围包含了一个模糊的电子云,并试图摆脱电子遵循明确轨迹的旧模型。
![图 1.4 – 氢原子的尺度结构 [作者]](https://github.com/OpenDocCN/freelearn-ds-zh/raw/master/docs/qnt-chem-comp-crs/img/B18268_Figure_1.4.jpg)
图 1.4 – 氢原子的尺度结构 [作者]
复合粒子
对量子化学和计算贡献最大的复合粒子是原子核、原子和分子,它们可以是费米子或玻色子。费米子和玻色子粒子遵循 PEP,这在第 1.3 节,量子数和物质的量子化中有更详细的讨论。
原子核
原子核的构成单元是核子。核子是质子和中子。原子核包含一个或多个质子和零个或多个中子,它们通过强核力结合在一起。质子和中子的大小约为~10-13 厘米(cm),而原子核的大小从~10-13 厘米到约~10-12 厘米。
质子带有一个正一的电荷(+1),其大小与电子相等,质量是电子的 1,836.15267343 倍 [质子-电子质量比]。
中子不带电,其质量是电子的 1,838.68366173 倍 [中子-电子质量比]。中子的质量略大于质子。
核子中的质子数量决定了周期表中元素的类型(图 1.6)。氢原子是唯一一个在其核中不含有中子的元素。元素的同位素是通过改变核内中子的数量来确定的。氢的同位素是氘和氚。同位素在量子化学中扮演着重要角色,因为它们的量子性质可以变化。这在计算化学中是一个重要方面,因为核效应在使用 BO 近似(在第六章**,超越玻恩-奥本海默)时会产生影响)。
原子
原子定义了大量物质的化学性质。原子是原子核和围绕核外运动的电子的组合。由于电子的数量等于质子的数量,原子没有整体电荷。原子的尺寸大约是 ~10^-8 cm。离子是带有净电荷的原子,这种电荷是通过失去或获得一个或多个电子获得的,无论是正电荷还是负电荷。原子同位素也可以失去或获得电子,并被视为离子。如果一个原子获得了电子,它将带有负电荷;相反,当它失去电子时,它将带正电荷。离子的尺寸可以变化。正离子被称为阳离子,负离子被称为阴离子。原子、同位素和离子是量子化学和计算的核心主题。
分子
分子是保持物质化学性质的最小单位。分子由两个或更多原子和/或原子的同位素组成。它们被认为是保持物质化学性质的最小构建块,这种性质在物质的多个分子中保持不变。分子也可以是离子,因为它们也可以失去和获得电子。分子是物质的最基本单位之一。
1.3. 量子数和物质的量子化
量子化是这样一个概念:物质、粒子以及其他物理量,如电荷、能量和磁自旋,只能具有某些可数的值。这些特定的可数值可以是离散的或连续的变量。离散值定义为在有限时间内可数的。连续值定义为在无限时间内可数的。一个量子系统是否是离散的还是连续的取决于物理系统或可观察的量。
我们将讨论与量子化学最相关的粒子:质子、中子、电子和氢原子。中子和质子构成了原子的核,并由强核力结合在一起,它们在核内没有可测量的角动量量子数。相反,自由质子和中子如果不在核内结合,则可以运动并具有角动量量子数。在核内,所有的质子和中子都会与它们的给定磁量子数耦合(或相加),使得核具有一个总磁量子数。这同样适用于自旋动量(这些粒子的自旋量子数
,每个都是 1/2)。一般来说,我们考虑核的整体磁和自旋动量量子数,而不是核中个别质子和中子的量子数。
原子中的电子
以下五个量子数对应于原子中的电子:
-
主量子数,
,描述了电子在原子壳层中的能量水平或位置,并从 1 开始编号,直到包含该原子最外层电子的壳层。技术上,
可以取从 1 到无穷大的值,因此它是一个连续的量子数。然而,当电子被激发到更高的
值,并从原子中分离出来时,它就被认为是自由电子,也就是离子。这个过程称为电离,此时
被认为是离散的。 -
角动量量子数,
,也称为轨道量子数或方位量子数,描述了电子子壳层,并通过以下关系给出轨道角动量的量级:
。在化学和光谱学中,
被称为
轨道,
是
轨道,
是
轨道,
是
轨道。技术上,在
轨道之外还有更多的轨道,即
、
等,它们的能量水平更高。 -
磁量子数,
,描述了电子在其子壳层中的能量水平以及电子轨道的方向。它可以取从
开始的整数值。 -
自旋量子数,
,对于每种粒子类型都不同,并且没有经典的对立物来描述它是什么。自旋量子数描述了某种粒子类型的固有自旋动量;对于电子来说,它等于 1/2。 -
自旋投影量子数,
,给出了自旋动量
沿指定轴的投影,在给定的空间方向上可以是“自旋向上”(+½)或“自旋向下”(-½)。在量子计算中,这个方向被定义为
-轴。
波函数和泡利不相容原理
波函数是一种数学工具,用于描述粒子和物质的态、运动以及物理性质。这个概念是量子力学的第一原理。我们将在第二章“量子力学的原理”中详细讨论这一点。波函数的变量是之前描述的量子数,以及位置和时间。泡利不相容原理确保了给定系统的完整波函数是完整的,并且对于费米子、玻色子和复合粒子是不同的。
费米子
在 1925 年,沃尔夫冈·泡利提出,在单个原子中,没有两个电子可以拥有完全相同的量子数集,
,
,
, 和
。这一原理通过指出只有电子波函数的反对称排列对是允许的得到了补充 [Kaplan] [Dirac_2]。反对称指的是在将排列算符应用于波函数时,波函数会得到一个负号(-)。
玻色子
相同玻色子系统的唯一可能状态是总波函数为对称的状态 [Kaplan]。对称指的是在将排列算符应用于波函数时,波函数会得到一个正号(+)。
复合粒子
对于所有基本粒子的泡利不相容原理(PEP)的以下一般公式也适用于复合粒子 [Kaplan]:具有自旋
的相同粒子系统的唯一可能状态是总波函数对于整数值
(玻色-爱因斯坦统计)是对称的,而对于半整数值
(费米-狄拉克统计)是反对称的。
狄拉克符号
狄拉克符号也称为括号符号。量子系统的状态,或波函数,由一个括号(
)表示,它是一个坐标和/或变量的列向量。括号(
)表示一个线性函数,它将每个列向量映射到一个复共轭的行向量。行向量(
)对列向量(
)的作用写为
。在第二章“量子力学的公设”中,我们将展示狄拉克符号如何与上述量子数相关联。狄拉克符号将在第三章“量子计算电路模型”中进一步解释和说明。
1.4. 光和能量
光和能量是物质行为的基本要素。在本节中,我们将概述光和能量如何与质量、动量、速度、波长和频率相关联。我们还将介绍氢原子的电子跃迁。
普朗克常数及其关系
1900 年,德国物理学家马克斯·普朗克通过假设辐射能量仅存在于与频率成比例的离散量子中,解释了黑体辐射的光谱能量分布。普朗克关系表明,光子能量(
)与其频率(
)成正比,与波长(
)成反比:
。
是普朗克常数,
6.62607015×10^-34 焦耳·赫兹^-1 (J·Hz^-1),其中赫兹被定义为秒的倒数(Hz = s^-1),
是光速,等于每秒 299,792,458 米(ms^-1)。
德布罗意波长
德布罗意波长公式将粒子的质量(
)、动量(
)和速度(
)与波长(
)联系起来:
,这是粒子表现出波动行为的尺度。
海森堡不确定性原理
不确定性原理与测量物理量的相关精度有关。我们使用标准差(
),或一组给定测量的平均方差来定义测量物理量的精度。不确定性原理断言了对从初始条件预测粒子某些物理量对的准确性的下限。你越准确地知道一个量,你对另一个量的了解就越少。
例如,动量 (
) 和位置 (
) 是一组遵循不确定性的物理量,如果你确切地知道一个粒子的位置,你对它的动量的了解就越少。相反,你对它的动量了解得越多,你对它确切位置的了解就越少。
位置的标准差 (
) 和动量的标准差 (
) 通过以下不等式相关联,
,其中
是约化普朗克常数。
原子和分子的能级
原子中不同电子能级之间的跃迁,或分子中不同振动或旋转能级之间的跃迁,是通过光子的吸收、发射和/或受激发射过程发生的。只有当光子的能量与初始和最终状态之间能量的确切差值相匹配时,才会发生跃迁。在原子中,与电子相关的能量是其轨道的能量。当原子被电离时,接近的能量状态称为瑞德伯状态。原子或分子轨道描述了在原子或分子中找到电子的概率。在最简单的原子中,当氢原子吸收光子时,电子会跃迁到更高的能级,例如从
到
。相反,当电子跃迁到较低的能级时,会发射光子,例如从
到
[Byjus]。
氢光谱
氢光谱已被划分为光谱线 [Chem_spectr]。
-
兰姆系对应于激发态
到
的跃迁。 -
巴耳末系对应于激发态
到
的跃迁。 -
帕邢系对应于激发态
到
的跃迁。 -
布拉特系对应于激发态
到
的跃迁。 -
普丰系对应于激发态
到
的跃迁。

图 1.5 – 氢的发射光谱
瑞德伯常数和公式
瑞德伯公式,也称为瑞德伯-里茨重组原理,计算元素光谱线的波长倒数 (
) [Chem_spectr]。

其中
是里德伯常数,
是原子序数,
是较低能级的轨道主量子数,
是较高能级的轨道主量子数。重原子的里德伯常数为
10,973,731.568160(21)米−1 (m−1) [Rydberg_R]。
电子排布
在 20 世纪 20 年代初,尼尔斯·玻尔和沃尔夫冈·泡利提出了构造原理(德语:Aufbauprinzip,建立原理),该原理指出,电子在填充较高能级的亚壳层之前,先填充最低能级的亚壳层。构造原理基于马德隆规则,该规则指出,电子按照增加的
顺序填充轨道,当两个轨道具有相同的
值时,它们按照增加的
顺序填充。用于书写电子排布的符号从能量级
开始,接着是原子轨道字母,最后是上标,表示轨道中电子的数量。例如,磷(P)的表示法是 1s² 2s² 2p⁶ 3s² 3p³。
使用马德隆规则计算原子元素的电子排布
以下 Python 程序使用马德隆规则计算了直到镭(N=104)的所有元素的电子排布。它源自 Christian Hill 在其网站“使用 Python 学习科学编程”上发布的程序,问题 P2.5.12 [Hill]。
设置原子符号列表
以下数组包含一个原子符号列表:
atom_list = ['H', 'He', 'Li', 'Be', 'B', 'C', 'N', 'O', 'F', 'Ne', 'Na','Mg', 'Al', 'Si', 'P', 'S', 'Cl', 'Ar', 'K', 'Ca', 'Sc', 'Ti', 'V', 'Cr', 'Mn','Fe', 'Co', 'Ni', 'Cu', 'Zn', 'Ga', 'Ge', 'As', 'Se', 'Br', 'Kr', 'Rb', 'Sr','Y', 'Zr', 'Nb', 'Mo', 'Tc', 'Ru', 'Rh', 'Pd', 'Ag', 'Cd', 'In', 'Sn', 'Sb','Te', 'I', 'Xe', 'Cs', 'Ba', 'La', 'Ce', 'Pr', 'Nd', 'Pm', 'Sm', 'Eu', 'Gd','Tb', 'Dy', 'Ho', 'Er', 'Tm', 'Yb', 'Lu', 'Hf', 'Ta', 'W', 'Re', 'Os', 'Ir','Pt', 'Au', 'Hg', 'Tl', 'Pb', 'Bi', 'Po', 'At', 'Rn', 'Fr', 'Ra', 'Ac', 'Th','Pa', 'U', 'Np', 'Pu', 'Am', 'Cm', 'Bk', 'Cf', 'Es', 'Fm', 'Md', 'No','Lr','Rf']
设置原子轨道字母列表
以下代码块初始化了在第 1.3 节,量子数和物质的量子化中介绍的轨道列表:
l_orbital = ['s', 'p', 'd', 'f', 'g']
按照对应轨道填充顺序设置元组列表
以下代码块初始化nl_pairs为用于计算所有原子元素电子排布的元组列表。
nl_pairs = []
for n in range(1,8):
for l in range(n):
nl_pairs.append((n+l, n, l))
nl_pairs.sort()
print(nl_pairs[:9])
print(nl_pairs[9:18])
print(nl_pairs[18:len(nl_pairs)])
这里是结果:

图 1.6 – 按照对应轨道填充顺序的元组列表
使用 1s 轨道初始化包含电子的轨道列表
以下代码块初始化这些变量:
-
nl_index:nl_pairs列表中子壳层的索引。 -
n_elec:当前子壳层中电子的数量。 -
config:电子排布,一个数组数组。在这些数组中的每一个,第一个是一个字符串连接的能量级
和原子轨道字母,第二个是显示在上标中的轨道中电子的数量。 -
el_config:电子排布字典。
nl_idx, n_elec = 0, 0
n, l = 1, 0
config = [['1s', 0]]
el_config = {}
superscript函数返回 0 到 9 的上标整数:
def superscript(n):
return "".join(["⁰123⁴⁵⁶⁷⁸⁹"[ord(c)-ord('0')] for c in str(n)])
此代码计算所有原子元素的电子排布:
for element in atom_list:
n_elec += 1
if n_elec > 2*(2*l+1):
# This subshell is full: start a new subshell
nl_idx += 1
_, n, l = nl_pairs[nl_idx]
config.append(['{}{}'.format(n, l_orbital[l]), 1])
n_elec = 1
else:
# Add an electron to the current subshell
config[-1][1] += 1
# Building configuration string from a list of orbitals and n_elec
el_config[element] = ' '.join(['{:2s}{:1s}'.format(e[0],
superscript(e[1])) for e in config])
此代码打印出前五个原子元素的电子排布:
for element in atom_list[:5]:
print('{:2s}: {}'.format(element, el_config[element]))
这里是结果:
H: 1s¹
He: 1s²
Li: 1s² 2s¹
Be: 1s² 2s²
B: 1s² 2s² 2p¹
图 1.7 – 前五个原子元素的电子排布
此代码打印出元素钼(Mo)的电子排布:
element = 'Mo'
print('{:2s}: {}'.format(element, el_config[element]))
这里是结果:
Mo: 1s² 2s² 2p⁶ 3s² 3p⁶ 4s² 3d¹⁰ 4p⁶ 5s² 4d⁴
图 1.8 – 元素钼的电子排布
薛定谔方程
薛定谔方程可以用来描述量子力学系统的动力学(演化)或静态(定态)状态。对于动力学,薛定谔方程为:
,其中
是虚数单位(
),
是时间的导数,
是哈密顿算子(一个考虑该系统总能量(动能和势能之和)的可观测量),而
是量子系统的状态向量(或波函数),作为时间的函数(
)。时间无关的薛定谔方程可以写成如下,即静态:
,其中
是能量本征值,而
是量子系统的状态向量,不是时间的函数。
氢原子中电子波函数的概率密度图
原子或分子的电子排布是根据第 1.3 节,量子数和物质的量子化中描述的量子数来描述的,可以用概率云来表示。图 1.9显示了氢原子中电子在不同能级(主量子数高达 4)的波函数的概率密度图。我们将在第二章**,量子力学的公设中更详细地描述为什么这些图像看起来是这样的。

图 1.9 – 氢原子密度图。每个图表示(
,
,
)。版权:[PoorLeno]。图像属于公有领域
轨道近似是可视化具有两个或更多电子的化学物种电子轨道的方法 [Orb_Approx]。
现在我们已经了解了量子化学的所有关键概念,你拥有了理解这与量子计算相关的基础。
1.5. 量子计算简史
第一次革命是在 20 世纪初提出公理。在第一次革命之后,1936 年,艾伦·图灵创建了一个自动机的理论模型,现在被称为图灵机,这为计算机科学奠定了理论基础。1980 年,保罗·贝尼奥夫发表了一篇论文,描述了图灵机的量子力学模型 [Benioff]。有了这个和量子化学的进步,量子计算机的基础已经奠定。
量子计算第一次在更广泛的科学社区中被讨论是在 1981 年 5 月,理查德·费曼在麻省理工学院(MIT)举办的名为“计算物理”的会议上发表了主题演讲。这次主题演讲讨论了利用量子物理来构建量子计算机 [Preskill_40y]。在 2021 年 5 月,会议周年之际,IBM 组织了一场名为 QC40:计算物理会议 40 周年纪念活动 [QC40],庆祝第二次量子革命。
在第一次会议几十年前,1964 年,约翰·斯图尔特·贝尔发表了一篇论文《关于爱因斯坦-波多尔斯基-罗森悖论》。他证明了量子力学中没有局部隐变量 [Bell_1],这是一个重要的进展,为量子信息理论铺平了道路,并在量子计算和量子通信中得到了应用。这是利用量子优势的基础。
建立在量子计算这些想法的基础上,1985 年,大卫·德奇发表了一篇论文,为量子计算理论奠定了基础。他提出了丘奇-图灵-德奇原理,即通用计算设备可以模拟每一个物理过程。他还与理查德·约萨在 1992 年发表了德奇-约萨算法,这是第一个比任何可能的确定性经典算法指数级更快的量子算法的例子 [Deutsch-Jozsa]。
彼得·肖尔在 1994 年创建了一个多项式时间量子计算机算法,用于整数分解,现在被称为肖尔算法 [Shor],在 1994 年。1996 年,伊曼纽尔·克尼尔和雷蒙德·拉法拉梅开发了一般量子纠错理论 [Knill]。2000 年,大卫·P·迪文森佐讨论了物理实现量子计算的五个要求以及与量子通信相关的两个更多要求 [DiVincenzo]。2001 年,IBM 研究人员发表了一项关于肖尔算法的实验实现 [Vandersypen]。
在 2014 年,由主要作者 Alberto Peruzzo 等人发表在《自然通讯》杂志上的一篇文章介绍了混合变分量子本征求解器(VQE)算法,用于寻找分子的基态能量(最低能量)的估计值 [VQE_1]。请记住,变分方法在第 1.1 节,理解量子化学和力学的历史中提到过。IBM 量子团队在 2017 年使用 VQE 算法模拟了氢化锂分子的基态能量 [VQE_2]。VQE 算法在多个平台上可用;例如,Qiskit,它允许在多种量子处理器和模拟器上进行实验,本书中就使用了它。到目前为止,在本书出版时,还没有任何声明称 VQE 算法在基于第一原理(从头计算)的计算化学中优于经典超级计算机。
2019 年 10 月 23 日,谷歌 AI 量子硬件的首席科学家 John Martinis 和量子计算理论的首席科学家 Sergio Boixo 在《自然》杂志上发表了一篇名为使用可编程超导处理器实现量子霸权 [Arute] 的文章,其中提出了一个有争议的主张和建议。量子霸权是一个实验证明,表明量子计算设备可以执行特定计算,而经典计算机在合理的时间内无法完成。
在当前的噪声中等规模量子(NISQ)时代,越来越多的学术界和工业界参与者,拥有庞大的资金项目,参与所谓的展示量子优势的竞赛,无论是计算速度的提升、能源成本的降低,还是两者兼而有之。当前的量子处理器存在一些限制,如量子比特数量太少和电路深度有限。目标是获得容错设备,可能需要利用对量子化学的深入理解。
1.6. 复杂性理论见解
复杂性理论有两个重要的方面:一是关于 PEP 和 BO 近似的用法,我们将在第二章**,量子力学的公设中专门讨论;二是计算的复杂性。本节描述了与量子系统相关的计算的复杂性。
在 1981 年麻省理工学院计算物理会议上的主题演讲中 [MIT_QC_1981],理查德·费曼提出了问题:“经典计算机能否精确地模拟经典系统或量子系统?”他还指出,模拟一个大物理系统所需的计算机元素数量应该只与物理系统的大小成比例。费曼指出,计算一个大量子系统中每个粒子在每个点上的概率需要与
成比例的内存,即随着
的增加而指数增长。他的下一个问题是,经典系统能否以概率方式模拟量子系统。利用贝尔定理,该定理排除了局部隐变量 [Bell_1] [Bell_2],费曼表明答案再次是否定的。
费曼提出,量子系统可以模拟其他量子系统,并挑战计算机科学家找出不同种类的量子力学系统,这些系统可以相互模拟——即等价——就像在经典计算机的情况下所做的那样 [Preskill_40y]。计算复杂性理论,作为理论计算机科学的一个领域,试图根据其资源使用、空间和时间来对计算问题进行分类。
在这个理论中,可以在多项式(P)时间内解决的问题属于 P 类,可以在多项式时间内验证答案的问题属于非确定性多项式(NP)类 [PvsNP],而对于没有找到有效解算法且容易验证解正确性的问题属于 NP-完全类。例如,我们不知道如何有效地将一个数分解为其质因数,而检查质数的乘积是否为解则很容易。
P = NP 的问题列在七个千年大奖难题之中 [Clay]。可以在多项式时间内解决的问题属于 BQP 类。
在 2008 年的文章《量子计算机的极限》 [Aaronson_1] [Aaronson_2] 中,斯科特·阿伦森指出,一个常见的错误是声称,原则上,量子计算机可以通过同时处理所有可能的答案来解决 NP-完全问题。我们将在第四章**,分子哈密顿量中解释,量子计算机可以同时处理在叠加态中准备好的量子寄存器的所有可能状态。困难在于设计算法,使用量子干涉和纠缠,使得量子计算机只给出正确的答案。斯科特·阿伦森还管理着一个所有复杂性类的列表,复杂性动物园 [Comp_Zoo]。斯蒂芬·乔丹管理着一个量子算法动物园 [Qa_Zoo]。
复杂性理论中的一个新发现确立了梯度下降算法为什么不能快速解决某些类型的问题的原因[Fearnley] [Daskalakis]。训练变分量子算法是一个 NP 难题[Bittel]。这些结果影响了所有变分量子算法,如 VQE,因为它们依赖于经典优化器来优化量子电路参数集。
摘要
使用量子力学的公设来理解量子化学和计算将帮助下一代科学家预测尚未通过实验测量的物质行为。这对人类来说是一个令人兴奋的前景,我们希望历史视角能为当前行业的状态提供一个参考点,揭示新的进步机会。量子化学、量子计算的使用以及两者结合使用之间存在一种循环思维过程。
问题
请使用相应的 Google Colab 笔记本来测试你对本章所介绍概念的理解。
-
与量子化学相关的主要基本费米子粒子是什么?
-
的值对应于
? -
电子的自旋量子数
的值是多少? -
费米子遵循 PEP(泡利不相容原理),这意味着波函数的配对粒子排列必须是反对称的。反对称的符号是什么?
-
波长为 486.1 纳米的光子的能量是多少?
在国际单位制(SI)中:
6.62607015×10-34 J x Hz-1 是普朗克常数
299,792,458 (ms-1)是光速
提示:查看氢原子可见光谱中的蓝色线。你还需要将米转换为纳米。
-
前一个问题中,486.1 纳米的波长对应于哪个氢原子系列?莱默尔、巴耳末还是帕邢?
-
关于里德伯公式,对应于 486.1 纳米这个过渡的主量子数 n2 是多少?
-
提供氢元素的完整电子排布。
请输入不带上标的完整电子排布。
- 提供氮元素的完整电子排布。
答案
-
电子
-
1
-
½
-
-
4.086496311764922e-19
-
巴耳末
-
4
-
1s1
-
1s2 2s2 2p3
参考文献
[Aaronson_1] Scott Aaronson, The Limits of Quantum Computers, Scientific American, March 2008, www.scientificamerican.com/article/the-limits-of-quantum-computers/
[Aaronson_2] Scott Aaronson, The Limits of Quantum Computers (DRAFT), www.scottaaronson.com/writings/limitsqc-draft.pdf
[Arute] 阿鲁特,F.,阿亚,K.,巴布什,R. 等,使用可编程超导处理器实现量子霸权,自然 574,505–510 (2019),doi.org/10.1038/s41586-019-1666-5
[Balmer_series] 巴耳末系列,维基百科,en.wikipedia.org/wiki/Balmer_series
[Bell_1] 贝尔,J. S.,关于爱因斯坦-波多尔斯基-罗森佯谬,物理物理物理 1,195:195–200,1964,doi.org/10.1103/PhysicsPhysiqueFizika.1.195
[Bell_2] "第二章:关于爱因斯坦-波多尔斯基-罗森佯谬"。量子力学中的可说与不可说:量子哲学论文集(1987 年版,阿兰·阿斯佩特序言),重印于 JS Bell (2004),剑桥大学出版社。第 14–21 页。ISBN 978-0521523387
[Benioff] 本尼奥夫,P.,计算机作为物理系统:用图灵机表示的计算机的微观量子力学哈密顿量模型,doi.org/10.1007/BF01011339
[Bittel] Lennart Bittel 和 Martin Kliesch,训练变分量子算法是 NP-hard — 即使对于对数数量级的量子比特和自由费米子系统,DOI:10.1103/PhysRevLett.127.120502,2021 年 1 月 18 日,doi.org/10.1103/PhysRevLett.127.120502
[Bohr_1] N. 玻尔,I.,关于原子和分子的结构,哲学杂志,26,1-25 (七月 1913),DOI:10.1080/14786441308634955
[Bohr_2] 玻尔壳层模型,大英百科全书,www.britannica.com/science/atom/Bohrs-shell-model#ref496660
[Born_1] 布朗,M.,乔丹,P. 关于量子力学,物理杂志 34,858–888 (1925),doi.org/10.1007/BF01328531
[Byjus] BYJU'S,氢光谱,波长,图表,氢发射光谱,byjus.com/chemistry/hydrogen-spectrum/#
[CERN_quark] CERN 探索原子世界之旅,www.youtube.com/watch?v=7WhRJV_bAiE
[Chem-periodic] 化学自由教材,5.17:电子排布和周期表,chem.libretexts.org/Bookshelves/General_Chemistry/Book%3A_ChemPRIME_(Moore_et_al.)/05%3A_The_Electronic_Structure_of_Atoms/5.17%3A_Electron_Configurations_and_the_Periodic_Table
[Chem_spectr] 化学自由教材,7.3:氢原子的光谱,chem.libretexts.org/Courses/Solano_Community_College/Chem_160/Chapter_07%3A_Atomic_Structure_and_Periodicity/7.03_The_Atomic_Spectrum_of_Hydrogen
[Clay] 千禧年问题,www.claymath.org/millennium-problems
[Comp_Zoo] 复杂性动物园,complexityzoo.net/Complexity_Zoo
[Daskalatis] 科斯蒂斯·达斯卡拉斯,平衡计算与深度学习的基础,科斯蒂斯·达斯卡拉斯在数据科学基础系列,2021 年 2 月 18 日,www.youtube.com/watch?v=pDangP47ftE
[Deutsch-Jozsa] 大卫·德罗斯和理查德·约萨,通过量子计算快速解决问题,伦敦皇家学会 A 类会议论文,439:553-558,doi.org/10.1098/rspa.1992.0167
[DiVincenzo] 大卫·P·迪维琴佐,量子计算的物理实现,10.1002/1521-3978(200009)48:9/11<771::AID-PROP771>3.0.CO;2-E,arxiv.org/abs/quant-ph/0002077
[Dirac_2] P.A.M.狄拉克,量子动力学的物理解释,Proc. R. Soc. Lond. A 1927,113,621–641,doi.org/10.1098/rspa.1927.0012
[Dowling] 乔纳森·P·道灵和杰拉尔德·J·米尔伯恩,量子技术:第二次量子革命,皇家学会,2003 年 6 月 20 日,doi.org/10.1098/rsta.2003.1227
[E_mass] 基本物理常数,电子质量,NIST,https://physics.nist.gov/cgi-bin/cuu/Value?me|search_for=electron+mass
[Fearnley] 约翰·费尔尼利(利物浦大学),保罗·W·戈德堡(牛津大学),亚历山德罗斯·霍伦德(牛津大学),以及拉胡尔·萨瓦尼(利物浦大学),梯度下降的复杂性:CLS = PPAD ∩ PLS,STOC 2021:第 53 届 ACM SIGACT 理论计算年度研讨会论文集,2021 年 6 月,第 46-59 页,doi.org/10.1145/3406325.3451052
[Hill] 使用 Python 学习科学编程,第二章:核心 Python 语言 I,问题,P2.5,电子排布,scipython.com/book/chapter-2-the-core-python-language-i/questions/problems/p25/electronic-configurations/
[Intro_BOA_1] M. Born,J.R. Oppenheimer,关于分子量子理论,www.theochem.ru.nl/files/dbase/born-oppenheimer-translated-s-m-blinder.pdf
[Intro_BOA_2] M. Born 和 R. J. Oppenheimer,分子量子理论,物理年鉴,20,457-484(1927 年 8 月),doi.org/10.1002/andp.19273892002
[Kaplan] Ilya G. Kaplan,泡利不相容原理的现代状态及其理论基础的难题,对称性 2021,13(1),21,doi.org/10.3390/sym13010021
[Knill] Emanuel Knill,Raymond Laflamme,量子纠错码理论,arxiv.org/abs/quant-ph/9604034
[Lyman_series] 兰姆系,来自维基百科,en.wikipedia.org/wiki/Lyman_series
[MIT_QC_1981] MIT Endicott House,计算物理会议,图片“计算物理会议,MIT Endicott House 1981 年 5 月 6-8 日”,2018 年 3 月 21 日,mitendicotthouse.org/physics-computation-conference/
[Neutron-electron-mass-ratio] 中子-电子质量比,NIST,physics.nist.gov/cgi-bin/cuu/Value?mnsme
[Orb_Approx] 轨道近似定义,www.chemicool.com/definition/orbital-approximation.html
[Part_1] 粒子列表,维基百科,en.wikipedia.org/wiki/List_of_particles
[Pauling] L. Pauling 和 E. B. Wilson,量子力学导论及其在化学中的应用,多佛(1935 年)
[PoorLeno] 文件:氢密度图.png,来自维基百科,en.wikipedia.org/wiki/File:Hydrogen_Density_Plots.png
[Preskill_40y] 约翰·普雷斯科尔,40 年后的量子计算,arxiv.org/abs/2106.10522
[PvsNP] P 和 NP,www.cs.uky.edu。从原始版本存档于 2016-09-19,web.archive.org/web/20160919023326/http://www.cs.uky.edu/~lewis/cs-heuristic/text/class/p-np.html
[QC40] (直播) QC40:计算物理会议 40 周年,www.youtube.com/watch?v=GR6ANm6Z0yk
[QMC] Google 量子 AI,使用量子计算机进行无偏费米子量子蒙特卡罗模拟,量子夏季研讨会 2021,7 月 30 日,www.youtube.com/watch?v=pTHtyKuByvw
[Qa_Zoo] Stephen Jordan,代数和数论算法,quantumalgorithmzoo.org/
[Rayleigh_Ritz] Rayleigh-Ritz 方法,维基百科,en.wikipedia.org/wiki/Rayleigh%E2%80%93Ritz_method
[Rydberg_R] Rydberg 常数,维基百科,en.wikipedia.org/wiki/Rydberg_constant
[Rydberg_Ritz] Rydberg-Ritz 结合原理,维基百科,en.wikipedia.org/wiki/Rydberg%E2%80%93Ritz_combination_principle
[Shor] 彼得·肖尔,Shor 算法的由来,直击源头,2021 年 7 月 2 日,www.youtube.com/watch?v=6qD9XElTpCE
[VQE_1] Peruzzo, A., McClean, J., Shadbolt, P. 等人,在光子量子处理器上的变分本征值求解器,Nat Commun 5, 4213 (2014),doi.org/10.1038/ncomms5213
[VQE_2] Qiskit Nature,基态求解器,qiskit.org/documentation/nature/tutorials/03_ground_state_solvers.html
[Vandersypen] Vandersypen, L., Steffen, M., Breyta, G. 等人,利用核磁共振实现 Shor 的量子分解算法,自然 414, 883–887 (2001),doi.org/10.1038/414883a
第二章:量子力学的公设
"他思维的力量生动而强大,他超越天际的火焰城墙,在思想和心灵中穿越了无边的宇宙。"
– 提图斯·卢克莱修·卡鲁斯

图 2.1 – 提图斯·卢克莱修·卡鲁斯凝视着银河系 [作者] 从公共领域的提图斯·卢克莱修图像和银河系图像 [NASA] 构建而成
在他的六卷诗《自然论》的前两卷中,罗马诗人兼哲学家提图斯·卢克莱修·卡鲁斯讨论了生活和爱情,并解释了伊壁鸠鲁物理学的基本原则,这是基督之前希腊理解世界的一种方式 [Lucr_1]。他提出了物质既是主动的又是不可确定的观点 [Lucr_2],至少可以说这是一种非常“量子”的思维方式。
通过一个阳光中的尘埃粒子的类比,卢克莱修描述了现在所知的布朗运动 [Lucr_3]。他谈论了物质,并使用诸如大部分是空的空间等概念来描述它。这些想法要经过 2000 多年才被广泛采用,并纳入量子力学的公设。我们在第一章中回顾了 19 世纪末和 20 世纪初的里程碑,这些里程碑导致了量子力学公设的形成,介绍量子概念。
量子力学的五个公设并不被认为是自然法则,既不能从数学上也不能从实验上证明其真实性。相反,公设只是对粒子和物质行为的指导方针。尽管公设的形成花费了几十年,而更广泛的科学界利用它花费了一个世纪,但公设仍然是预测物质和粒子性质的有力工具,是量子化学和计算的基础。
在本章中,我们将涵盖以下主题:
-
第二章 2.1 节,公设 1 – 波函数
-
第二章 2.2 节,公设 2 – 概率振幅
-
第二章 2.3 节,公设 3 – 可测量的量和算子
-
第二章 2.4 节,公设 4 – 时间无关的定态
-
第二章 2.5 节,公设 5 – 时间演化动力学,薛定谔方程
在本章中,我们主要关注命题 1,即波函数的重要性,因为我们认为这个命题对有用的创新有强大的影响。传统上,命题 1 在概念上难以理解,在数学和艺术上表示都是一个科学挑战。我们已经采取了积极的措施来克服这一艺术上的挑战,如图图 1.4和图 2.2所示。其他四个命题支持命题 1。在本章中,我们不会像对命题 1 那样详细地介绍这些命题;然而,将在后续章节中利用它们。对于不熟悉线性代数或狄拉克符号的读者,请参阅附录 A – 准备数学概念。

图 2.2 – 氢原子波函数的艺术图像 [作者]
技术要求
本章的配套 Jupyter 笔记本可以从 GitHub 下载,网址为github.com/PacktPublishing/Quantum-Chemistry-and-Computing-for-the-Curious,已在 Google Colab 环境中测试,该环境免费且完全在云端运行,以及 IBM Quantum Lab 环境中。请参阅附录 B – 在云端利用 Jupyter 笔记本,获取更多信息。配套的 Jupyter 笔记本会自动安装以下列表中的库:
-
数值 Python(NumPy)[NumPy],一个在科学和工程几乎每个领域都使用的开源 Python 库
-
SymPy,[SymPy],一个用于符号数学的 Python 库
-
Qiskit [Qiskit],一个用于在脉冲、电路和应用模块级别与量子计算机工作的开源 SDK
-
安装 Qiskit 可视化支持以启用其可视化功能和使用 Jupyter 笔记本
使用以下命令安装 NumPy:
pip install numpy
使用以下命令安装 SymPy:
pip install sympy
使用以下命令安装 Qiskit:
pip install qiskit
使用以下命令安装 Qiskit 可视化支持:
pip install 'qiskit[visualization]'
使用以下命令导入数学库:
import cmath
import math
2.1. 命题 1 – 波函数
总波函数描述系统的物理行为,用大写希腊字母 Psi 表示:
。它包含量子系统的所有信息,并将复数(
)作为参数。一般来说,
是系统中所有粒子(
)的函数,其中粒子的总数为
。此外,
包括每个粒子的空间位置(
)、每个粒子的自旋方向坐标(
)和时间
:

其中
和
是单个粒子坐标的向量:


单粒子系统的总波函数是空间
、自旋
和时间
函数的乘积:

如果一个多粒子系统的波函数不能分解为单个粒子函数的乘积,那么我们将量子系统视为纠缠的。如果波函数可以分解为单个粒子函数的乘积,那么它不是纠缠的,称为可分离态。我们将在第三章**,量子计算电路模型中重新审视纠缠的概念。
波函数的空间部分
可以通过以下方程从笛卡尔坐标系
转换为球坐标系
,其中
是径向距离,由距离公式
,
是极角,从 0 到
(
),
是方位角,从 0 到
(
):

图 2.3 – 球坐标系[公有领域]
为了准确表示量子系统,需要适当考虑波函数的某些特性:
-
单值,意味着对于给定的输入变量只有一个可能的输出
-
正定,意味着波函数的复共轭转置,用符号
表示,乘以波函数本身严格大于零:![img/Formula_02_034.png]()
-
平方可积,意味着当在整个空间上积分时,正定乘积小于无穷大(
:
,其中
) -
归一化,意味着粒子必须存在于一个体积
和某个时间点,即它必须存在于所有空间和时间中的某个地方:
,其中![img/Formula_02_040.png]()
-
完备,意味着表示该量子系统所需的所有统计上重要的数据都可用,使得性质的计算收敛到极限,即一个单一值
对于量子化学应用,我们将使用 Python 代码展示如何包含空间
和自旋
函数:
-
第 2.1.1 节,球谐函数,与量子数
以及空间变量
或
相关 -
第 2.1.2 节,使用克莱布施-戈丹(CG)系数进行动量叠加,用于耦合多个粒子,可以应用于轨道 (
) 和自旋量子数 (
) -
第 2.1.3 节,泡利不相容原理的一般公式,它确保了多粒子系统的适当对称性要求:要么是完全费米子,要么是完全玻色子,或者两者的组合
从机器学习的角度来看,还有其他参数波函数可能依赖于。这些参数被称为超参数,用于优化波函数,以获得对感兴趣状态的最为精确的描述。
2.1.1. 球谐函数
球谐函数
用于描述单电子系统,并依赖于角动量 (
) 和磁量子数 (
),以及空间坐标:

并且是一组定义在球面上的特殊函数,称为径向波函数
:

由于氢原子是最简单的原子,仅由一个电子围绕一个质子组成,在本节中,我们将展示这些函数的形状。氢原子的某些球谐函数在 图 2.4 中显示:

图 2.4 – 氢原子空间波函数,量子数为
和 
回想以下内容:
-
主量子数 (
) 是一个连续的量子变量,其范围从 1 到无穷大,在实际上,由于电离,它成为一个离散变量。 -
角动量量子数 (
) 包含在由以下确定的离散集合中:
. -
磁量子数 (
) 包含在由角动量量子数 (
) 确定的离散集合中:![]()
球谐函数,
,可以分解为三个函数的乘积:
,
其中
是仅依赖于量子数
的常数,
是极函数,也称为关联勒让德多项式函数,如果角动量(
)为正或负,它可能是一个复杂函数,而
是复指数方位函数。为了说明球谐函数,我们使用以下代码,它计算它们 [SciPy_sph],然后将它们转换为以下实函数 [Sph_Real]:
![公式 _02_069.jpg]
最后,使用 Python 的 Matplotlib 模块以三维形式显示这些实函数。现在让我们在 Python 中实现这一点。
导入 NumPy、SciPy 和 Matplotlib Python 模块
以下 Python 语句导入了所需的 NumPy、SciPy 和 Matplotlib 模块:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
from scipy.special import sph_harm
设置极角(theta
)和方位角(phi
)的网格
我们定义了一个名为setup_grid()的函数,它使用以下 Python 函数创建极坐标网格及其相应的笛卡尔坐标:
-
numpy.linspace: 在指定区间内返回均匀分布的数字 -
numpy.meshgrid: 从坐标向量返回坐标矩阵
setup_grid()函数有一个输入参数num,它是一个正整数,表示极坐标的不同值的数量。
它返回以下内容:
-
theta,phi: 形状为num x num的二维 NumPy 数组 -
xyz: 形状为(3,num,num)的三维 NumPy 数组
def setup_grid(num=100):
theta = np.linspace(0, np.pi, num)
phi = np.linspace(0, 2*np.pi, num)
# Create a 2D meshgrid from two 1D arrays of theta, phi coordinates
theta, phi = np.meshgrid(theta, phi)
# Compute cartesian coordinates with radius r = 1
xyz = np.array([np.sin(theta) * np.sin(phi),
np.sin(theta) * np.cos(phi),
np.cos(theta)])
return (theta, phi, xyz)
让我们检查setup_grid()返回的 NumPy 数组的形状:
(theta, phi, xyz) = setup_grid()
print("Shape of meshgrid arrays, theta: {}, phi: {}, xyz: {}".format(theta.shape, phi.shape, xyz.shape))
这是输出:
Shape of meshgrid arrays, theta: (100, 100), phi: (100, 100), xyz: (3, 100, 100)
根据球谐函数(Y)的实部符号着色球谐函数的实函数绘制表面
我们定义了一个名为colour_plot()的函数,该函数根据球谐函数
的实部的符号着色其实函数绘制表面。它有以下输入参数:
-
ax: 一个三维 Matplotlib 图形 -
Y: 球谐函数 -
Yx,Yy,Yz: 球谐函数绘制表面的笛卡尔坐标 -
cmap: 通过matplotlib.cm.get_cmap函数可访问的内置颜色映射,例如,autumn、cool、spring 和 winter:
def colour_plot(ax, Y, Yx, Yy, Yz, cmap):
# Colour the plotted surface according to the sign of Y.real
# https://matplotlib.org/stable/gallery/mplot3d/surface3d.html?highlight=surface%20plots
# https://matplotlib.org/stable/tutorials/colors/colormaps.html
cmap = plt.cm.ScalarMappable(cmap=plt.get_cmap(cmap))
cmap.set_clim(-0.5, 0.5)
ax.plot_surface(Yx, Yy, Yz,
facecolors=cmap.to_rgba(Y.real),
rstride=2, cstride=2)
return
定义一个函数,用于绘制一组 x、y、z 轴并设置图形的标题
我们定义了一个名为draw_axes()的函数,用于绘制 Matplotlib 图形的轴并设置标题。它有三个输入参数:
-
ax: 一个三维 Matplotlib 图形 -
ax_lim: 控制绘制表面大小的正实数 -
title: 将显示为输出图形标题的字符字符串:
def draw_axes(ax, ax_lim, title):
ax.plot([-ax_lim, ax_lim], [0,0], [0,0], c='0.5', lw=1, zorder=10)
ax.plot([0,0], [-ax_lim, ax_lim], [0,0], c='0.5', lw=1, zorder=10)
ax.plot([0,0], [0,0], [-ax_lim, ax_lim], c='0.5', lw=1, zorder=10)
# Set the limits, set the title and then turn off the axes frame
ax.set_title(title)
ax.set_xlim(-ax_lim, ax_lim)
ax.set_ylim(-ax_lim, ax_lim)
ax.set_zlim(-ax_lim, ax_lim)
ax.axis('off')
return
定义一个函数,用于计算球谐函数(Y)的实部形式
在这段代码中请谨慎操作,因为 SciPy 将 theta (
) 定义为方位角,phi (
) 定义为极角 [SciPy_sph],这与用于绘图的常规定义相反。
comb_Y() 函数接受以下输入参数:
-
l: 角动量量子数 -
m: 磁量子数![]()
-
theta,phi: 形状为num x num的二维 NumPy 数组
它返回之前展示的球谐函数
的实部形式:
def comb_Y(l, m, theta, phi):
Y = sph_harm(abs(m), l, phi, theta)
if m < 0:
Y = np.sqrt(2) * (-1)**m * Y.imag
elif m > 0:
Y = np.sqrt(2) * (-1)**m * Y.real
return Y
定义一个函数以显示角动量量子数和磁量子数一系列值的空间波函数
以下函数展示了
在范围
内的空间波函数,其中
是一个参数,
在范围
内,如下面的代码所示,展示了氢原子在状态
中的情况:
def plot_orbitals(k, cmap = 'autumn'):
for l in range(0, k+1):
for m in range(-l, l+1):
fig = plt.figure(figsize=plt.figaspect(1.))
(theta, phi, xyz) = setup_grid()
ax = fig.add_subplot(projection='3d')
Y = comb_Y(l, m, theta, phi)
title = r'$l={{{}}}, m={{{}}}$'.format(l, m)
Yx, Yy, Yz = np.abs(Y) * xyz
colour_plot(ax, Y, Yx, Yy, Yz, cmap)
draw_axes(ax, 0.5, title)
fig_name = 'Hydrogen_l'+str(l)+'_m'+str(m)
plt.savefig(fig_name)
plt.show()
return
氢原子的空间波函数
在状态
和
以及范围
内,氢原子单个电子的空间波函数通过之前定义的 plot_orbitals Python 函数进行计算和展示:
plot_orbitals(2)
结果在 图 2.4 中展示。
需要考虑的问题
当我们有一个以上的电子,即更重的元素时,球谐函数会发生什么?这些函数是如何操作或变化的?例如,当有三个非零角动量的电子,如氮原子的情况时,会发生什么?
为了实现这种复杂性和多样性,我们需要使用 Clebsch-Gordon (CG) 系数 来添加或耦合角动量,如 第 2.1.2 节,使用 CG 系数添加动量 中所述。
2.1.2. 使用 CG 系数添加动量
两个动量 (
和
) 以及相关的投影 (
和
) 的加和或耦合由两个初始状态波函数
和
在可能或允许的量子数上的求和来描述:

到一个选择的最终状态波函数
。是的,如果我们遵循矢量加法规则,我们可以随意选择最终状态。CG 系数是耦合总角动量在非耦合张量积基中的展开系数:

我们使用通用的
和
来表示一个公式,其中角动量 (
和
) 以及/或自旋 (
和
) 动量可以耦合在一起。我们可以仅耦合角动量,或仅耦合自旋动量,或两者同时耦合。加法是通过知道量子数的允许值来实现的。
使用 Python SymPy 的 CG 系数
Python SymPy 库 [SymPy_CG] 使用 CG 类实现了以下公式。
类
有以下参数:
-
:状态 1 的角动量投影 -
:状态 2 的角动量投影 -
:耦合系统的总角动量
导入 SymPy CG 系数模块
以下语句导入了 SymPy CG 系数模块:
import sympy
from sympy import S
from sympy.physics.quantum.cg import CG, cg_simp
定义 CG 系数并评估其值
我们可以在自旋配对状态下以两种不同的方式耦合两个电子(费米子):对称或反对称。我们将沿
方向的自旋向上表示为
,沿
方向的自旋向下表示为
。
我们还可以将自旋状态与角动量状态耦合。当耦合角动量 (
) 与自旋 (
) 时,我们改变符号为
。我们接下来将通过这三个例子来展示。
费米子自旋配对到对称状态 (
)
对称自旋配对状态的耦合为
,并由以下方程描述:
=


使用以下代码,我们获得前面方程的 CG 系数:
CG(S(1)/2, S(1)/2, S(1)/2, -S(1)/2, 1, 0).doit()
CG(S(1)/2, -S(1)/2, S(1)/2, S(1)/2, 1, 0).doit()
这里是结果:

图 2.5 – 定义 CG 系数并评估其值
将 CG 系数以及自旋向上和自旋向下的函数代入,我们得到以下结果:


费米子自旋配对到反对称状态 (
)
反对称自旋配对状态的耦合,
,由以下方程描述:
=


使用以下代码,我们获得前面方程的 CG 系数:
CG(S(1)/2, S(1)/2, S(1)/2, -S(1)/2, 0, 0).doit()
CG(S(1)/2, -S(1)/2, S(1)/2, S(1)/2, 0, 0).doit()
这里是结果:

图 2.6 – 定义 CG 系数并评估其值
将 CG 系数以及自旋向上和自旋向下的函数代入,我们得到以下结果:


耦合自旋和角动量 (
)
让我们将角动量与
和
结合起来,形成一个费米子自旋态
和
,以选择最终的态
:




该方程的 CG 系数使用以下代码计算:
CG(1, 0, S(1)/2, S(1)/2, S(1)/2, S(1)/2).doit()
CG(1, 1, S(1)/2, -S(1)/2, S(1)/2, S(1)/2).doit()
CG(1, -1, S(1)/2, S(1)/2, S(1)/2, S(1)/2).doit()
这里是结果:

图 2.7 – 定义 CG 系数并评估其值
将前面代码的结果代入公式,我们得到以下结果:




现在,我们将其简化并代入上旋和下旋函数:

在最后一步,我们为以下内容插入了球谐函数:
在这样做的时候,我们得到了以下结果:

然后,我们可以省略因子
,因为它是一个全局因子,因此最终态如下:

有些人可能认出这个函数是一个不包含时间依赖性的量子比特波函数。实际上,对于量子比特的状态,我们将上箭头 (
) 改为基态 ket 0 (
),以表示零的磁投影 (
),同样地,对于下箭头 (
) 改为基态 ket 1 (
),以表示零的磁投影 (
)。这样,我们得到以下结果:

我们在 第三章**,量子电路计算模型 中更详细地讨论了这个主题。
氮原子三个 p 电子的不同状态的空間波函数
现在我们想展示氮原子三个
电子的波函数 [Sharkey_0]。我们选择这个系统是因为我们通过将其耦合总动量表示为每个电子未耦合张量积基中的耦合来耦合超过两个非零动量矢量。这意味着我们假设波函数不是纠缠的。我们必须两次(递归地)应用角动量加法公式,以便我们有与最终选择态的所有耦合组合。氮原子三个
电子的空間波函数的不同形状在此展示:

图 2.8 – 氮原子三个
电子的不同状态的空間波函数
我们将讨论
,
的最终态的例子。
氮原子基态的 3
电子在
,![公式 02_161]()
电子是费米子,因此它们不能占据相同的量子数集合。因为我们处理的是三个
电子,所以每个电子的轨道角动量 (!
) 如下:
和
.
这与
的最终动量状态耦合。每个电子允许的磁矩集合 (!
) 如下:
和
,
最终耦合的磁矩投影状态是:

要完成这种三个动量的耦合,我们必须两次应用角动量加法公式(递归),以便我们拥有与最终状态耦合的所有组合,
。
每个电子处于相同的壳层或主量子数 (!
) 水平;然而,每个电子处于不同的亚壳层 (!
),并且具有向上或向下的自旋。对于这个例子,自旋状态无关紧要,我们选择不包括它。由于这些电子处于不同的亚壳层,这意味着它们不能有相同的量子数组合 (!
和
):

图 2.9 –
,
的电子配置
设置六个配置元组的字典
每个元组包含
,其中
是电子 1 与 2 的第一次耦合,
是电子 1 和 2 与 3 的第二次耦合:
T00 = {0: (1,-1, 1,0, 1,-1, 1,1, 0,0),
1: (1,-1, 1,1, 1,0, 1,0, 0,0),
2: (1,0, 1,-1, 1,-1, 1,1, 0,0),
3: (1,0, 1,1, 1,1, 1,-1, 0,0),
4: (1,1, 1,-1, 1,0, 1,0, 0,0),
5: (1,1, 1,0, 1,1, 1,-1, 0,0)}
定义一个计算 CG 系数乘积的函数
comp_CG() 函数有以下输入参数:
-
:配置元组的字典 -
:字典中数组的索引 -
:默认为 None,设置为 True以显示计算
它返回与条目
相关的 CG 系数乘积:
def comp_CG(T, k, display = None):
CGk = CG(*T[k][0:6]) * CG(*T[k][4:10])
if display:
print('CG(', *T[k][0:6], ') = ', CG(*T[k][0:6]).doit())
print('CG(', *T[k][4:10], ') = ', CG(*T[k][4:10]).doit())
print("CG{} =".format(k), 'CG(', *T[k][0:6], ') * CG(', *T[k][4:10], ') = ', CGk.doit())
return CGk
例如,对于
和
,将显示选项设置为 True 时,使用以下:
CG0 = comp_CG(T00, 0, display=True)
我们得到以下详细输出:

图 2.10 – T00 字典中第一个条目 comp_CG 的输出
计算和打印 CG 系数
以下 Python 代码为 T00 字典中的每个条目调用 comp_CG() 函数,并打印 CG 系数计算的结果:
for k in range(0, len(T00)):
s = 'CG' + str(k) +' = comp_CG(T00, ' + str(k) + ')'
exec(s)
s00 = ["CG0: {}, CG1: {}, CG2: {}, CG3: {}, CG4: {}, CG5: {}".
format(CG0.doit(), CG1.doit(), CG2.doit(), CG3.doit(), CG4.doit(), CG5.doit())]
print(s00)
这是结果:

图 2.11 – 计算氮原子基态具有三个电子(
,
,
)的 CG 系数
定义一组空间波函数
由于同一轨道上的电子相互排斥,我们定义一组空间波函数,在第二和第三个电子的波函数中分别添加相位
和
:
def Y_phase(theta, phi):
Y10a = comb_Y(1, 0, theta, phi)
Y11a = comb_Y(1, 1, theta, phi)
Y1m1a = comb_Y(1, -1, theta, phi)
Y10b = comb_Y(1, 0, theta, phi+1*np.pi/3)
Y11b = comb_Y(1, 1, theta, phi+1*np.pi/3)
Y1m1b = comb_Y(1, -1, theta, phi+1*np.pi/3)
Y10c = comb_Y(1, 0, theta, phi+2*np.pi/3)
Y11c = comb_Y(1, 1, theta, phi+2*np.pi/3)
Y1m1c = comb_Y(1, -1, theta, phi+2*np.pi/3)
return(Y10a, Y11a, Y1m1a, Y10b, Y11b, Y1m1b, Y10c, Y11c, Y1m1c)
计算具有三个电子(
,
,
)的氮原子的波函数
我们将波函数计算为之前定义的波函数乘积之和:
def compute_00_Y(ax_lim, cmap, title, fig_name):
fig = plt.figure(figsize=plt.figaspect(1.))
(theta, phi, xyz) = setup_grid()
ax = fig.add_subplot(projection='3d')
(Y10a, Y11a, Y1m1a, Y10b, Y11b, Y1m1b, Y10c, Y11c, Y1m1c) = Y_phase(theta, phi)
Y_00 = float(CG0.doit()) * Y1m1a * Y10b * Y11c
Y_01 = float(CG1.doit()) * Y1m1a * Y11b * Y10c
Y_02 = float(CG2.doit()) * Y10a * Y1m1b * Y11c
Y_03 = float(CG3.doit()) * Y10a * Y11b * Y1m1c
Y_04 = float(CG4.doit()) * Y11a * Y1m1b * Y10c
Y_05 = float(CG5.doit()) * Y11a * Y10b * Y1m1c
Y = Y_00 + Y_01 + Y_02 + Y_03 + Y_04 + Y_05
Yx, Yy, Yz = np.abs(Y) * xyz
colour_plot(ax, Y, Yx, Yy, Yz, cmap)
draw_axes(ax, ax_lim, title)
plt.savefig(fig_name)
plt.show()
return
展示氮原子基态具有三个电子(
,
,
)的波函数
现在我们展示氮原子基态具有三个电子的球谐函数的图形表示:
title = '$Nitrogen\ with\ 3p\ electrons\ (L=0,\ M=0)$'
fig_name ='Nitrogen_3p_L0_M0.png'
compute_00_Y(0.01, 'autumn', title, fig_name)
这里是结果:

图 2.12 – 氮原子基态具有三个电子(
)的空间波函数
(
,
)
2.1.3. 泡利不相容原理的通用公式
记住,费米子是具有半整数值自旋(
)的粒子,而玻色子是具有整数值自旋(
)的粒子。泡利不相容原理的通用公式指出,量子系统的总波函数
必须对所有相同粒子的集合具有某些对称性,即电子和相同核子,玻色子和费米子,在配对粒子排列操作[Bubin]下。
- 对于费米子,总波函数必须相对于相同配对粒子的交换是反对称的(
):

这意味着波函数的空间部分是反对称的,而自旋部分是对称的,或者反之亦然。
- 对于玻色子,总波函数必须相对于配对粒子的交换是对称的(
):

这意味着空间波函数和自旋函数要么都是对称的,要么都是反对称的。
- 对于同时包含相同费米子和相同玻色子的复合系统,上述操作必须同时成立。
通常,对于一个给定的量子系统,对称化算子和反对称化算子的组合被称为投影算子
。然后,包括泡利不相容原理在内的总波函数(
)被写成:

对于给定的量子系统,满足 PEP 的投影算子是通过反对称化算子和对称化算子
的乘积得到的,并且严格按此顺序,不是
。在计算中犯这个错误会导致错误的操作。
投影算子
可以表示为线性组合:

其中指数
表示一组可能排列中粒子的特定顺序,
是与特定顺序相关的排列,一个相关的展开系数
,以及
是相同粒子的总数。这个方程依赖于排列的阶乘 (
) 关系,使得这是一个非确定性多项式时间难题(NP-hard)的计算。请注意,您不能进行加减运算,您只能合并同类项。随着系统中相同粒子数量的增加,复杂性呈指数增长,这使得这是一个 NP-hard 计算。
确定投影操作应用于给定量子系统时使用的对称化算子
和反对称化算子
的过程如下:
-
识别所有相同粒子的集合
,即电子和核子,以及费米子和玻色子。请勿将这个
与主量子数
混淆,因为我们使用的是相同的符号。 -
为正整数构建一个划分函数。记住我们只有正粒子的计数,没有负计数。正整数的划分是一个正整数序列
,使得
和
,其中
是该集合的最后一个可能的整数。 -
然后使用划分来构建杨图。杨图(图)是一系列按行排列的连接方框,这些方框左对齐,并且排列得使得每一行的方框数量等于或低于其上方行的方框数量。
系统中具有
个相同玻色子的完全对称不可约表示是一个垂直的杨图,包含
个方框。系统中具有
个相同费米子和总自旋
的完全反对称不可约表示是一个水平的杨图,包含
个方框。我们计算对称量子数 (
) 如下:

分配函数
描述了如何构建 Young 框架。在第一
行中有两个盒子,而在剩余
行中有一个盒子,我们可以这样表示:

请注意,上标不是指数。盒子中数字填充的惯例是从左到右递增,然后从上到下递增。以下是一些如何组合 Young 框架的例子:
- 当有两个总自旋
的相同玻色子粒子 (
) 时,对称量子数是
,分配函数是
,相应的 Young 框架如下:

图 2.13 – 分配函数
的 Young 框架
这个 Young 框架对应于完全对称的操作。
-
当有两个总自旋
的相同玻色子粒子时,对称量子数是
,分配函数是
,相应的 Young 框架与之前的 Young 框架相同。 -
当有两个总自旋
的相同费米子粒子时,对称量子数是
,分配函数是
,相应的 Young 框架与之前的 Young 框架相同。我们在 第 2.2.2 节,氢负离子的概率幅
中使用这个状态。 -
当有两个总自旋
的相同费米子粒子时,对称量子数是
,分配函数是
,相应的 Young 框架如下:

图 2.14 – 分配函数
的 Young 框架
这个 Young 框架对应于完全反对称的操作。
- 当有三个相同费米子粒子 (
),总自旋
,即两个成对的电子和一个孤电子时,对称量子数是
,分配函数是
,相应的 Young 框架如下:

图 2.15 – 分配函数
的 Young 框架
这个 Young 框架对应于对称和反对称操作的组合。
- 当有三个相同的费米子粒子 (
),总自旋
,即三个未配对电子时,对称量子数是
,配分函数是
,相应的 Young 框架如下:

图 2.16 – 配分函数
的 Young 框架
- 对于锂氢 (LiH) 中的四个电子,具有自旋配对 (
),对称量子数
,划分是
,我们有以下 Young 框架:

图 2.17 – 配分函数
的 Young 框架
在这个例子中,由于核是其唯一类型的粒子,我们不包括它在集合编号中。
我们可以将 Young 框架推广到费米子、玻色子和复合系统,如图 图 2.18 所示。

图 2.18 – 量子数、玻色子和复合系统的 Young 框架 [作者]
frame() 函数根据输入的划分创建一个 Young 框架:
mu: 这个划分表示为一个字典,其键是划分整数,值是该整数的多重性。例如,
表示为 {2: 1, 1:0}。
它返回以下 Young 框架:
f: 一个字典,其键是从 0 开始的行索引,值是对应行的整数列表。例如,
表示 Young 框架 图 2.15,其中第一行包含 1,2,第二行包含 3:
def frame(mu):
a = 0
b = 0
f = {}
for k, v in mu.items():
for c in range(v):
f[a] = list(range(b+1, b+k+1))
a += 1
b += k
return f
让我们用
运行 frame() 函数:
print("F_21_10 =", frame({2: 1, 1:0}))
这里是结果:

让我们用
运行 frame() 函数:
print("F_21_11 =", frame{2: 1, 1:1}))
这里是结果:

现在我们准备定义反对称化 (
) 和对称化 (
) 操作,用于系统中受我们确定的 Young 框架约束的多个粒子。Young 框架行的反对称化算子 (
) 是:

其中
对于奇排列是正的,对于偶排列是负的。奇排列有一个反对称排列矩阵。偶排列有一个对称排列矩阵。我们还定义了一个对称化算子 (
) 用于 Young 框架的列:

回想一下,投影算子是乘积:
。
对于 LiH 中四个电子的例子,具有自旋配对 (
),我们从 图 2.17 推导出以下算子:


其中
: 是粒子
和
的排列,而
是恒等算子。
投影算子是通过分配律和排列乘法的规则计算的:






有了这个,我们将继续到 第 2.2 节,假设 2 – 概率振幅,在那里我们将通过一个例子重新审视 PEP。
2.2. 假设 2 – 概率振幅
考虑粒子在位置空间中的运动,其中
是位置矢量。在特定位置和给定时间点找到粒子的概率密度是位置的一个函数:
。在一个正交基中,两个波函数的内积衡量它们的重叠。如果两个波函数的内积为零,则它们是正交的。为了找到在测量时状态
将被发现在状态
中的概率,我们必须计算状态
和
之间内积的模平方,
。
多粒子系统的空间波函数为
,其中
是总粒子数,它被解释为在特定时间点的概率振幅函数,通过以下积分来解释所有粒子在系统
中的体积元素
:

请注意,我们已从笛卡尔坐标系转换为球坐标系。在这个设置中,我们可以在波函数
中包含通过 CG 系数耦合在一起的正交球谐函数,这些系数我们在上一节中讨论过。
我们还需要包括径向波函数。我们在 第 2.2.1 节,计算径向波函数 中描述了如何确定径向波函数,然后通过 第 2.2.2 节,氢负离子的概率振幅
的例子来计算特定量子化学系统的概率振幅。
2.2.1. 计算径向波函数
类氢系统的径向波函数由以下公式给出:

其中
是通过以下方式计算的:

其中
是等于国际科学理事会数据委员会(CODATA)在 SI 单位中的值的玻尔半径,系数
由以下递归关系定义:

对于该序列在
处终止。我们使用以下 Python 代码初始化
:
a0 = 5.29177210903e-11
comp_ak() 函数具有以下输入参数:
-
n: 整数,主量子数 -
l: 角动量量子数,取值范围为
到 ![公式]()
-
a0: 玻尔半径,定义为
,其中
是精细结构常数,
是光速,
是电子的静止质量 -
ak: 由前面的递归关系定义的系数
它返回一个字典,其键是整数
,值是对应的系数
:
def comp_ak(n):
n = max(n,1)
# Create a dictionary with integer keys, starting with a0
dict = {0: a0}
for l in range (n-1):
for k in range(n-l-1):
ak = dict.get(k)
#display("l: {}, k: {}, ak: {}".format(l, k, ak))
dict[k+1] = ak*(k+l+1-n)/((k+1)*(k+2*l+2))
return dict
让我们获取前十个系数:
d = comp_ak(10)
for k, v in d.items():
print("{}, {}".format(k,v))
这里是结果:

图 2.19 – 出现在径向波函数中的系数
导入 SymPy 函数:
from sympy.physics.hydrogen import R_nl
from sympy.abc import r, Z
The sympy.physics.hydrogen.Rnl(n,l,r,Z=1) 函数返回氢的径向波函数
[SymPy_Rnl]。它具有以下输入参数:
-
n: 整数,主量子数 -
l: 角动量量子数,取值范围为 0 到 n−1 -
r: 径向坐标 -
Z: 原子序数(或核电荷:氢为 1,氦为 2,依此类推)
让我们首先用
来试一下:
R_nl(1, 0, r, Z)
这里是结果:

接下来使用
:
R_nl(2, 0, r, Z)
这里是结果:

最后,使用
:
R_nl(2, 1, r, Z)
这里是结果:

2.2.2. 氢负离子的概率幅 ![公式]()
让我们计算在时间
时氢负离子(也称为氢化物)的概率幅,它有一个质子和两个电子在自旋配对基态。这个例子仅用于说明目的,并不打算进行严格的计算。
我们将两个电子标记为粒子 1 和 2,并选择电子角动量分别为
的状态,并与最终或总动量状态
相耦合,其中
是角动量与自旋动量之间的耦合。为了简化,我们假设这个系统没有纠缠。
我们将使用 PEP 操作 (
) 表示的波函数为:

其中,空间函数是对称的,而自旋函数是反对称的:

其中,CG 系数
等于:

回想一下,我们在 第 2.1.2 节,费米子自旋配对到对称状态()
* 中推导了反对称自旋态
,因此我们不会重新进行这个计算;我们将简单地重用这个结果:

接下来,我们说明对称空间状态
的角动量空间函数的耦合:

其中 CG 系数
等于:

现在我们将这个因子代入波函数中:


接下来,我们将使用以下球谐函数:


以及每个电子的径向波函数,对于质子的核电荷为
,如 第 2.2.1 节,计算径向波函数 中所述:


氢化物的基态波函数为:

概率振幅是通过确定波函数的平方来计算的:



由于自旋函数是归一化的,因此自旋的积分等于 1,导致:


接下来,我们包括 PEP,其中我们计算
。回想一下,我们推导了两个反演自旋态中的费米子的
,如 图 2.13 所示,结果是一个
的因子:


和
的积分等于
,以下 SymPy 代码展示了这一点:
from sympy import symbols, integrate, exp, oo
x = symbols('x')
integrate(x**2 *exp(-2*x),(x,0,oo))
这里是结果:

和
的积分等于
,以下 SymPy 代码展示了这一点:
from sympy import symbols, sin, pi
x = symbols('x')
integrate(sin(x),(x,0,pi))
这里是结果:

对
和
的积分等于
,以下 SymPy 代码展示了这一点:
integrate(1,(x,0,2*pi))
这里是结果:

将所有结果合并,概率振幅等于 1:

现在我们可以继续讨论其他公理。这些公理的例子将在本书的以下章节中阐述。因此,我们没有在本章中包含这些公理的代码。我们将在 第 3.1.9 节,泡利矩阵 中重新讨论这个主题的期望值。
2.3. 公理 3 – 可测量的量和算符
一个量子系统的物理可观测量由一个线性厄米算符表示,这意味着测量结果总是实数,而不是复数。测量的实数值是该算符描述的厄米算符的特征值。特征值是由操作产生的常数因子。
对于一个可观察量的谱,如果它是离散的,那么可能的结果是量子化的。我们通过计算在状态
中可观察量
的期望值来确定可测量的量,如下所示:

它是测量状态
所有可能结果的和,这些结果按其概率加权。此外,量子力学系统的状态可以用称为希尔伯特空间的给定距离的内积来表示。希尔伯特空间的一个定义在 附录 A – 准备数学概念 中给出。这个状态空间的定义意味着量子力学的 叠加 原理,即所有实数或复数基函数
的线性组合:

其中
是求和的指标,
是为了获得波函数的收敛性和完备性所需的基础函数的总数,而
是线性展开系数,可以是实数或复数。将叠加原理代入期望值的定义中,我们得到以下方程:

其中我们还包括了 PEP。我们将在后续章节中使用叠加原理。在本节中,我们介绍常见的算子并计算给定系统的期望值:
-
第 2.3.1 节,厄米算子
-
第 2.3.2 节,幺正算子
-
第 2.3.3 节,密度矩阵和混合量子态
-
第 2.3.4 节,位置算子与位置操作
![]()
-
第 2.3.5 节,动量算子与动量操作
![]()
-
第 2.3.6 节,动能算子与动能操作
![]()
-
第 2.3.7 节,势能算子与势能操作
![]()
-
第 2.3.8 节,总能量算子与总能量操作
![]()
可测量的量子量是从经典对应物导出的。
2.3.1. 厄米算子
某些向量
或矩阵
的复共轭转置通常在量子力学中记为
和
。符号
被称为 dagger。
被称为
的伴随算子或厄米共轭。
一个线性算子
如果是其自身的伴随算子:
,则称为厄米算子或自伴算子。
谱定理表明,如果
是厄米算子,那么它必须有一组正交归一的特征向量:

其中
有实特征值
,而
是特征向量的数量,也是希尔伯特空间的维度。厄米算子具有关于特征值集合
和相应的特征向量
的唯一谱表示:

我们将在 第 2.3.3 节,密度矩阵和混合量子态 中重新探讨这个主题。
将矩阵表示为外积之和
一个基态
和一个正态态
的外积是一个秩为 1 的算子
,其规则如下:

一个基态
和一个正态态
的外积是一个简单的矩阵乘法:

任何矩阵都可以用外积来表示。例如,对于一个 2x2 矩阵:



我们将在 第三章**,量子计算电路模型,第 3.1.6 节,泡利矩阵 中使用这些矩阵。
2.3.2. 单位算子
一个线性算子
如果其伴随算子存在并且满足
,其中
是单位矩阵,根据定义,它乘以任何向量都不会改变该向量,则称为单位算子。
单位算子保持内积:

因此,单位算子也保持了通常称为量子态长度的范数:

对于任何单位矩阵
,任何特征向量
和
以及它们的特征值
和
,
和
,特征值
和
具有形式
,如果
则特征向量
和
是正交的:
。
有用的一点是,由于对于任何
,
:

我们将在 第三章**,量子计算电路模型 中重新探讨这个问题。
2.3.3. 密度矩阵和混合量子态
任何量子态,无论是 混合 还是 纯,都可以用一个 密度矩阵 (
) 来描述,这是一个归一化的正厄米算子,其中
。根据谱定理,存在一个正交基,在 第 2.3.1 节,厄米算子 中定义,使得密度是所有特征值的和 (
):

其中
的范围从 1 到
,
是正数或零的特征值(
),特征值的和是密度矩阵的迹操作(
),且等于 1:

例如,当密度为
,且
时,密度的迹为:

这里是一些纯量子态密度矩阵的例子:



由
个纯量子态
组成的混合量子态的密度矩阵,每个态以经典概率
发生,定义为:

其中每个
都是正数或零,且它们的和等于一:

我们在图 2.20中总结了纯态和混合态之间的区别。
![img/B18268_table_02.20.jpg]
图 2.20 – 纯态和混合量子态的密度矩阵
2.3.4. 位置操作
粒子![公式 02_503.png]的位置可观测量在笛卡尔坐标系的所有方向上具有以下算符:



在球坐标系中,操作变为:



我们可以用以下方程计算给定粒子
在选定方向上的位置期望值:

例如,使用与第 2.2.2 节,氢负离子的概率幅中展示的相同系统
,电子 1 的
位置期望值由以下公式确定:


请注意,对
的积分是一个三次函数,而不是二次函数,对
的积分有一个额外的
,而对
的积分有一个
,与第 2.2.2 节,氢负离子的概率幅中的例子所见不同。在这个计算中,对
的积分等于 0,这意味着整个积分是:

这意味着电子 1 最有可能出现在原子核(或坐标系的起点)。对于
,
和
操作也是如此。
2.3.5. 动量操作
粒子
的动量算符分量沿着
维度是
(同样,对于
和
维度也是如此)并在笛卡尔坐标系中定义为以下:



我们也可以用球坐标导数[ucsd]来表示这些算符:



我们可以用以下方程计算给定粒子
的动量期望值:
其中我们使用
作为一个通用的维度。
例如,使用与第 2.2.2 节,氢负离子的概率振幅相同的系统
,电子 1 的
动量算符的导数是:

其中导数是:

因此,电子 1 的
动量的期望值是:


由于对
的积分,它变为 0,如下面的 SymPy 代码所示:
from sympy import symbols, sin, cos
x = symbols('x')
integrate(cos(x)*sin(x),(x,0,pi))
这里是结果:

这个结果直观,因为我们处于一个
系统,该系统没有动量。
2.3.6. 动能运算
在笛卡尔坐标系中,单个粒子在给定方向
的动能算符是:



通常,在笛卡尔坐标系中,动能由以下公式确定:

在球坐标中为:

我们可以用以下方程计算所有粒子的动能期望值:


使用与第 2.2.2 节,氢负离子的概率振幅相同的系统
,电子 1 动能的二阶导数运算是:




电子 1 的动能期望值随后通过以下方式计算:




其中电子质量被设为等于 1(
)。电子 2 的动能通过相同的积分确定,等于:

氢化物中电子的总动能是两个动能项的和:

将
设为标准尺度,我们得到:

2.3.7. 势能操作
势能,也称为库仑能,与粒子
和
的电荷相关,并取决于两者之间的距离
,其中
。它与距离的倒数成正比,并作为系统中所有粒子对的和来计算:

我们可以使用以下方程计算所有粒子的势能期望值:

使用与第 2.2.2 节中相同的系统,氢负离子的概率幅
,计算两个电子之间的势能(库仑)的期望值是:



现在我们使用狄拉克δ函数
来近似
的逆:

我们使用以下代码块来计算这个积分:
from sympy import symbols, integrate, exp, DiracDelta, oo
x, y = symbols('x y')
integrate(x**2 * exp(-2*x) * integrate(y**2 * exp(-2*y)*DiracDelta(x - y),(y,0,oo)),(x,0,oo))
结果是:

因此,电子排斥的期望值是:

电子 1 和核(粒子 3)之间计算的势能(库仑)的期望值是:



现在我们使用狄拉克δ函数
来近似
的逆:

我们使用以下代码块来计算这个积分:
from sympy import symbols, integrate, exp, DiracDelta, oo
x, y = symbols('x y')
integrate(x**2 * exp(-2*x) * integrate(DiracDelta(x - y),(y,0,oo)),(x,0,oo))
这里是结果:

因此,电子-核吸引的期望值是:

总势能是:

2.3.8. 总能量操作
总能量算符
是动能和势能操作的加和:

其中
是总能量。能量的期望值随后是:

使用与第 2.2.2 节中相同的系统,氢负离子的概率幅
,总能量的期望值是:

注意,氢化物的期望值主要由势能决定,这使得系统非常活泼。
2.4. 命题 4 – 时间独立定态
一个量子态是时间独立的定态,如果其所有可观测量都不依赖于时间。这些状态在量子化学中非常重要。电子的原子轨道和分子中的电子分子轨道都是时间独立的定态。
静态薛定谔方程可以写成以下形式,即静态:
,其中
是能量本征值,
是量子系统的状态向量,不是时间的函数。
这个假设意味着波函数必须是所有表示能量的测量和相应操作的固有函数。固有函数是在操作符作用下或进行测量时保持不变的函数。
我们在 第四章 分子哈密顿量 中更多地使用这个概念。
2.5. 命题 5 – 时间演化动力学
量子系统的动力学演化由薛定谔方程描述:

我们将在 第五章 变分量子本征值求解器 (VQE) 算法 中展示这个例子。
问题
请通过相应的 Google Colab 笔记本测试你对本章中提出的概念的理解。
-
总波函数依赖于哪些量子数?
-
如果我们将
、
和
、
与
、
相耦合,CG 系数是多少? -
在应用反对称操作后,总波函数会发生什么变化?
-
对于一个纯费米子态,Young 帧是水平的还是垂直的?
-
方向的位置算符是什么? -
势能和动能的总和是多少?
答案
-
和 ![公式]()
-
![公式]()
-
它乘以
![公式]()
-
垂直
-
![公式]()
-
总能量
参考文献
[Bubin] Bubin, S., Cafiero, M., & Adamowicz, L., 非 Born-Oppenheimer 变分计算原子和分子与显式相关高斯基函数,化学物理进展,131,377-475,doi.org/10.1002/0471739464.ch6
[Cmap] Matplotlib 中的颜色图选择,matplotlib.org/stable/tutorials/colors/colormaps.html
[Lucr_1] Lucretius on the Nature of Things,由牧师约翰·塞尔比·沃森(Rev. John Selby Watson,M.A.)直译成英文散文,伦敦 1870 年,www.google.fr/books/edition/Lucretius_On_the_Nature_of_Things/59HTAAAAMAAJ?hl=en&gbpv=1&printsec=frontcover
[Lucr_2] Thomas Nail, Lucretius: Our Contemporary, 15 Feb 2019, www.youtube.com/watch?v=VMrTk1A2GX8
[Lucr_3] David Goodhew,卢克莱修讲座,生命、爱情、死亡和原子物理学,www.youtube.com/watch?v=mJZZd3f_-oE
[NumPy] NumPy: 初学者绝对基础,numpy.org/doc/stable/user/absolute_beginners.html
[Phys5250] 角动量的加法,科罗拉多大学,PHYS5250,physicscourses.colorado.edu/phys5250/phys5250_fa19/lecture/lec32-addition-angular-momentum/
[SciPy_sph] SciPy,API 参考,计算球谐函数,scipy.special.sph_harm,docs.scipy.org/doc/scipy/reference/generated/scipy.special.sph_harm.html
[Sharkey_0] Keeper L. Sharkey 和 Ludwik Adamowicz,使用显式相关高斯基函数进行非相对论量子力学有限核质量变分计算氮原子在 L = 0, M = 0 状态的算法,J. Chem. Phys. 140, 174112 (2014),doi.org/10.1063/1.4873916
[SymPy_CG] SymPy,克莱布施-戈尔丹系数,docs.sympy.org/latest/modules/physics/quantum/cg.html
[SymPy_Rnl] 氢原子波函数,docs.sympy.org/latest/modules/physics/hydrogen.html
[SymPy] SymPy,Python 符号数学库,www.sympy.org/en/index.html
[Sph_Real] 维基百科,球谐函数,实形式,en.wikipedia.org/wiki/Spherical_harmonics#Real_forms
[Ucsd] 加利福尼亚大学圣地亚哥分校,球坐标系和角动量算符,quantummechanics.ucsd.edu/ph130a/130_notes/node216.html
[Wiki_1] 量子力学的数学表述,维基百科,en.wikipedia.org/wiki/Mathematical_formulation_of_quantum_mechanics
第三章:量子计算模型
“当我们扩展到一百万[量子比特]时,我认为我们在纠错、控制和可能量子物理方面有一些基本问题可能会出现,”他说,并补充说即使这些问题也是“可解决的”。
– 阿维林·克瑞什纳,IBM 董事长兼首席执行官

图 3.1 – 量子计算机的扩展 [作者]
经典计算和量子计算之间存在根本性的差异;经典计算是确定性的,由 1 和 0 组成,而量子计算是概率性的,并且有一个转折点。量子计算机使用概率振幅进行工作,这是量子力学的一个公设(见第 2.2 节,公设 2 – 概率振幅)。量子计算的概率振幅的行为与经典概率不同,因为这些值可以相互抵消,这被称为破坏性干涉。
破坏性干涉可以用降噪耳机来举例说明。具体来说,这是当两个或更多波相遇时,完全消除波的情况。换句话说,相遇的波相位相反且振幅相等。建设性干涉是指两个或更多波相遇,振幅以正方式相加。这两个特性对于以最高概率使计算机输出所需结果至关重要。
因此,干涉是量子计算核心所在,我们还使用了在第 2.1 节,公设 1 – 波函数中引入的波函数的概念,它被用来定义量子比特:信息量子。在量子计算行业中,状态矢量通常用作波函数的术语。
这两种计算方法之间的另一个区别是,在量子计算中,当我们添加一个额外的信息单位时,计算空间的大小翻倍。从理论上讲,这允许我们以指数级加速。
量子计算还使用叠加性质直到测量时刻来实现并行性。回想一下我们在第 2.3 节,公设 3 – 可测量的量和算子中讨论的叠加。量子算法需要重复乘以多次以获得测量的概率分布。
量子计算机的扩展为模拟化学系统铺平了道路,这可以使研究人员能够以比在实验室进行物理实验快得多的速度进行虚拟实验和发现新的分子。在构建可扩展量子计算机的同时,研究将费米子状态和算子最优映射到量子比特状态和量子门是利用近期量子计算机潜力的关键。
我们给出了一种此类映射的关键组件的示例,即一种以概率方式创建排列对称或排列非对称状态的量子电路。
在本章中,我们将涵盖以下主题:
-
第 3.1 节,量子比特、纠缠、玻色球、泡利矩阵
-
第 3.2 节,量子门
-
第 3.3 节,计算驱动的干涉
-
第 3.4 节,准备对称或非对称排列状态
技术要求
可以从 GitHub(github.com/PacktPublishing/Quantum-Chemistry-and-Computing-for-the-Curious)下载本章的配套 Jupyter 笔记本,该笔记本已在 Google Colab 环境中测试过,这是一个免费的环境,完全运行在云端,并在 IBM Quantum Lab 环境中。请参阅 附录 B – 在云端利用 Jupyter 笔记本 获取更多信息。配套的 Jupyter 笔记本会自动安装以下列表中的库:
-
数值 Python(NumPy)[NumPy],一个开源的 Python 库,在科学和工程领域的几乎所有领域都得到应用
-
Qiskit [Qiskit],一个开源的 SDK,用于在脉冲、电路和应用模块级别与量子计算机交互
-
Qiskit 可视化支持,用于启用可视化和 Jupyter 笔记本
-
Python 量子工具箱(QuTiP)[QuTiP],它被设计成一个通用的框架,用于解决量子力学问题,如由低能级量子系统和谐振子组成的系统
我们建议使用以下在线图形工具:
-
IBM Quantum Composer,这是一个图形量子编程工具,允许你拖放操作来构建量子电路并在真实的量子硬件或模拟器上运行它们 [IBM_comp1] [IBM_comp2]
-
理解玻色球,一个基于网络的程序,它显示玻色球并显示门的作用作为旋转 [Grok]
安装 NumPy、Qiskit、QuTiP 并导入各种模块
使用以下命令安装 NumPy:
pip install numpy
使用以下命令安装 Qiskit:
pip install qiskit
使用以下命令安装 Qiskit 可视化支持:
pip install 'qiskit[visualization]'
使用以下命令安装 QuTiP:
pip install qutip
使用以下命令导入 NumPy:
import numpy as np
导入所需的函数和类方法。array_to_latex function() 返回一个具有 1 或 2 维的复数数组的 LaTeX 表示形式:
from qiskit.visualization import array_to_latex, plot_bloch_vector, plot_bloch_multivector, plot_state_qsphere, plot_state_city
from qiskit import QuantumRegister, ClassicalRegister, QuantumCircuit, transpile
from qiskit import execute, Aer
import qiskit.quantum_info as qi
from qiskit.extensions import Initialize
from qiskit.providers.aer import extensions # import aer snapshot instructions
使用以下命令导入数学库:
import cmath
import math
使用以下命令导入 QuTiP:
import qutip
3.1. 量子比特、纠缠、玻色球、泡利矩阵
本节中介绍的概念是量子力学五条公设的特定应用,这些公设已在 第二章**,量子力学的公设 中介绍。
在本节中,我们将详细描述以下内容:
-
第 3.1.1 节,量子比特
-
第 3.1.2 节,量子比特的张量排序
-
第 3.1.3 节,量子纠缠
-
第 3.1.4 节,玻色球
-
第 3.1.5 节,显示与状态向量对应的玻色矢量
-
第 3.1.6 节,泡利矩阵
3.1.1. 量子比特
在本节中,我们描述了量子计算当前的设置以及量子比特的定义。量子比特是表示二维希尔伯特空间中二能级量子系统的信息单位,它存在于二维希尔伯特空间中
。量子空间的基向量表示为
,被称为计算基态:

一个一般的单量子比特状态由计算基的叠加描述:

其中
和
是线性展开系数,它们满足:

尽管量子比特在算法过程中处于量子叠加态,但当它在计算基下被测量时,它将被发现处于状态
或状态
,而不是叠加态。这些测量结果发生的概率分别为
和
。如果系统中存在
个量子比特,状态由一个向量在
维希尔伯特空间
中描述,该希尔伯特空间是通过将各个量子比特的希尔伯特空间进行张量积得到的。对于 10 个量子比特,状态由一个在 1,024 维希尔伯特空间中的向量描述。
3.1.2. 量子比特的张量排序
物理学界通常将
个量子比特的张量积按照
个量子比特位于张量积最左侧的顺序排列:

其中
。然而,Qiskit 使用一种排序方式,其中
个量子比特排在顺序的第一位,而
个量子比特排在最后:

换句话说,如果量子比特 0 处于状态
,量子比特 1 处于状态
,量子比特 2 处于状态
,许多物理学教材会表示为
,而 Qiskit 会表示为
。这种差异影响了多量子比特操作作为矩阵的表示方式,因此请留意,我们在书中使用 Qiskit。
3.1.3. 量子纠缠
当一个量子系统的量子状态不能作为其组成部分状态的张量积来分解时,该量子系统是纠缠的。状态可以分为单粒子状态的乘积或 纠缠:
- 乘积状态可以分解为较少量子比特的张量积,例如:

- 纠缠态不能分解为状态的张量积。例如,贝尔态
是纠缠的,只能测量为状态
或状态
,每个状态的测量概率为 1/2。
3.1.4. 毕奥-萨伐尔球
Bloch 球描述了空间中的量子比特,是 第 2.1 节,公设 1 – 波函数 中提出的坐标系统(图 3.2)的特例。量子比特的
向量,或其长度,总是等于 1,因此 Bloch 球的坐标为:

让我们关注 第 3.1.1 节,量子比特 中提出的单个量子比特的通用归一化纯态:
-
当
和
时,
状态在
方向上是“向上”的。 -
当
和
时,
状态在
方向上是“向下”的。

图 3.2 – Bloch 球 [作者]
我们在 第 2.1.2 节,使用克莱布施-戈尔丹系数求动量之和,例如:耦合自旋和角动量(
) 中推导了量子比特的广义公式:

然而,由量子计算行业建立并作为惯例,我们对在 Bloch 球上定义的量子比特的角度
和
进行了变量替换,以下适用:
-
在
中,它变为
在
中(请注意,正数的反余弦是一个第一象限角度) -
是
中的相对相位,忽略了全局相位 ![公式 03_051]()
这种变量替换导致量子比特在 Bloch 球上的状态向量(或波函数)的以下形式:

其中,我们将自旋向上和自旋向下的函数分别替换为状态向量
和
。从化学的角度来看,请注意,量子比特状态
表示自旋向上的角动量量子数
,因此没有在
轴上的角动量投影。此外,量子比特状态
表示自旋向下的角动量量子数
,并且在该
轴上有角动量投影。当我们介绍 第 3.1.6 节,泡利矩阵 中的泡利矩阵时,这一点很重要,因为我们将看到当应用操作时化学信息是如何被修改的。
在布洛赫球上,角度是希尔伯特空间中的两倍。例如,
和
在希尔伯特空间中是正交的,在布洛赫球上的角度是
。此外,我们想指出,
决定了测量
和
状态的概率,如下所示:
-
使得 ![]()
-
使得 ![]()
我们展示了布洛赫球上不同方向上的布洛赫向量,我们称之为极点态,如图 3.3 所示的表格所示:

图 3.3 – 计算基中的极点态及其在布洛赫球上的表示
3.1.5. 显示与状态向量对应的布洛赫向量
在以下代码中,check 函数对一个给定的复向量
进行合理性检查,以确保它是一个状态向量:
_EPS = 1e-10 # Global variable used to chop small numbers to zero
def check(s):
num_qubits = math.log2(len(s))
# Check if param is a power of 2
if num_qubits == 0 or not num_qubits.is_integer():
raise Exception("Input complex vector length is not a positive power of 2.")
num_qubits = int(num_qubits)
if num_qubits > 1:
raise Exception("Only one complex vector is allowed as input.")
# Check if probabilities (amplitudes squared) sum to 1
if not math.isclose(sum(np.absolute(s) ** 2), 1.0, abs_tol=_EPS):
raise Exception("Norm of complex vector does not equal one.")
return
接下来,ToBloch() 函数计算给定状态向量(复向量)的布洛赫向量,并以 LaTeX 格式显示角度和在布洛赫球上的向量。它有两个输入参数:
-
s:一个状态向量,一个复向量
。 -
show:设置为True以显示角度和布洛赫球上的向量。
它有三个输出参数:
-
theta:
在
中是布洛赫球上的角度。 -
phi:
在
中是相对相位,忽略全局相位。 -
r:这是布洛赫球上的向量。
def ToBloch(s, show=True):
check(s)
phi = cmath.phase(s[1]) - cmath.phase(s[0])
theta = 2*math.acos(abs(s[0]))
r1 = math.sin(theta)*math.cos(phi)
r2 = math.sin(theta)*math.sin(phi)
r3 = math.cos(theta)
r = (r1,r2,r3)
if show:
display(array_to_latex(s, prefix="\\text{s} = ", precision = 2))
display(array_to_latex([theta, phi], prefix="\\text{theta, phi} = ", precision = 2))
display(array_to_latex(r, prefix="\\text{r} = ", precision = 2))
b = qutip.Bloch()
b.add_vectors(r)
display(b.render())
return theta, phi, r
以下代码显示了与状态向量
对应的布洛赫向量:
s = [1/math.sqrt(2),complex(0.5, 0.5)]
(theta, phi, r) = ToBloch(s)
这里是使用 QuTiP Bloch() 函数显示布洛赫球的结果:

图 3.4 – 在布洛赫球上显示向量
最后,ToS 函数计算布洛赫向量的状态向量。它有三个输入参数:
-
theta:
在
中是布洛赫球上的角度。 -
phi:
在
中是相对相位,忽略全局相位。 -
show:设置为True以显示输入角度和状态向量。
它有一个输出参数:
s:一个状态向量,一个复向量![]()
def ToS(theta, phi, show=True):
s = [math.cos(theta/2), complex(math.cos(phi) * math.sin(theta/2), math.sin(phi) * math.sin(theta/2))]
if show:
display(array_to_latex([theta, phi], prefix="\\text{theta, phi} = ", precision = 2))
display(array_to_latex(s, prefix="\\text{s} = ", precision = 1))
return s
在这里,我们计算具有
和
的布洛赫向量的复振幅:
s = ToS(np.pi/2, np.pi/4)
这里是结果:


3.1.6. 泡利矩阵
有三个泡利矩阵,
,
,和
:
,
,
这些矩阵都是厄米矩阵和幺正矩阵,使得每个矩阵的平方等于
单位矩阵:

每个泡利矩阵都等于其逆矩阵:



我们在 图 3.5 中总结了泡利矩阵以及产生相关特征向量的量子比特操作:

图 3.5 – 泡利矩阵及其相关特征向量
在 图 3.6 中,我们在最左侧显示
量子比特状态,该状态在
-轴上没有角动量投影,如 Bloch 球体下的暗圈所示。在中间,我们显示
量子比特状态,该状态在
-轴上有角动量投影,如 Bloch 球体下的浅灰色圆圈所示。回想一下,我们在 3.1.4 节,Bloch 球体 中讨论了
和
量子比特状态的角动量投影。在最右侧,我们指示对
量子比特状态进行的
操作,该操作通过
修改了角动量投影。

图 3.6 – 在基态
和
上对泡利 Z 操作的说明,使用 Grok the Bloch 球体
操作对角动量投影没有影响,而
操作通过
修改了角动量投影。
在符号基
中的测量
让我们在符号基
中测量一个状态,该基也被称为根据泡利矩阵
进行的测量。为了进行这种测量,我们将基从符号基
转换为标准基
,其中:


这允许我们重新写出状态:

测量的可能结果及其对应概率和新状态列在 图 3.7 中:

图 3.7 – 在符号基
中的测量
根据泡利
操作测量状态
的期望值是:

这意味着我们需要通过取复共轭转置来计算符号基中的正交归一矢量:

我们还需要将泡利操作从标准基转换为符号基:

回想一下,一个基矢量乘以一个共轭基矢量,正如之前所见(
和
),是一个外积,它产生一个矩阵,而一个共轭基矢量乘以一个基矢量是一个标量。因此,我们得到期望值的计算如下:



请记住,在一般情况下,
和
是复数,虚部可能为零。期望值是所有可能结果(1 和-1)的测量值的总和,这些结果是对一个在符号基下测量的状态
的概率加权。
将矩阵分解为泡利矩阵张量积的加权之和
可以证明任何矩阵都可以分解为单位矩阵和泡利矩阵
的张量积的加权之和,其中
的权重为
和
个量子比特:

对于厄米矩阵,所有权重
都是实数。
我们为任何 2x2 矩阵,
提供一个证明:




由于
,因此
,我们有:


从将 2x2 矩阵分解为外积之和开始:

我们可以进一步写出:


3.2. 量子门
量子门是作用于一个、两个或三个量子比特的幺正算子 (
)。当作用于量子态时,范数得到保持。量子门对量子态的作用对应于表示该门的矩阵与表示量子态的向量的乘积:
。
在本节中,用张量积表示
个量子比特,第一个量子比特位于张量积的最左侧:
其中
。请注意,除非特别指定,我们不会使用 Qiskit 量子比特的张量排序。
在本节中,我们涵盖了以下内容:
-
第 3.2.1 节,单量子比特量子门
-
第 3.2.2 节,双量子比特量子门
-
第 3.2.3 节,三量子比特量子门
-
第 3.2.4 节,串行连接门和并行量子门
-
第 3.2.5 节,贝尔态的生成
-
第 3.2.6 节,并行哈达玛门
3.2.1. 单量子比特量子门
单量子比特门
有一个
的幺正矩阵形式:
。
在本节中,我们详细描述以下内容:
-
门 -
哈达玛 (
) 门 -
广义单量子比特量子门
我们总结了常用量子门并提供了一些有用关系。
门
一个
门将
映射到
和
映射到
。它是经典计算机中 NOT 门的量子等价物,有时被称为位翻转。对于经典计算,NOT 门将 0 变为 1,将 1 变为 0。
门相当于在布洛赫球的 X 轴上旋转π弧度。

霍尔丹 (
) 门
Hadamard 门将基态
映射到
,也写作
,以及
映射到
,也写作
。它表示在
和
轴中间(45
角度)的轴上旋转π。对状态
或状态
的测量将具有 0 或 1 的等概率,从而产生状态的叠加。

将应用于寄存器中 0 比特 (
) 的 Hadamard 门写成如下形式是方便的:
其中
。请注意,Hadamard 门 (
) 与哈密顿算子 (
) 具有类似的符号;区别在于帽子 (
) 符号。
通用单量子比特量子门
所有单量子比特门都可以从以下矩阵
中获得,该矩阵通过适当选择参数
,其中
,
,
[Qiskit_Op] 描述了所有单位矩阵,直到全局相因子。

门
具有如下矩阵形式:

门
具有如下矩阵形式:

单量子比特量子门总结及有用关系
图 3.8 展示了单量子比特量子门的主要列表:

图 3.8 – 单量子比特量子门
旋转算子门
、
和
分别在布洛赫球的
、
和
轴上执行旋转:



我们想指出,![公式 _03_321.png] 门可以通过使用 Hadamard 门和![公式 _03_322.png]门的组合来获得:![公式 _03_323.png]。反之亦然:![公式 _03_324.png]。这意味着在测量之前应用![公式 _03_326.png]门时,我们可以将状态投影到 Bloch 球的![公式 _03_315.png]-轴上。同样,当首先应用![公式 _03_328.png]门,然后应用![公式 _03_326.png]门时,可以投影到![公式 _03_316.png]-轴上。这样,我们可以执行量子比特全息术(即通过![公式 _03_330.png],![公式 _03_316.png],和![公式 _03_332.png]测量来重建 Bloch 矢量)。这些门操作总结在 图 3.9 中:

图 3.9 – 关系 ![公式 _03_333.png], ![公式 _03_334.png]
3.2.2. 二量子比特量子门
一个二量子比特门 ![公式 _03_335.png] 是一个 ![公式 _03_336.png] 单位矩阵 ![公式 _03_337.png],作用于两个量子比特。
我们在 图 3.10 中总结了常用的二量子比特量子门。

图 3.10 – 二量子比特量子门
3.2.3. 三量子比特量子门
一个三量子比特门 U 是一个 ![公式 _03_364.png] 单位矩阵 ![公式 _03_365.png],作用于三个量子比特。我们总结了常用的三量子比特量子门在 图 3.11 中:

图 3.11 – 三量子比特量子门
3.2.4. 串联连接的量子门和并行量子门
量子门上的操作是从左到右依次应用的,并且没有循环。串联的两个门 ![公式 _03_335.png] 和 ![公式 _03_384.png] 等价于两个门的矩阵乘积,如图 图 3.12 所示:

图 3.12 – 串联量子门
并联的两个门 ![公式 _03_391.png] 和 ![公式 _03_392.png] 等价于两个门的张量积 ![公式 _03_393.png],如图 图 3.13 所示:

图 3.13 – 并行量子门
3.2.5. 生成贝尔态
贝尔态是最大纠缠的纯量子态,共有四个:
![公式 _03_409.jpg] ![公式 _03_410.jpg] ![公式 _03_411.jpg] ![公式 _03_412.jpg]
量子电路是一系列有序的指令、量子门、测量和重置,应用于量子比特寄存器,并且可能基于实时经典计算进行条件化。现在,几个量子硬件平台支持动态量子电路,这允许在电路中测量结果的同时进行并发经典处理 [Corcoles] [IBM_mid]。在第 3.4 节,准备对称或反对称态中,我们展示了一个经典程序,该程序旨在通过后选择控制量子比特测量的结果来获得所需的量子态。量子电路中没有循环,但我们可以有一个经典循环,它附加一个量子子电路。在 Qiskit 中,我们使用QuantumRegister类来创建量子比特寄存器,使用QuantumCircuit类来创建量子电路。
让我们使用 Qiskit 构建一个创建第一个贝尔态 ![img/Formula_03_413.png] 的量子电路:
q = QuantumRegister(2)
qc = QuantumCircuit(q)
qc.h(q[0])
qc.cx(q[0], q[1])
qc.draw(output='mpl')
图 3.14 展示了结果:

图 3.14 – 创建贝尔态的 Qiskit 量子电路
我们使用quantum_info模块中的Statevector.from_instruction()类方法来获取最终状态向量 ![img/Formula_03_414.png]:
s = qi.Statevector.from_instruction(qc)
s.draw('latex', prefix='|s \\rangle = ')
图 3.15 展示了结果:

图 3.15 – 最终状态向量 – 贝尔态
最终状态向量只能在状态 ![img/Formula_03_415.png] 或 ![img/Formula_03_416.png] 中测量,每个状态的概率为 1/2。
我们使用DensityMatrix.from_instruction()类方法来获取最终状态向量的密度矩阵表示:
rho = qi.DensityMatrix.from_instruction(qc)
rho.draw('latex', prefix='\\rho = ')
图 3.16 展示了结果:

图 3.16 – 密度矩阵 – 贝尔态
我们可以使用状态的城市景观图来可视化密度矩阵:
from qiskit.visualization import plot_state_city
plot_state_city(rho.data, title='Density Matrix')
图 3.17 展示了结果:

图 3.17 – 城市景观图 – 贝尔态
3.2.6. 并行 Hadamard 门
可以证明,将并行 Hadamard 门应用于初始化为零状态的量子比特寄存器,将其置于所有可能状态的均匀叠加中。让我们通过应用一个、两个和三个 Hadamard 门来实验其效果。在本节中,我们将构建以下内容:
-
一个 Hadamard 门
-
两个并行的 Hadamard 门
-
三个并行的 Hadamard 门
create_parallel_H() 函数创建一个包含 n 个并行 Hadamard 门的量子电路:
def create_parallel_H(n):
q = QuantumRegister(n, 'q')
qc = QuantumCircuit(q)
for k in range(n):
qc.h(k)
return qc
run_parallel_H() 函数创建并执行一个包含 n 个并行 Hadamard 门的量子电路,并显示最终状态向量的图:
def run_parallel_H(n):
qc = create_parallel_H(n)
s = qi.Statevector.from_instruction(qc)
display(s.draw('latex'))
display(qc.draw(output='mpl'))
return
让我们创建一个只有一个 Hadamard 门的量子电路:
run_parallel_H(1)
图 3.18 展示了结果:

图 3.18 – 一个 Hadamard 门
接下来,我们构建一个包含两个并行 Hadamard 门的量子电路:
run_parallel_H(2)
图 3.19 展示了结果:

图 3.19 – 两个并行的 Hadamard 门
最后,让我们构建一个包含三个并行 Hadamard 门的电路:
run_parallel_H(3)
图 3.20 展示了结果:

图 3.20 – 三个并行 Hadamard 门
3.3. 计算驱动的干涉
在本节中,我们介绍了第 3.3.1 节,量子计算过程中通用量子计算的过程。然后我们在第 3.3.2 节,模拟左旋和右旋对映异构体状态量子叠加的干涉测量中给出了一个受化学实验启发的模拟示例。在化学中,互为镜像的分子或离子被称为对映异构体或光学异构体。如果这些镜像不可叠加,它们被称为手性分子[ChemChiral],并且它们在旋转平面偏振光的能力上有所不同[Wonders]。研究人员提出了一种实验,以制备对映异构体的左旋和右旋状态的量子叠加,并执行基于手性依赖力的干涉测量[Stickler]。
3.3.1. 量子计算过程
量子计算使用干涉以及叠加和纠缠等量子物理现象。典型的量子计算包括以下步骤:
-
准备所有可能基态的均匀叠加。将一个初始化为零态的量子比特寄存器置于所有可能基态的均匀叠加状态,只需应用并行 Hadamard 门,正如我们之前所展示的那样。
-
协调量子干涉和纠缠。一个量子算法应该被设计成,在计算结束时,只有那些感兴趣的量子状态的相对幅度和相位将保留。
-
多次重复测量。为了获得可能的测量结果的分布,测量需要重复数百或数千次。这是量子计算与经典计算之间的关键区别。
3.3.2. 模拟左旋和右旋对映异构体状态量子叠加的干涉测量
让我们使用 Qiskit 设计一个受对映异构体干涉仪启发的量子电路。我们用两个量子比特表示一个单一的对映异构体。我们在传播方向量子比特
中将水平传播编码为状态
,将垂直传播编码为状态
。我们用 Pauli
矩阵模拟镜子,用
矩阵模拟分束器(
):

按照惯例,反射被分配一个
的相移。从先前的单位矩阵中,我们创建了一个名为 BS 的分束器门,其 Qiskit 代码如下:
from qiskit.extensions import UnitaryGate
i = complex(0.0, 1.0)
BS = 1/np.sqrt(2) * np.array([[1,i],[i,1]])
BS = UnitaryGate(BS,'Beam Splitter')
我们在以下方面对手性量子比特
进行编码:
-
左旋态作为
态 -
右旋态作为
态 -
通过应用 Hadamard 门获得的左右手态叠加
![]()
我们模拟了一个偏振分束器 (
):

该矩阵 PBS [Rioux] 传输左手态并反射右手态。与分束器不同,反射时没有相位变化。从前面的单位矩阵中,我们创建了一个名为 PBS 的偏振分束器门,以下是用 Qiskit 代码实现的:
PBS = np.array([[1,0,0,0],[0,0,0,1],[0,0,1,0],[0,1,0,0]])
PBS = UnitaryGate(PBS,'PBS')
我们定义了一个show()函数,它使用 LaTeX 显示量子电路的绘制和状态向量的状态,如下所示:
def show(qc):
display(qc.draw(output='mpl'))
s = qi.Statevector.from_instruction(qc)
display(array_to_latex(s, prefix="\\text{state vector} = ", precision = 2))
return
我们使用以下 Qiskit 代码模拟偏振分束器对一个水平移动且处于右手状态的异构体的作用:
q = QuantumRegister(2, 'q') # register of 2 qubits
# q[0] handedness qubit,|0⟩ left-handed,|1⟩ right-handed
# q[1] direction of propagation qubit,|0⟩ horizontal,|1⟩ vertical
qc = QuantumCircuit(q)
qc.x([0]) # Right-handed
show(qc)
qc.append(PBS, q)
show(qc)
图 3.21 展示了结果:

图 3.21 – 右手态异构体与偏振分束器相互作用的模拟
水平移动且处于右手状态的异构体,由
表示,使用 Qiskit 的量子比特张量排序,其传播方向上的垂直方向已被偏振分束器反射,由
表示。
我们使用以下 Qiskit 代码模拟偏振分束器对一个水平移动且处于左右手态叠加的异构体的作用:
q = QuantumRegister(2, 'q') # register of 2 qubits
# q[0] handedness qubit,|0⟩ left-handed, |1⟩ right-handed
# q[1] direction of propagation qubit, |0⟩ horizontal, |1⟩ vertical
qc = QuantumCircuit(q)
qc.h(q[0]) # Put enantiomer in a superposition of left- and right-handed states
show(qc)
qc.append(PBS, q)
show(qc)
图 3.22 展示了结果:

图 3.22 – 左右手态异构体与偏振分束器相互作用的模拟
水平移动且处于左右手态叠加的异构体,由
表示,使用 Qiskit 的量子比特张量排序,被偏振分束器置于贝尔态
,即左右手态水平移动和右手态垂直移动的叠加,从而实现干涉测量。
现在我们继续准备排列对称和反对称态。
3.4.1 准备一个对称或反对称的态
给定两个量子比特
和
,我们希望构建一个在量子比特
和
的排列下保持不变的对称态,或者一个在量子比特
和
的排列下乘以
的反对称态。在本节中,我们展示了如何使用 Qiskit 准备和模拟的量子电路以概率方式准备此类状态:
-
3.4.1 节,创建随机状态
-
3.4.2 节,创建量子电路和初始化量子比特
-
3.4.3 节,使用受控交换门交换两个量子比特的电路
-
3.4.4 节,后选择控制量子比特直到获得所需状态
-
第 3.4.5 节,最终对称化和反对称化状态的示例
3.4.1. 创建随机状态
我们定义了一个名为init_random()的函数,它创建随机 1 量子比特状态s1和s2,我们将使用这些状态进行后续的随机状态实验:
def init_random():
# Create random 1-qubit state s1
s1 = qi.random_statevector(2)
display(array_to_latex(s1, prefix="\\text{State 1} =", precision=2))
# Create random 1-qubit state s2
s2 = qi.random_statevector(2)
display(array_to_latex(s2, prefix="\\text{State 2} =", precision =2))
return s1, s2
3.4.2. 创建量子电路和初始化量子比特
我们定义了setup_qc()函数,它设置初始化指令以从输入的状态向量s1和s2创建量子比特
和
,以及一个带有控制量子比特
初始化在状态
、量子比特
和
和一个用于测量的经典寄存器c
的量子电路qc:
def setup_qc(s1, s2, draw=False):
init_q1 = Initialize(s1)
init_q1.label = "init_q1"
init_q2 = Initialize(s2)
init_q2.label = "init_q2"
q = QuantumRegister(3, 'q') # register of 3 qubits
c = ClassicalRegister(1, name="c") # and 1 classical register
qc = QuantumCircuit(q,c)
qc.append(init_q1, [1])
qc.append(init_q2, [2])
qc.barrier()
if draw:
display(qc.draw(output='mpl'))
return qc, q, c
3.4.3. 创建一个使用受控交换门交换两个量子比特的电路
我们定义了swapper()函数,它创建一个量子电路如下[Spheres]:
-
对控制量子比特
应用 Hadamard 门,将其置于状态![公式 _03_450.png]()
-
应用一个受控交换门,将两个量子比特
和
置于交换和不交换的叠加态 -
再次对控制量子比特
应用 Hadamard 门
这里是其实施方法:
def swapper(draw=False):
q = QuantumRegister(3, 'q') # register of 3 qubits
qc = QuantumCircuit(q, name='Swapper')
qc.h(q[0])
qc.cswap(q[0], q[1], q[2])
qc.h(q[0])
if draw:
print("Swapper circuit")
display(qc.draw(output='mpl'))
return qc
让我们使用单元算符模拟器获取对应于交换量子电路的单元矩阵:
q = QuantumRegister(3, 'q') # register of 3 qubits
qc = QuantumCircuit(q)
qc.append(swapper(draw=True), qargs=q)
# Selecting the unitary_simulator
backend = Aer.get_backend('unitary_simulator')
# Executing the job and getting the result as an object
job = execute(qc, backend)
result = job.result()
# Getting the unitary matrix from the result object
U = result.get_unitary(qc, decimals=2)
array_to_latex(U, prefix="\\text{swapper unitary} = ", precision = 2)
图 3.23显示了结果:

图 3.23 – 交换电路的单元矩阵
计算交换单元算符的作用
与两个量子比特
和
相关的初始状态向量可以写成以下形式:

交换单元算符对初始状态向量作用如下,使用张量积的 Qiskit 排序:


当控制量子比特
在状态
下被测量时,计算最终状态
如果控制量子比特
在状态
下被测量,则通过丢弃所有不贡献于此结果的振幅
、
、
和
,然后重新归一化来计算最终状态:

回想一下,
、
、
和
是我们在 3.2.5 节,贝尔态的生成 中引入的贝尔态。
和
的振幅
在最终状态中的归一化因子下保持不变。对称化的贝尔态
保持不变。
和
的振幅
在贝尔态
中混合,该态是对称化的。
当控制量子比特
测量在状态
时计算最终状态
如果控制量子比特
测量在状态
中,则通过丢弃所有不贡献于此结果振幅
、
、
和
,然后重新归一化来计算最终状态:

最终状态中唯一的非零振幅是位于
和
子空间中的振幅,这些振幅在贝尔态
中混合,该态是反对称化的。
这些对称性和反对称性的特性是高效实现 变分量子本征求解器 (VQE) 算法 [Gard] 的关键,我们将在 第六章**,变分量子本征求解器算法 中介绍。
3.4.4. 选择控制量子比特,直到获得所需状态
我们定义了 post_select() 函数,该函数执行一个循环,执行交换电路并测量控制量子比特
的状态,直到获得所需的对称化或反对称化状态,或者达到最大迭代次数:
-
添加由
swapper()函数创建的电路。 -
测量控制量子比特
。如果我们得到 0,那么量子比特
和
处于对称化状态,如果我们得到 1,那么量子比特
和
处于反对称化状态。
然后,post_select() 调用 proc_result() 函数来处理结果。
post_select() 函数有以下输入参数:
-
simulator,默认为statevector_simulator,模拟完美的量子比特。 -
symm:设置为True以获得对称化状态,设置为False以获得反对称化状态。 -
shots是射击次数,默认设置为1。 -
max_iter是最大迭代次数,默认设置为20。 -
swap_test设置为True以执行交换测试,以确定最终状态是否为置换对称或置换反对称,默认设置为False。
这里是代码:
def post_select(qc, q, c, symm=True, simulator='statevector_simulator', shots=1, max_iter=20, swap_test=False):
backend = Aer.get_backend(simulator)
s = qi.Statevector.from_instruction(qc)
display(array_to_latex(s, prefix="\\text{Initial state} = ", precision = 2))
done = False
iter = 0
while not done and iter < max_iter:
qc.append(swapper(draw=(iter==0)), qargs=q)
qc.measure(q[0], c[0]) # Measure control qubit q[0]
qc.save_statevector(label=str(iter)) # Save the current simulator state vector
job = execute(qc, backend, shots=shots) # Execute the Simulator
result = job.result()
counts = result.get_counts(qc)
for k, v in counts.items():
if symm and k == '0' and v > shots/2:
done = True
elif not symm and k == '1' and v > shots/2:
done = True
if not done:
qc.reset(q[0])
iter += 1
success = proc_result(result, iter, counts, max_iter=max_iter, symm=symm, simulator=simulator, swap_test=swap_test)
return result, success
proc_result() 函数处理结果,显示保存的状态向量,并调用 factor() 函数。如果输入参数 swap_test 设置为 True,则调用 swap_check() 函数,该函数测试最终状态是否为置换对称或置换反对称。
它返回 Success,一个布尔值;如果已获得所需状态,则为 True,否则为 False:
def proc_result(result, iter, counts, max_iter=20, symm=True, simulator='statevector_simulator', swap_test=False):
if symm:
print("Preparing a permutation symmetric state")
else:
print("Preparing a permutation antisymmetric state")
print("simulator:", simulator)
print("counts: ", counts)
if iter >= max_iter:
print("Post selection unsuccessful iteration {}".format(iter))
success = False
else:
print("Post selection successful iteration {}".format(iter))
success = True
s = result.data()[str(iter)]
factor(s, symm) # Call factor()
if swap_test:
swap_check(qc, q, iter, symm, s, simulator=simulator)
print(" ") # Display Density matrix of the final state
display(array_to_latex(qi.DensityMatrix(s), prefix="\\text{Density matrix of the final state: }", precision = 2))
display(plot_state_city(s, title='Cityscape plot of the final state')) # Display Cityscape plot of the final state
return success
sym_test() 函数确定状态向量的两个振幅是否相等或相反,以及它们模平方之和是否等于 1:
def sym_test(s, symm, i0, i1):
if symm:
b = np.isclose(np.abs(s[i0]-s[i1]), 0, rtol=_EPS) and np.isclose(np.abs(s[i0]**2 + s[i1]**2), 1, rtol=1e-4)
else:
b = np.isclose(np.abs(s[i0]+s[i1]), 0, rtol=_EPS) and np.isclose(np.abs(s[i0]**2 + s[i1]**2), 1, rtol=1e-4)
return b
factor() 函数尝试将最终状态分解为控制量子比特
和置换对称贝尔态
或
,或者置换反对称贝尔态
或
的张量积,这些状态在 第 3.2.5 节,贝尔态的创建 中介绍:
def factor(s, symm):
b0 = np.allclose(s, [1, 0, 0, 0, 0, 0, 0, 0], rtol=_EPS)
b1 = np.allclose(s, [0, 0, 0, 0, 0, 0, 1, 0], rtol=_EPS)
b2 = sym_test(s, symm, 2, 4)
b3 = sym_test(s, symm, 3, 5)
b4 = sym_test(s, symm, 0, 6)
b5 = sym_test(s, symm, 1, 7)
df = {b0: "|00", b1: "|11", b2: "|\\Psi_+", b3: "|\\Psi_-", b4: "|\\Phi_+", b5: "|\\Phi_-"}
found = False
for k, v in df.items():
if not found and symm and k:
display(array_to_latex([s], prefix = "\\text{Symmetrized state: }" + v + "\\rangle, \\text{ Final state: }" + v + " \\rangle |0 \\rangle =", precision = 2))
found = True
elif not found and not symm and k:
display(array_to_latex([s], prefix = "\\text{Antisymmetrized state: }" + v + "\\rangle, \\text{ Final state: }" + v + " \\rangle |1 \\rangle =", precision = 2))
found = True
if not found:
display(array_to_latex(s, prefix="\\text{Final state} = ", precision = 2))
return
swap_check() 函数测试最终状态是否为置换对称或置换反对称。它调用 swap() 函数,然后比较交换前后的状态:
def swap_check(qc, q, iter, symm, s, simulator='statevector_simulator'):
s21 = swap(qc, q, iter, simulator=simulator)
if symm:
if np.allclose(s-s21, 0, rtol=_EPS):
print("Swap test confirms that final state is permutation symmetric")
else:
if np.allclose(s+s21, 0, rtol=_EPS):
print("Swap test confirms that final state is permutation asymmetric")
return
swap() 函数执行量子比特
和
的交换,测量控制量子比特,并返回用于比较的最终状态向量:
def swap(qc, q, iter, simulator='statevector_simulator'):
backend = Aer.get_backend(simulator)
qc.swap(q[1], q[2])
qc.measure(q[0], c[0]) # Measure control qubit q[0]
qc.save_statevector(label=str(iter+1)) # Save the current simulator state vector
job = execute(qc, backend, shots=1) # Execute the Simulator
result = job.result()
s21 = result.data()[str(iter+1)]
return s21
3.4.5. 最终对称化和反对称化状态的例子
我们现在实现五个实验,创建:
-
从状态
得到的对称化状态 -
从状态
得到的反对称化状态 -
从随机状态初始化的量子比特得到的对称化状态
-
从随机状态初始化的量子比特得到的反对称化状态
-
从贝尔态
得到的对称化状态
从状态
创建对称化状态的实验
我们在状态
和
中创建两个状态向量,将它们作为输入传递给 setup_qc() 函数,然后调用 post_select() 函数,将 symm 设置为 True:
s1 = qi.Statevector([0, 1])
s2 = qi.Statevector([1, 0])
qc, q, c = setup_qc(s1, s2)
result, success = post_select(qc, q, c, symm=True)
我们已经获得了对称化状态
,如图 图 3.24 所示:

图 3.24 – 从状态
获得的对称化状态
我们在 图 3.25 中使用最终状态的市景图显示密度矩阵:

图 3.25 – 从状态
获得的对称化状态的市景图
我们使用量子电路类的 draw() 方法显示量子电路:
qc.draw(output='mpl', plot_barriers=False)
经过一次迭代后,量子电路看起来像 图 3.26:

图 3.26 – 经过一次迭代后的量子电路
从状态
创建反对称态的实验
我们在状态
和
中创建两个状态向量,将它们作为输入传递给setup_qc()函数,然后调用post_select()函数,将symm设置为False:
s1 = qi.Statevector([0, 1])
s2 = qi.Statevector([1, 0])
qc, q, c = setup_qc(s1, s2)
result, success = post_select(qc, q, c, symm=False)
我们已经获得了反对称态
,如图 3.27 所示:

图 3.27 – 从状态
获得的反对称态
我们在图 3.28中展示了最终状态的城市景观图来展示密度矩阵:

图 3.28 – 从状态
获得的反对称态的城市景观图
从随机状态初始化的量子比特创建对称态的实验
我们使用init_random()创建两个在随机状态下的状态向量,将它们作为输入传递给setup_qc()函数,然后调用post_select()函数,将symm设置为True,将swap_test设置为True以确认最终状态确实是排列对称的。根据第 3.4.3 节的计算,我们期望最终状态有四个非零振幅:构建一个使用受控交换门交换两个量子比特的电路,当控制量子比特
在状态
下测量时计算最终状态:
s1, s2 = init_random()
qc, q, c = setup_qc(s1, s2)
result, success = post_select(qc, q, c, symm=True, swap_test=True)
在图 3.29中,我们展示了最终状态具有四个非零振幅的结果,正如预期的那样,交换测试已确认最终状态是排列对称的:

图 3.29 – 从随机状态初始化的量子比特获得的对称态
在图 3.30中展示的最终状态的城市景观图中,我们看到状态
在测量最终状态后具有最大的概率出现:

图 3.30 – 从随机状态初始化的量子比特获得的对称态的城市景观图
从随机状态初始化的量子比特创建反对称态的实验
我们使用init_random()创建两个在随机状态下的状态向量,将它们作为输入传递给setup_qc()函数,然后调用post_select()函数,将symm设置为False:
s1, s2 = init_random()
qc, q, c = setup_qc(s1, s2)
result, success = post_select(qc, q, c, symm=False)
我们已经获得了反对称态
,如图 3.31 所示:

图 3.31 – 从随机状态初始化的量子比特获得的反对称态
我们在图 3.32中展示了最终状态的城市景观图来展示密度矩阵:

图 3.32 – 从随机状态初始化的量子比特获得的反对称态的城市景观图
从贝尔态
创建对称态的实验
我们定义了一个名为 setup1_qc() 的函数,该函数设置一个量子电路,将量子比特
和
置于贝尔态
,如下所示:
def setup1_qc(draw=False):
q = QuantumRegister(3, 'q') # register of 3 qubits
c = ClassicalRegister(1, name="c") # and 1 classical register
qc = QuantumCircuit(q,c)
qc.h(q[1])
qc.cx(q[1], q[2])
qc.barrier()
if draw:
display(qc.draw(output='mpl'))
return qc, q, c
我们执行以下代码,该代码调用 setup1_qc() 创建贝尔态
,然后调用 post_select() 函数,将 symm 设置为 True:
qc, q, c = setup1_qc()
result, success = post_select(qc, q, c, symm=True)
如预期在 第 3.4.3 节,创建一个使用受控交换门交换两个量子比特的电路 中,紧随其后的交换电路对量子比特
在状态 0 的测量,不会改变对称化的贝尔态
,如图 图 3.33 所示:

图 3.33 – 从贝尔态
获得的对称化状态
我们在 图 3.34 中展示了最终状态的城市景观图来表示密度矩阵:

图 3.34 – 从贝尔态
获得的最终状态的城市景观图
参考文献
[ChemChiral] 5.1 手性分子,Chemistry LibreTexts,2015 年 7 月 5 日,chem.libretexts.org/Bookshelves/Organic_Chemistry/Map%3A_Organic_Chemistry_(Vollhardt_and_Schore)/05._Stereoisomers/5.1%3A_Chiral__Molecules
[Corcoles] A. D. Córcoles,Maika Takita,Ken Inoue,Scott Lekuch,Zlatko K. Minev,Jerry M. Chow,和 Jay M. Gambetta,在超导量子比特量子算法中利用动态量子电路,物理评论快报 127,100501,2021 年 8 月 31 日,journals.aps.org/prl/abstract/10.1103/PhysRevLett.127.100501
[Crockett] Christopher Crockett,手性分子的叠加,2021 年 9 月 14 日,物理 14,s108,physics.aps.org/articles/v14/s108
[Gard] Gard, B.T., Zhu, L., Barron, G.S. 等人,高效保持对称性的变分量子本征求解算法状态制备电路,npj 量子信息 6, 10 (2020),doi.org/10.1038/s41534-019-0240-1
[Grok] 理解布洛赫球,javafxpert.github.io/grok-bloch/
[IBM_CEO] IBM 首席执行官:本十年量子计算将“像火箭一样”起飞,Fast Company,2021 年 9 月 28 日,www.fastcompany.com/90680174/ibm-ceo-quantum-computing-will-take-off-like-a-rocket-ship-this-decade
[IBM_comp1] 欢迎来到 IBM 量子作曲家,quantum-computing.ibm.com/composer/docs/iqx/
[IBM_comp2] IBM 量子作曲家,quantum-computing.ibm.com/composer/files/new
[IBM_mid] 中断电路测量教程,IBM 量子系统,quantum-computing.ibm.com/lab/docs/iql/manage/systems/midcircuit-measurement/
[NumPy] NumPy:初学者的绝对基础,numpy.org/doc/stable/user/absolute_beginners.html
[Qiskit] Qiskit,qiskit.org/
[QuTiP] QuTiP,在布洛赫球上绘图,qutip.org/docs/latest/guide/guide-bloch.html
[Rioux] 使用张量代数分析马赫-曾德尔偏振干涉仪,faculty.csbsju.edu/frioux/photon/MZ-Polarization.pdf
[Spheres] 如何在实际量子计算机上准备一个置换对称的多量子比特态,spheres.readthedocs.io/en/stable/notebooks/9_Symmetrized_Qubits.html
[Stickler] B. A. Stickler 等人,来自手性分子物质波干涉的对映异构体叠加,物理评论 X 11,031056 (2021),journals.aps.org/prx/abstract/10.1103/PhysRevX.11.031056
[奇迹] 光学异构体、对映异构体和手性分子,化学奇迹,www.youtube.com/watch?v=8TIZdWR4gIU
第四章:分子哈密顿算符
“我们大多数人所能期望在物理学上达到的最好成果,就是在一个更深的层次上误解。”
– 魏冈·泡利

图 4.1 – 魏冈·泡利寻求对与费米子自旋相关的反对称性的更深入理解 [作者]
在魏冈·泡利 1946 年的诺贝尔演讲结束时 [Pauli],他陈述道:
“我可能表达我的批评意见,即正确的理论既不应导致无限零点能量,也不应导致无限零电荷,它不应使用数学技巧来减去无穷大或奇点,也不应在能够对物理世界的实际现实进行正确解释之前发明一个仅是数学虚构的假设世界。”
本章中的概念有数学公式,但没有物理或化学现实性。换句话说,使用了标准近似,允许确定有用的化学量。使用这些近似的计算并不代表精确量;相反,它们是近似量。因此,为了获得更精确和更好的答案,需要对这些近似有更深入的理解。
此外,本章中使用的近似方法仅适用于费米子(电子)系统。将这种方法扩展到玻色子系统是更广泛科学界的研究领域。我们将看到在基态能量计算中虚拟轨道和占据轨道以及未占据轨道的实施和使用。
我们提到了哈特里-福克(HF)理论的实施不同级别:限制性哈特里-福克(RHF)、限制性开壳哈特里-福克(ROHF)和非限制性哈特里-福克(UHF);然而,通过 Qiskit,我们只会展示 RHF。还有后 HF 方法可以使用,例如耦合簇(CC),我们将在第五章“变分量子本征值求解器”中使用。
在本章中,我们将求解氢分子和锂氢分子的费米子哈密顿算符方程,并涵盖以下主题:
-
第 4.1 节,波恩-奥本海默近似
-
第 4.2 节,福克空间
-
第 4.3 节,费米子生成和湮灭算符
-
第 4.4 节,哈特里-福克轨道基中的分子哈密顿算符
-
第 4.5 节,基组
-
第 4.6 节,使用 Qiskit Nature 构建费米子哈密顿算符
-
第 4.7 节,费米子到量子比特映射
-
第 4.8 节,使用 Qiskit Nature 构建量子比特哈密顿算符
技术要求
我们提供了一个链接到本章的配套 Jupyter 笔记本,该笔记本已在 Google Colab 环境中测试,这是一个免费且完全在云端运行的环境,以及 IBM Quantum Lab 环境。请参阅附录 B – 在云端利用 Jupyter 笔记本,获取更多信息。配套的 Jupyter 笔记本自动安装以下列表中的库:
-
NumPy [NumPy],一个开源的 Python 库,几乎在科学和工程的每个领域都得到应用
-
Qiskit [Qiskit],一个开源 SDK,用于在脉冲、电路和应用模块级别与量子计算机交互
-
Qiskit 可视化支持以启用可视化工具和 Jupyter 笔记本的使用
-
Qiskit Nature [Qiskit_Nature] [Qiskit_Nat_0],一个独特的平台,它弥合了自然科学与量子模拟之间的差距
-
基于 Python 的化学模拟框架(PySCF)[PySCF],一个由 Python 驱动的开源电子结构模块集合
安装 NumPy、Qiskit 以及导入各种模块
使用以下命令安装 NumPy:
pip install numpy
使用以下命令安装 Qiskit:
pip install qiskit
使用以下命令安装 Qiskit 可视化支持:
pip install 'qiskit[visualization]'
使用以下命令安装 Qiskit Nature:
pip install qiskit-nature
使用以下命令安装 PySCF:
pip install pyscf
使用以下命令导入 NumPy:
import numpy as np
使用以下命令导入 Matplotlib,这是一个用于在 Python 中创建静态、动画和交互式可视化的综合性库:
import matplotlib.pyplot as plt
使用以下命令导入所需的函数和类方法。array_to_latex function()返回一个具有 1 或 2 维的复数数组的 LaTeX 表示:
from qiskit.visualization import array_to_latex, plot_bloch_vector, plot_bloch_multivector, plot_state_qsphere, plot_state_city
from qiskit import QuantumRegister, ClassicalRegister, QuantumCircuit, transpile
from qiskit import execute, Aer
import qiskit.quantum_info as qi
from qiskit.extensions import Initialize
from qiskit.providers.aer import extensions # import aer snapshot instructions
使用以下命令导入 Qiskit Nature 库:
from qiskit import Aer
from qiskit_nature.drivers import UnitsType, Molecule
from qiskit_nature.drivers.second_quantization import ElectronicStructureDriverType, ElectronicStructureMoleculeDriver
from qiskit_nature.problems.second_quantization import ElectronicStructureProblem
from qiskit_nature.mappers.second_quantization import ParityMapper, JordanWignerMapper, BravyiKitaevMapper
from qiskit_nature.converters.second_quantization import QubitConverter
from qiskit_nature.transformers.second_quantization.electronic import ActiveSpaceTransformer, FreezeCoreTransformer
from qiskit_nature.operators.second_quantization import FermionicOp
使用以下命令导入 Qiskit Nature 属性框架:
from qiskit_nature.properties import Property, GroupedProperty
使用以下命令导入ElectronicEnergy属性:
# https://qiskit.org/documentation/nature/tutorials/08_property_framework.html
from qiskit_nature.properties.second_quantization.electronic import (
ElectronicEnergy,
ElectronicDipoleMoment,
ParticleNumber,
AngularMomentum,
Magnetization,
)
使用以下命令导入ElectronicIntegrals属性:
from qiskit_nature.properties.second_quantization.electronic.integrals import (
ElectronicIntegrals,
OneBodyElectronicIntegrals,
TwoBodyElectronicIntegrals,
IntegralProperty,
)
from qiskit_nature.properties.second_quantization.electronic.bases import ElectronicBasis
使用以下命令导入数学库:
import cmath
import math
4.1. Born-Oppenheimer 近似
回想一下,原子中的电子轨道和分子中的电子分子轨道都是时间无关的定态。在第 2.4 节,公设 4 – 时间无关定态中,我们介绍了时间无关薛定谔方程:

其中
是通过将经典能量在哈密顿形式中量子化(首次量子化)得到的非相对哈密顿算符,它代表所有粒子的总能量(
);
电子和
核。对于一个分子系统,两个核
和
的电荷分别是
和
,质量分别是
和
。分子中粒子的位置是通过使用实验室(LAB)坐标系来确定的,如图图 4.2所示,其中坐标系的起点位于分子外部。坐标系的起点可以放置在自由空间的任何位置。

图 4.2 – 实验室坐标系
实验室坐标系中的哈密顿量
为:

其中在原子单位中,电子的质量、约化普朗克常数(
)和电荷(
)被设置为 1。实验室哈密顿量包括所有粒子的动能之和以及所有粒子之间的势能,其定义如下:
-
和
是电子和核相对于位置坐标的二阶导数算符,即
,对于
电子也是如此。 -
、
和
是电子
和
、电子
和核
、以及核
和
之间的距离,由欧几里得范数确定。
为了清晰起见,我们在图 4.3中列出实验室哈密顿量的算符:

图 4.3 – 分子哈密顿算符的项
在实验室哈密顿量中,分子系统的能量是连续的,而不是离散的。质心(COM)运动不会对系统的内部状态能量产生影响,可以将其分解出来。内部状态是量子化的,并且对平移是不变的。这些状态不受自由空间中的平移和旋转运动的影响。核仍然可以通过振动和内部旋转在 COM 周围移动。
在Born-Oppenheimer(BO)近似中,我们假设核的运动与电子的运动是解耦的,也就是说,核方程(旋转和振动)与电子方程的乘积:

其中
是核坐标,
是电子坐标,
是磁矩坐标,电子波函数
) 是对核坐标的约束
)。
在 BO 近似中,仅对具有固定核位置的电子方程进行求解,可以迭代以考虑核的振动和内部旋转。对于每次迭代,原子的核在空间中是固定的,可以将其视为违反了在 第 1.4 节,光和能量 中引入的海森堡不确定性原理。你越确切地知道一个粒子的位置,你对它的动量的了解就越少。一般来说,内部坐标系可以放置在分子中最重的原子或质心处。
我们只处理围绕静止核运动的电子。因此,如果我们忽略核与电子之间的动能耦合项,以及核与核之间的动能耦合项,一般电子分子哈密顿量是四个算符的和,如下所示:

最后一个项,即核势能排斥能,未进行计算,并使用伪势和实验数据进行近似,我们将在 图 4.4 中展示这一点。这种近似有一定的局限性,我们将在 第六章**,超越玻恩-奥本海默* 中进一步讨论,特别是通过确定势能表面。
4.2. 泡利空间
电子波函数
包括每个电子的空间位置
),这些位置取决于核的位置
) 以及每个电子的磁矩方向坐标
)。由于这些粒子是费米子,电子波函数必须对粒子对的交换具有反对称性。请回忆,这是在 第 2.1.3 节,泡利不相容原理的通用公式 中引入的泡利不相容原理。
现在,让我们考虑两个电子
和
在状态
和
中的情况,其中对应的电子波函数
) 代表了双电子系统的状态,并且对相同粒子对的交换具有反对称性
):

由于一电子波函数,如第 2.1 节 公设 1 – 波函数 中所述,是空间 (
) 和磁矩分量 (
) 的乘积,存在两种情况可以实现反对称性:
-
自旋函数必须是反对称的,而空间函数是对称的。
-
空间函数必须是反对称的,而自旋函数是对称的。
这意味着当两个粒子交换时,描述系统的总分子波函数 (
) 的符号也会改变:

对于在核场中的
个电子,总波函数
可以写成原子单粒子自旋轨道的乘积:

并且通过反对称张量积 (
[图卢兹] 和使用斯莱特行列式(由狄拉克首次引入)的状态叠加来实现反对称:

斯莱特行列式波函数在两个电子(两行排列)或两个自旋轨道(两列排列)交换时是反对称的。
对于两个电子 (
),斯莱特行列式的形式为:


对于三个电子 (
),斯莱特行列式的形式为:




福克空间 [福克] 是斯莱特行列式波函数所属的希尔伯特空间。根据定义,福克空间是一组至少包含三种重要配置的希尔伯特空间的和:
-
零粒子态,也称为真空态,被解释为轨道中不存在电子的状态:
或
. -
单粒子态:
或
. -
双粒子态:
或
.
在
个电子的福克空间中,一个
粒子子空间的状态数是:

其中
表示从一组
个元素中得到的
组合数。
如果我们有 5 个电子,且 3 粒子子空间:

在一个包含
个电子的福克空间中,状态的总数是 [Wiki-Comb]:

我们在本节中展示的只是一个数学构造,并不代表物理现实或化学实际。因此,在某种程度上,它与实际化学中使用的概念和术语难以联系起来。然而,福克空间在量子计算中被利用,因为分子中的电子空间和量子比特空间之间存在一一对应的关系;但这不是必要的映射。还有其他更具有计算优势的映射,例如在第 4.7.4 节,Bravyi-Kitaev 变换中展示的。
4.3. 费米子创建和湮灭算符
在上一节中,我们提到福克空间是一个数学构造,并不代表物理现实或化学实际。然而,请记住,在分子中,每个电子一次只能占据一个自旋轨道,并且没有两个电子可以占据同一个自旋轨道。
现在我们进一步考虑福克空间的一个子空间,它由自旋轨道的占有数生成,由
电子基态
描述,其中
是轨道
的占有数。
没有电子占据的轨道-自旋态
表示为
。
我们定义了一组费米子湮灭算符
和创建算符
,它们作用于局部电子模式,并满足以下反对易关系:


其中
是狄拉克δ函数。算符
被称为占有数算符,它们彼此交换。
一个费米子算符是创建算符和湮灭算符乘积的线性组合,我们将在下文中讨论。
4.3.1. 费米子创建算符
费米子创建算符
将位于
费米子轨道中的粒子数增加一个单位:

其中:
-
和
是位于
费米子轨道中的粒子数。 -
是一个预因子,如果我们有一个电子位于
费米子轨道中,即如果
。 -
相位因子
保持整个状态叠加的反对称性质。
4.3.2. 费米子湮灭算符
费米子湮灭算符
将位于
费米子轨道中的粒子数减少一个单位:

其中:
-
和
是位于
费米子轨道中的粒子数。 -
是一个预因子,如果
费米子轨道中没有电子,即如果
。 -
相位因子
保持整个状态叠加的反对称性质。
我们现在来看如何将电子分子哈密顿量写成创建和湮灭算子乘积的线性组合。
4.4. Hartree-Fock 轨道基中的分子哈密顿量
为了将原始的电子结构哈密顿量映射到相应的量子比特哈密顿量,我们在量子力学的第二量子化形式下工作。回顾我们在第 4.1 节中介绍了第一量子化,Born-Oppenheimer 近似。
Hartree-Fock (HF)方法将多体问题近似为单体问题,其中每个电子在平均场中演化,其他电子的平均场。
我们可以将电子分子哈密顿量(
)重写为创建和湮灭算子乘积的线性组合(总结在图 4.4中):

其中
从自旋轨道
移除一个电子,而
在自旋轨道
中创建一个电子。操作
是激发算子,它将电子从占据的自旋轨道
激发到未占据的轨道
。这些在第 2.1 节,公设 1 – 波函数中介绍。核-核(
)排斥能量(
)通过伪势和实验数据近似,如第 4.1 节中提到的Born-Oppenheimer 近似。

图 4.4 – 将分子哈密顿量表示为创建和湮灭算子乘积的线性组合
操作符的权重由使用 HF 方法计算的单电子积分给出:

其中
是电子
的坐标,
是原子
的坐标,而
是原子
的原子序数,双电子项由以下给出:

分子哈密顿量可以用 HF 方法的解的基表示,这些解被称为分子轨道(MOs)[Panagiotis]:
我们在第 2.3.6 节,动能操作和第 2.3.7 节,势能操作中展示了这些积分的一些示例计算。在下一节中,我们将看到如何近似这些积分中的空间波函数。
有三种常用的 HF 方法:
-
限制的 HF (RHF) 方法用于闭壳分子。自旋轨道要么是α(自旋向上)要么是β(自旋向下),所有轨道都由α和β自旋轨道双占据。
-
限制的开放壳 (ROHF) 方法用于开壳分子,其中每个自旋的电子数不相等。ROHF 尽可能使用双占据分子轨道,并为未成对电子使用单占据轨道。
-
无限制的 HF (UHF) 方法用于开壳分子,其中每个自旋的电子数不相等。UHF 轨道可以具有α或β自旋,但α和β轨道可能具有不同的空间分量。
4.5. 基础集
在第 4.4 节,哈特里-福克轨道基中的分子哈密顿量积分中的空间波函数
通过几个独立基函数的线性组合进行近似。这些函数的形式受到我们在第 2.1.1 节,球谐函数中介绍的氢类似系统的原子轨道的启发,其径向部分如第 2.2.1 节,计算径向波函数所示。
常用的两类近似基轨道是基于在第 4.2 节,福克空间中引入的斯莱特行列式的斯莱特型轨道 (STOs) 和笛卡尔高斯型轨道 (GTOs)。这两种类型的基函数可以组合为STO-nG,其中n是用于近似的高斯函数的数量。从头计算电子结构计算使用轨道基集进行数值计算。
我们现在详细说明这两类结构的结构,并用 Python 绘制的函数图来展示。
4.5.1. 斯莱特型轨道
STOs 具有与氢类似系统的原子轨道相同的结构,它们的径向部分具有以下形式 [Wiki_GAU]:

其中:
-
是角动量量子数,其值从
到![公式 _04_159.png],其中![公式 _04_160.png]是主量子数。 -
是电子从原子核的核距离。 -
被称为轨道指数,它控制了轨道密度随核距离变化的消失速度。
由以下归一化条件确定 [Wiki-GAU]:


注意到 [Wiki-STO]:

我们有:

对于 1
轨道,我们有
,因此
,Slater 轨道的径向部分为:

让我们用以下 Python 代码绘制这个函数:
x = np.linspace(-5,5,num=1000)
r = abs(x)
alpha = 1.0
R = 2*alpha**(1.5)*np.exp(-alpha*r)
plt.figure(figsize=(4,3))
plt.plot(x,R,label="STO 1s H")
plt.legend()
图 4.5 展示了结果:

图 4.5 – 氢原子 1s 轨道 Slater 型轨道径向部分的绘图
我们将氢分子的反对称空间波函数表示为氢原子 slater 轨道的前面径向部分的线性组合,如下所示:
x = np.linspace(-7,7,num=1000)
r1 = abs(x+2.5)
r2 = abs(x-2.5)
alpha = 1.0
R = 2*alpha**(1.5)*np.exp(-alpha*r1)-2*alpha**(1.5)*np.exp(-alpha*r2)
plt.figure(figsize=(4,3))
plt.plot(x,R,label="Antisymmetric STO H2")
plt.legend()
图 4.6 展示了结果:

图 4.6 – 氢分子反对称空间波函数的绘图
4.5.2. 高斯型轨道
GTOs 具有与 STOs 相同的角形式,但它们的径向函数采用高斯形式[Wiki_GAU]:

其中:
-
是角动量量子数,其值从
到
,其中
是主量子数。 -
是电子从原子核的距离。 -
被称为轨道指数,它控制着轨道密度随核距离变化的消失速度。
由以下归一化条件确定[Wiki-GAU]:

在实际应用中,我们用原始高斯函数的线性组合来近似 STO 的径向部分,称为收缩高斯函数。STO-nG 基组包含每个原子轨道的一个收缩高斯函数[Skylaris]。我们绘制了氢原子 1
轨道的 STO-3G 函数。以下是代码:
x = np.linspace(-7,7,num=1000)
r = abs(x)
c = [0.444635,0.535328,0.154329]
alpha = [0.109818,0.405771,2.227660]
psi = 0
for k in range(3):
psi += c[k]*(2*alpha[k]/np.pi)**0.75 * np.exp(-alpha[k]*r**2)
plt.figure(figsize=(5,3))
plt.plot(x,psi,label="STO-3G 1s H")
plt.legend()
图 4.7 展示了结果:

图 4.7 – 氢原子 1
轨道 STO-3G 函数的绘图
我们将氢分子的反对称空间波函数表示为氢原子 1s轨道的 STO-3G 函数前面径向部分的线性组合,如下所示:
x = np.linspace(-7,7,num=1000)
r1 = abs(x+2.5)
r2 = abs(x-2.5)
c = [0.444635,0.535328,0.154329]
alpha = [0.109818,0.405771,2.227660]
psi = 0
for k in range(3):
psi += c[k]*(2*alpha[k]/np.pi)**0.75 * np.exp(-alpha[k]*r1**2) \
- c[k]*(2*alpha[k]/np.pi)**0.75 * np.exp(-alpha[k]*r2**2)
plt.figure(figsize=(5,3))
plt.plot(x,psi,label="Antisymmetric STO-3G H2")
plt.legend()
图 4.8 展示了结果:

图 4.8 – 氢分子 1
轨道的反对称 STO-3G 函数的绘图
4.6. 使用 Qiskit Nature 构建费米子哈密顿算符
Qiskit Nature 平台与自旋轨道[Qiskit_Nat_1]一起工作。每个分子轨道可以有一个自旋向上的电子、一个自旋向下的电子或自旋配对电子。自旋轨道是这些情况之一。对于每个分子轨道,我们有两个自旋轨道。现在让我们用 Qiskit Nature 说明构建氢分子费米子哈密顿算符的过程。
4.6.1. 构建氢分子的费米子哈密顿算符
首先,我们使用 Qiskit 的Molecule类定义氢分子的分子几何形状,该类具有以下输入参数:
-
geometry,一个原子名称列表,例如H代表氢,后面跟着原子位置的笛卡尔坐标![img/Formulla_04_184.png],单位为埃 -
charge,一个整数,分子的电荷 -
multiplicity,一个整数,分子的多重性![img/Formulla_04_185.png],其中![img/Formulla_04_186.png]是总自旋角动量,它由分子中未成对电子的数量决定,即占据分子轨道的单个电子的数量,而不是与其他电子一起:
hydrogen_molecule = Molecule(geometry=[['H', [0., 0., 0.]],
['H', [0., 0., 0.735]]],
charge=0, multiplicity=1)
我们通过选择 PySCF 的driver类型和基组sto3g来定义电子结构分子驱动程序,这是我们在第 4.5.2 节,高斯型轨道中引入的基础 STO-3G,其中分子轨道将被展开。在 Qiskit Nature 中默认使用 STO-3G。在 Qiskit Nature 的 PySCF 驱动程序中默认使用 RHF:
driver = ElectronicStructureMoleculeDriver(hydrogen_molecule, basis='sto3g', driver_type=ElectronicStructureDriverType.PYSCF)
我们对基础 STO-3G 进行 HF 计算。以下是代码:
qH2 = driver.run()
我们创建一个ElectronicStructureProblem实例,该实例生成费米子算符的列表:
H2_fermionic_hamiltonian = ElectronicStructureProblem(driver)
我们使用second_q_ops()方法[Qiskit_Nat_3],它返回一系列量子化的算符:哈密顿算符、总粒子数算符、总角动量算符、总磁化算符,以及如果有的话,![img/Formulla_04_187.png],![img/Formulla_04_188.png],![img/Formulla_04_189.png]偶极算符:
H2_second_q_op = H2_fermionic_hamiltonian.second_q_ops()
回想一下,在第 1.3 节,量子数和物质的量子化中,我们介绍了自旋投影量子数,![img/Formulla_04_190.png],它给出了沿指定轴的自旋动量![img/Formulla_04_191.png]的投影,在给定的空间方向上为自旋向上(+½)或自旋向下(-½)。HF 理论类似地定义和自旋轨道[Skylaris_1]。
我们定义了get_particle_number()函数,该函数获取给定电子结构问题的粒子数属性。以下是代码:
def get_particle_number(problem, show=True):
particle_number = problem.grouped_property_transformed.get_property("ParticleNumber")
num_particles = (particle_number.num_alpha, particle_number.num_beta)
num_spin_orbitals = particle_number.num_spin_orbitals
if show:
print("Number of alpha electrons: {}".format(particle_number.num_alpha))
print("Number of beta electrons: {}".format(particle_number.num_beta))
print("Number of spin orbitals: {}".format(num_spin_orbitals))
return particle_number
我们调用get_particle_number()函数来获取并打印粒子的数量属性,如下所示:
print("Hydrogen molecule, basis: sto3g, Hartree-Fock calculation")
H2_particle_number = get_particle_number(H2_fermionic_hamiltonian)
图 4.9显示了结果,我们看到四个自旋轨道,一个![img/Formulla_04_194.png]电子和一个![img/Formula_03_006.png]电子:
![img/B18268_Figure_4.9.jpg]
图 4.9 – 氢分子,STO-3G 基组的 HF 计算,粒子数
我们定义了get_electronic_energy()函数,该函数返回给定电子结构问题的电子能量属性。以下是代码:
def get_electronic_energy(problem, show=True):
electronic_energy = problem.grouped_property_transformed.get_property("ElectronicEnergy")
if show:
print(electronic_energy)
return electronic_energy
我们调用get_electronic_energy()函数来获取并打印电子能量,如下所示:
H2_electronic_energy = get_electronic_energy(H2_fermionic_hamiltonian)
图 4.10显示了分子轨道(MO)的单体项,其中我们看到两个![img/Formulla_04_196.png]电子项和两个![img/Formula_03_006.png]电子项:

图 4.10 – 氢分子,电子能量,分子轨道(MO),单体项
图 4.11 展示了包含所有可能的分子轨道(MO)二体项自旋组合的分子轨道(MO)二体项,
,
,
:

图 4.11 – 氢分子,电子能量,分子轨道(MO),二体项
在稀疏标签模式下,FermionicOp 类 [Qiskit_Nat_2] 通过由空格分隔的项目字符串显示费米子算符的每一项,以标签开头,后跟下划线 _,然后是一个表示费米子模式索引的正整数。图 4.12 展示了标签列表、相应的符号和费米子算符:

图 4.12 – Qiskit FermionicOp 类使用的标签列表
Qiskit 的 FermionicOp 类根据 set_truncation() 方法设置的字符最大数截断费米子哈密顿算符的显示,默认值为 200 [Qiskit_Nat_T]。如果截断值设置为 0,则禁用截断。我们使用 set_truncation(0) 方法将截断设置为 None,然后我们打印出氢分子费米子哈密顿算符的所有 14 项:
# Set truncation to None
H2_second_q_op[0].set_truncation(0)
# Print the Fermionic operator
print("Hydrogen molecule")
print(H2_second_q_op[0])
图 4.13 展示了结果:

图 4.13 – 氢分子费米子哈密顿算符
现在我们使用 FermionicOp.to_matrix 方法打印出氢分子费米子算符在福克基下的矩阵表示,其中基态按递增的比特串顺序排列,为 0000、0001、…、1111。以下是代码:
print(H2_second_q_op[0].to_matrix())
图 4.14 展示了结果:

图 4.14 – 氢分子费米子哈密顿算符在福克基下的矩阵表示
氢分子的费米子哈密顿算符包含四个粒子数算符,如图 4.15 所示:

图 4.15 – 氢分子费米子哈密顿算符的粒子数算符
氢分子的费米子哈密顿算符包含十个二电子交换算符,如图 4.16 所示:

图 4.16 – 氢分子费米子哈密顿算符的二电子交换算符
现在我们用 Qiskit Nature 举例说明锂氢分子费米子哈密顿算符的构建。
4.6.2. 构建锂氢分子的费米子哈密顿算符
我们使用 Qiskit 的 Molecule 类定义锂氢(LiH)分子的分子几何形状,正如我们在 4.6.1 节,构建氢分子费米子哈密顿算符 中所解释的:
LiH_molecule = Molecule(geometry=[['Li', [0., 0., 0.]],
['H', [0., 0., 1.5474]]],
charge=0, multiplicity=1)
我们通过选择 PySCF 的driver类型和要展开分子轨道的sto3g基集来定义电子结构分子驱动器:
driver = ElectronicStructureMoleculeDriver(LiH_molecule, basis='sto3g', driver_type=ElectronicStructureDriverType.PYSCF)
我们创建一个ElectronicStructureProblem实例,使用freeze参数core=True和remove_orbitals=[4,3]来生成费米子算符列表,移除未占据轨道:
LiH_fermionic_hamiltonian = ElectronicStructureProblem(driver, transformers=[FreezeCoreTransformer(freeze_core=True, remove_orbitals=[4, 3])])
我们使用second_q_ops()方法获取一个第二量子化算符的列表:
LiH_second_q_op = LiH_fermionic_hamiltonian.second_q_ops()
我们调用get_particle_number()来获取并打印粒子数属性,如下所示:
print("Lithium hydride molecule, basis: sto3g, Hartree-Fock calculation")
print("Parameters freeze_core=True, remove_orbitals=[4, 3]")
LiH_particle_number = get_particle_number(LiH_fermionic_hamiltonian)
图 4.17 展示了结果,其中我们看到六个自旋轨道,一个
电子和一个
电子:

图 4.17 – 锂氢分子,STO-3G 基下的 HF 计算,粒子数
我们调用get_electronic_energy()函数来获取并打印电子能量,如下所示:
LiH_electronic_energy = get_electronic_energy(LiH_fermionic_hamiltonian)
图 4.18 展示了分子轨道(MO)的单体项,其中我们看到两个
电子项和两个
电子项:

图 4.18 – LiH 分子,电子能量,分子轨道(MO),单体项
-体项
图 4.19 展示了分子轨道(MO)的双体项,它包含了所有可能的分子轨道双体项的自旋组合,
,
,
:

图 4.19 – LiH 分子,电子能量,分子轨道(MO),双体项
Qiskit 的FermionicOp类根据set_truncation()方法设置的字符最大数来截断费米子哈密顿算符的显示,默认值为200 [Qiskit_Nat_T]。如果截断值设置为0,则禁用截断。我们使用set_truncation(1000)方法将截断设置为1000,然后我们打印出 LiH 分子费米子算符超过一百项中的前 20 项:
# Set truncation to 1000
LiH_second_q_op[0].set_truncation(1000)
# Print the Fermionic operator
print("Lithium hydride molecule")
print(LiH_second_q_op[0])
图 4.20 展示了结果:

图 4.20 – 锂氢分子费米子哈密顿算符的前 20 项
我们现在打印出锂氢分子费米子算符在 Fock 基下的矩阵表示,其中基态按递增的位串顺序排列,如 0000,0001,…,1111。以下是代码:
print(LiH_second_q_op[0].to_matrix())
图 4.21 展示了结果:

图 4.21 – 锂氢分子费米子哈密顿算符在 Fock 基下的矩阵表示
4.7. 费米子到量子比特映射
我们考虑一个由
个费米子组成的系统,每个费米子用从
到
的整数标记。我们需要一个费米子到量子比特的映射,描述费米子状态和量子比特状态之间的对应关系,或者,等价地,费米子算符和多量子比特算符之间的对应关系。我们需要一个映射,将费米子创建和湮灭算符与多量子比特算符之间的映射。Jordan-Wigner 和 Bravyi-Kitaev 变换被广泛使用,并模拟具有与电子数量相同的量子比特的电子系统。
4.7.1. 量子比特创建和湮灭算符
我们定义作用于局部量子比特的量子比特算符 [Yepez] [Chiew],如图 4.22 所示:

图 4.22 – 量子比特创建和湮灭算符
量子比特算符具有反对易关系:
。
4.7.2. Jordan-Wigner 变换
Jordan-Wigner(JW)变换存储每个量子比特中每个自旋轨道的占据情况。它将费米子创建和湮灭算符映射到泡利算符的张量积,如图 4.23 所示 [Yepez] [Chiew] [Cao]。算符
和
改变轨道能级
的占据情况。
个泡利算符
通过根据轨道标签小于
的占据情况的偶奇性应用相位,强制执行费米子的反对易关系 [Cao]。

图 4.23 – JW 变换
例如,对于一个轨道
,我们有以下映射:

单个泡利算符
的数量与系统的规模成线性关系。占据数基和 JW 变换允许通过
个量子比特操作来表示单个费米子创建或湮灭算符。
JW 变换产生的哈密顿量与自旋向上和自旋向下算符交换,这可以用来减少两个量子比特 [de Keijzer]。
我们定义 label_to_qubit() 函数,将表示为稀疏标签的费米子算符项转换为量子比特算符,该函数具有以下输入参数:
-
label,一个如图 4.12 所示的稀疏标签,由 Qiskit 的FermionicOp类使用 -
converter,可以是JordanWignerMapper()、ParityMapper()或BravyiKitaevMapper()
这里是代码:
def label_to_qubit(label, converter):
qubit_converter = QubitConverter(converter)
f_op = FermionicOp(label)
qubit_op = qubit_converter.convert(f_op)
return qubit_op
现在我们使用以下代码将费米子算符 "+_0"、"+_1"、"+_2"、"+_3" 和 "+_4" 转换为 JW 变换的量子比特算符:
for k in ("+_0", "+_1", "+_2", "+_3", "+_4"):
qubit_op = label_to_qubit(k, JordanWignerMapper())
print("{}:\n {}\n".format(k, qubit_op))
图 4.24 展示了结果,与 JW 变换的预期结果相匹配,按照 Qiskit 量子比特的张量顺序:

图 4.24 – 使用 "+_0", "+_1", "+_2", "+_3", 和 "+_4" 说明的 JW 变换
4.7.3. 偶宇称变换
偶宇称变换是 JW 变换的对偶:偶宇称算符是低权重,而占用算符变为高权重 [Bravyi][Cao]。图 4.25 显示了费米子创建和湮灭算符映射到泡利算符的张量积的映射:

图 4.25 – 偶宇称变换
现在我们使用以下代码将费米子算符 "+_0", "+_1", "+_2", "+_3", 和 "+_4" 转换为偶宇称变换的量子比特算符:
for k in ("+_0", "+_1", "+_2", "+_3", "+_4"):
qubit_op = label_to_qubit(k, ParityMapper())
print("{}:\n {}\n".format(k, qubit_op))
图 4.26 显示了结果,该结果与偶宇称变换的预期结果相匹配,使用 Qiskit 量子比特的张量排序:

图 4.26 – 使用 "+_0", "+_1", "+_2", "+_3", 和 "+_4" 说明的偶宇称变换
偶宇称变换引入了已知的对称性,可以利用这些对称性通过两个量子比特来减少问题的大小。
4.7.4. Bravyi-Kitaev 变换
Bravyi-Kitaev (BK) 变换仅适用于包含
个费米子的系统,其中
等于 2 的幂,
。BK 基和变换只需要
个量子比特操作来表示一个费米子算符。BK 变换将第 4.3 节中引入的占用数基
,费米子创建和湮灭算符,映射到 BK 基
,使用一个矩阵
,该矩阵递归定义 [Cao][Seeley],其中求和是模 2 进行的:
,
因此:
,
我们定义了 BK(m) 函数,它返回一个字典,包含从
到
的矩阵
:
def BK(m):
I = [[1, 0], [0, 1]]
d = {}
d[0] = [1]
for k in range(0, m):
B = np.kron(I,d[k])
for l in range(2**k, 2**(k+1)):
B[0,l] = 1
d[k+1] = B
return d
我们通过调用 BK(3) 函数来计算矩阵
,
,
,和
:
d = BK(3)
for k, v in d.items():
s = "B_{"+str(2**k)+"} = "
display(array_to_latex(v, prefix=s, precision = 0))
print(" ")
图 4.27 显示了结果:

图 4.27 – BK 矩阵
,
,
,和 
有三个集合需要考虑 [Bravyi] [Mezzacapo] [Tranter]:
-
偶宇称集
是编码费米子模式偶宇称的量子比特集合,其索引小于
,并给出全局相位。 -
更新集
是当费米子模式
改变占用时必须翻转的量子比特集合。 -
翻转集
是确定量子比特
与费米子模式
是否具有相同或相反奇偶性的量子比特集合。它在奇数
[Ribeiro] 中是必需的。
这三个集合可以从映射费米子占据到量子比特的递归矩阵中获得。余集
是通过奇偶性和翻转集的集合差获得的 [Bravyi]。
图 4.28 展示了费米子创建和湮灭算符映射到泡利算符的张量积:

图 4.28 – BK 变换
现在我们将费米子算符"+_0"、"+_1"、"+_2"、"+_3"和"+_4"转换为量子比特算符,使用以下代码进行 BK 变换:
for k in ("+_0", "+_1", "+_2", "+_3", "+_4"):
qubit_op = label_to_qubit(k, BravyiKitaevMapper())
print("{}:\n {}\n".format(k, qubit_op))
图 4.29 展示了结果,与 BK 变换的预期结果相匹配,按照 Qiskit 的量子比特张量排序:

图 4.29 – 使用"+_0"、"+_1"、"+_2"、"+_3"和"+_4"说明的 BK 变换
4.8. 使用 Qiskit Nature 构建量子比特哈密顿算符
本节展示了如何使用 Qiskit Nature 为氢分子和锂氢分子构建量子比特哈密顿算符。
我们定义了fermion_to_qubit()函数,用于将费米子算符转换为量子比特算符,该函数具有以下输入参数:
-
f_op,一个费米子算符,如第 4.6 节中所述,使用 Qiskit Nature 构建费米子哈密顿算符 -
mapper,可以是"Jordan-Wigner"、"Parity"或"Bravyi-Kitaev" -
truncate,一个整数,用于截断显示 Pauli 列表,可能非常大;默认设置为20项 -
two_qubit_reduction,布尔值,默认为False,表示是否在可能的情况下执行两量子比特简化 -
z2symmetry_reduction,默认为None,表示是否应将 Z2 对称性简化应用于基于在算符中可检测到的数学对称性计算出的结果量子比特算符 [de Keijzer] -
show,默认设置为True以显示变换名称和结果
这里是代码:
def fermion_to_qubit(f_op, second_q_op, mapper, truncate=20, two_qubit_reduction=False, z2symmetry_reduction=None, show=True):
if show:
print("Qubit Hamiltonian operator")
dmap = {"Jordan-Wigner": JordanWignerMapper(), "Parity": ParityMapper(), "Bravyi-Kitaev": BravyiKitaevMapper()}
qubit_op = None
qubit_converter = None
for k, v in dmap.items():
if k == mapper:
if show:
print("{} transformation ". format(mapper))
qubit_converter = QubitConverter(v, two_qubit_reduction=two_qubit_reduction, z2symmetry_reduction=z2symmetry_reduction)
if two_qubit_reduction:
qubit_op = qubit_converter.convert(second_q_op[0], num_particles=f_op.num_particles)
else:
qubit_op = qubit_converter.convert(second_q_op[0])
n_items = len(qubit_op)
if show:
print("Number of items in the Pauli list:", n_items)
if n_items <= truncate:
print(qubit_op)
else:
print(qubit_op[0:truncate])
return qubit_op, qubit_converter
现在我们展示如何构建氢分子的量子比特哈密顿算符。
4.8.1. 构建氢分子的量子比特哈密顿算符
首先,我们选择名为JordanWignerMapper()的量子比特映射器:
print("Hydrogen molecule")
H2_qubit_op, qubit_converter = fermion_to_qubit(H2_fermionic_hamiltonian, H2_second_q_op, "Jordan-Wigner", two_qubit_reduction=True)
图 4.30 展示了结果:

图 4.30 – 使用 JW 变换的 H2 量子比特哈密顿算符
接下来,我们使用名为ParityMapper()的量子比特映射器,并设置two_qubit_reduction=True来消除量子比特哈密顿算符中的两个量子比特 [Qiskit_Nat_4] [Qiskit_Nat_5]:
print("Hydrogen molecule")
H2_qubit_op, qubit_converter = fermion_to_qubit(H2_fermionic_hamiltonian, H2_second_q_op, "Parity", two_qubit_reduction=True)
图 4.31显示了结果量子比特哈密顿量算符在两个量子比特上工作。回想一下,有四个自旋轨道,如图图 4.9所示,并且寄存器长度为四个,如图图 4.13在4.6.1 节,构建氢分子的费米子哈密顿量算符所示。已经实现了两个量子比特的简化:

图 4.31 – 使用偶数变换的 H2 量子比特哈密顿量算符,two_qubit_reduction=True
最后,我们选择名为BravyiKitaevMapper()的量子比特映射器:
print("Hydrogen molecule")
H2_qubit_op, qubit_converter = fermion_to_qubit(H2_fermionic_hamiltonian, H2_second_q_op, "Bravyi-Kitaev", two_qubit_reduction=True)
图 4.32显示了结果:

图 4.32 – 使用 Bravyi-Kitaev 转换的 H2 量子比特哈密顿量算符
4.8.2. 构建锂氢分子的量子比特哈密顿量算符
我们使用名为ParityMapper()的量子比特映射器,并设置two_qubit_reduction=True来消除量子比特哈密顿量算符中的两个量子比特 [Qiskit_Nat_4] [Qiskit_Nat_5]。我们设置z2symmetry_reduction="auto"。我们打印 LiH 分子的量子比特哈密顿量算符的前 20 项:
print("Lithium hydride molecule")
print("Using the ParityMapper with two_qubit_reduction=True to eliminate two qubits")
print("Setting z2symmetry_reduction=\"auto\"")
LiH_qubit_op, qubit_converter = fermion_to_qubit(LiH_fermionic_hamiltonian, LiH_second_q_op, "Parity", two_qubit_reduction=True, z2symmetry_reduction="auto")
图 4.33显示了结果量子比特哈密顿量算符在四个量子比特上工作。回想一下,有六个自旋轨道,如图图 4.17所示,并且寄存器长度为六个,如图图 4.20在4.6.2 节,构建锂氢分子的费米子哈密顿量算符所示。已经实现了两个量子比特的简化:

图 4.33 – 使用偶数变换的 LiH 量子比特哈密顿量算符,two_qubit_reduction=True
摘要
在本章中,我们展示了如何制定一个电子结构程序并将其映射到一个量子比特哈密顿量,这是用于寻找量子系统最低能量本征值的混合经典-量子算法的输入。这是第五章**,变分量子本征值求解器(VQE)的主题。
问题
请通过相应的 Google Colab 笔记本测试你对本章中提出的概念的理解:
-
在 BO 近似中,以下哪个项被忽略了?
-
电子动能算符。
-
核动能算符。
-
电子和核之间的势能。它是所有电子-核库仑相互作用的总和。
-
由电子-电子库仑排斥力产生的势能算符。
-
核-核排斥能算符,所有核-核库仑排斥力的总和。
-
-
斯莱特行列式波函数相对于以下内容是对称的:
-
两个电子的交换(两行的排列)
-
两个自旋轨道的交换(两列的排列)
-
以上两者
-
-
列出 Qiskit Nature 目前支持的三个费米子到量子比特的转换。
-
列出两种模拟具有与电子数量相同量子比特数的电子系统的费米子到量子比特的转换。
-
对于哪种变换,得到的哈密顿量与可以用来衰减两个量子比特的向上和向下自旋算符是交换的?
答案
-
B
-
C
-
Jordan-Wigner,偶宇称,Bravyi-Kitaev
-
Jordan-Wigner,偶宇称
-
Jordan-Wigner
参考文献
[Bravyi] Sergey Bravyi,Jay M. Gambetta,Antonio Mezzacapo,Kristan Temme,衰减量子比特以模拟费米子哈密顿量,arXiv:1701.08213v1,2017 年 1 月 27 日,arxiv.org/pdf/1701.08213.pdf
[Cao] Yudong Cao,Jonathan Romero,Jonathan P. Olson,Matthias Degroote,Peter D. Johnson,Mária Kieferová,Ian D. Kivlichan,Tim Menke,Borja Peropadre,Nicolas P. D. Sawaya,Sukin Sim,Libor Veis,Alán Aspuru-Guzik,量子计算时代的量子化学,化学评论 2019,119,19,10856–10915,2019 年 8 月 30 日,doi.org/10.1021/acs.chemrev.8b00803
[Chiew] Mitchell Chiew 和 Sergii Strelchuk, 最佳费米子-量子比特映射,arXiv:2110.12792v1 [quant-ph],2021 年 10 月 25 日,arxiv.org/pdf/2110.12792.pdf
[De Keijzer] de Keijzer,R. J. P. T.,Colussi,V. E.,Škorić,B.,和 Kokkelmans,S. J. J. M. F. (2021),为量子化学应用优化变分量子本征求解器,arXiv,2021 年,[2102.01781],arxiv.org/abs/2102.01781
[Grok] 理解布洛赫球,javafxpert.github.io/grok-bloch/
[IBM_CEO] IBM 首席执行官:本世纪量子计算将“像火箭一样”起飞,Fast Company,2021 年 9 月 28 日,www.fastcompany.com/90680174/ibm-ceo-quantum-computing-will-take-off-like-a-rocket-ship-this-decade
[IBM_comp1] 欢迎使用 IBM 量子作曲家,quantum-computing.ibm.com/composer/docs/iqx/
[IBM_comp2] IBM 量子作曲家,quantum-computing.ibm.com/composer/files/new
[Kaplan] Ilya G. Kaplan, 泡利不相容原理的现代状态及其理论基础的难题,对称性 2021,13(1),21,doi.org/10.3390/sym13010021
[Mezzacapo] Antonio Mezzacapo,在量子计算机上模拟化学,第一部分,Qiskit 全球暑期学校 2020,IBM 量子,Qiskit,量子计算与量子硬件简介,qiskit.org/learn/intro-qc-qh/,讲义 8,github.com/qiskit-community/intro-to-quantum-computing-and-quantum-hardware/blob/master/lectures/introqcqh-lecture-notes-8.pdf?raw=true
[NumPy] NumPy:初学者的绝对基础,numpy.org/doc/stable/user/absolute_beginners.html
[Panagiotis] Panagiotis Kl. Barkoutsos,Jerome F. Gonthier,Igor Sokolov,Nikolaj Moll,Gian Salis,Andreas Fuhrer,Marc Ganzhorn,Daniel J. Egger,Matthias Troyer,Antonio Mezzacapo,Stefan Filipp,Ivano Tavernelli,量子算法用于电子结构计算:粒子-空穴哈密顿量和优化波函数展开,Phys. Rev. A 98,022322 – 2018 年 8 月 20 日发表,DOI:10.1103/PhysRevA.98.022322,link.aps.org/doi/10.1103/PhysRevA.98.022322
[Qiskit] Qiskit,qiskit.org/
[Qiskit_Nat_0] Qiskit_Nature,github.com/Qiskit/qiskit-nature/blob/main/README.md
[Qiskit_Nat_1] Qiskit Nature 和金融演示会,由 Max Rossmannek 和 Julien Gacon 主讲,2021 年 10 月 15 日,www.youtube.com/watch?v=UtMVoGXlz04
[Qiskit_Nat_2] FermionicOp,qiskit.org/documentation/nature/stubs/qiskit_nature.operators.second_quantization.FermionicOp.html
[Qiskit_Nat_3] ElectronicStructureProblem.second_q_ops,qiskit.org/documentation/nature/stubs/qiskit_nature.problems.second_quantization.ElectronicStructureProblem.second_q_ops.html
[Qiskit_Nat_4] QubitConverter,qiskit.org/documentation/nature/stubs/qiskit_nature.converters.second_quantization.QubitConverter.html
[Qiskit_Nat_5] Qiskit Nature 教程,电子结构,qiskit.org/documentation/nature/tutorials/01_electronic_structure.html
[Qiskit_Nat_T] 第二量子化算子 (qiskit_nature.operators.second_quantization) > FermionicOp > FermionicOp.set_truncation,qiskit.org/documentation/nature/stubs/qiskit_nature.operators.second_quantization.FermionicOp.set_truncation.html
[Qiskit_Nature] 介绍 Qiskit Nature,Qiskit,Medium,2021 年 4 月 6 日,medium.com/qiskit/introducing-qiskit-nature-cb9e588bb004
[Ribeiro] Sofia Leitão, Diogo Cruz, João Seixas, Yasser Omar, José Emilio Ribeiro, J.E.F.T. Ribeiro, Quantum Simulation of Fermionic Systems, CERN, indico.cern.ch/event/772852/contributions/3505906/attachments/1905096/3146117/Quantum_Simulation_of_Fermion_Systems.pdf
[Seeley] Jacob T. Seeley, Martin J. Richard, Peter J. Love, The Bravyi-Kitaev transformation for quantum computation of electronic structure, August 29, 2012, arXiv:1208.5986 [quant-ph], arxiv.org/abs/1208.5986v1
[Skylaris] CHEM6085: 密度泛函理论,Lecture 8, 高斯基组,www.southampton.ac.uk/assets/centresresearch/documents/compchem/DFT_L8.pdf
[Skylaris_1] C.-K. Skylaris, CHEM3023: Spins, Atoms, and Molecules, Lecture 8, Experimental observables / Unpaired electrons, www.southampton.ac.uk/assets/centresresearch/documents/compchem/chem3023_L8.pdf
[Toulouse] Julien Toulouse, Introduction to quantum chemistry, January 20, 2021, www.lct.jussieu.fr/pagesperso/toulouse/enseignement/introduction_qc.pdf
[Tranter] Andrew Tranter, Peter J. Love, Florian Mintert, Peter V. Coveney, A comparison of the Bravyi-Kitaev and Jordan-Wigner transformations for the quantum simulation of quantum chemistry, December 5, 2018, J. Chem. Theory Comput. 2018, 14, 11, 5617–5630, doi.org/10.1021/acs.jctc.8b00450
[Wiki-Comb] 所有 k 的 k 组合数,维基百科,en.wikipedia.org/wiki/Combination#Number_of_k-combinations_for_all_k
[Wiki-GAU] 高斯轨道,维基百科,en.wikipedia.org/wiki/Gaussian_orbital
[Wiki-STO] 斯莱特轨道,维基百科,en.wikipedia.org/wiki/Slater-type_orbital
[Yepez] Jeffrey Yepez, Lecture notes: Quantum gates in matrix and ladder operator forms, January 15, 2013, www.phys.hawaii.edu/~yepez/Spring2013/lectures/Lecture2_Quantum_Gates_Notes.pdf
第五章:变分量子本征求解器(VQE)算法
“宇宙不仅比我们想象的更奇怪,而且比我们能想象的更奇怪。”
– 韦纳·海森堡

图 5.1 – 潜在能面(PES)上的最速下降线 [作者]
我们在第 1.1 节理解量子化学和力学的历史中介绍了变分法使用的历史背景。它是一种可以用于计算的数学结构。在量子化学的背景下,变分法用于确定与特征值相关的最低能量,无论是基态还是激发态。
变分量子本征求解器(VQE)算法于 2014 年提出[VQE_1],并使用基于量子硬件进行定义。它是目前科学工业正在探索的几个变分量子算法(VQAs)中的第一个。
我们使用单位耦合簇单双(UCCSD)作为变分法的起始点来确定一个试探波函数,因为 VQE 的基必须接近真实基态,这对于 VQE 计算的成功至关重要。为了获得 1 毫哈特里(mHA)的准确能量估计,VQE 的基必须比真实基态小百万分之一[Troyer]。在本章中,我们将专注于计算氢(H2)和氢化锂(LiH)分子以及一个宏分子的基态和 Born-Oppenheimer 势能面(BOPES)。我们在第 4.1 节,Born-Oppenheimer 近似中介绍了 BOPES。我们将涵盖以下主题:
-
第 5.1 节,变分法
-
第 5.2 节,示例化学计算
技术要求
本章的配套 Jupyter 笔记本可以从 GitHub 下载,网址为github.com/PacktPublishing/Quantum-Chemistry-and-Computing-for-the-Curious,该笔记本已在 Google Colab 环境中测试,Colab 是免费的,完全运行在云端,以及 IBM 量子实验室环境中。请参阅附录 B – 在云端利用 Jupyter 笔记本,获取更多信息。配套的 Jupyter 笔记本会自动安装以下列表中的库:
-
数值 Python(NumPy)[NumPy],一个开源的 Python 库,几乎被应用于科学和工程的各个领域。
-
Qiskit [Qiskit],一个开源 SDK,用于在脉冲、电路和应用模块级别与量子计算机协同工作。
-
Qiskit 可视化支持,以启用可视化功能和 Jupyter 笔记本的使用。
-
Qiskit Nature [Qiskit_Nature] [Qiskit_Nat_0],一个独特的平台,用于弥合自然科学与量子模拟之间的差距。
-
基于 Python 的化学模拟框架(PySCF)[PySCF],一个由 Python 驱动的开源电子结构模块集合。
-
Python 量子工具箱(QuTiP)[QuTiP],一个用于解决量子力学问题(如由低能级量子系统和谐振子组成的系统)的通用框架。
-
原子模拟环境(ASE)[ASE_0],一套用于设置、操作、运行、可视化和分析原子模拟的工具和 Python 模块。代码在 GNU LGPL 许可下免费提供。
-
PyQMC [PyQMC],一个实现实空间量子蒙特卡罗技术的 Python 模块。它主要用于与 PySCF 交互操作。
-
h5py [h5py] 包,一个 Pythonic 接口,用于 HDF5 二进制数据格式。
-
SciPy [SciPy],一个包含大量概率分布、汇总和频率统计、相关函数和统计测试、掩码统计、核密度估计、准蒙特卡罗功能等的 Python 模块。
安装 NumPy、Qiskit、QuTiP 并导入各种模块
使用以下命令安装 NumPy:
pip install numpy
使用以下命令安装 Qiskit:
pip install qiskit
使用以下命令安装 Qiskit 可视化支持:
pip install 'qiskit[visualization]'
使用以下命令安装 Qiskit Nature:
pip install qiskit-nature
使用以下命令安装 PySCF:
pip install pyscf
使用以下命令安装 QuTiP:
pip install qutip
使用以下命令安装 ASE:
pip install ase
使用以下命令安装 PyQMC:
pip install pyqmc --upgrade
使用以下命令安装 h5py:
pip install h5py
使用以下命令安装 SciPy:
pip install scipy
使用以下命令导入 NumPy:
import numpy as np
使用以下命令导入 Matplotlib,一个用于在 Python 中创建静态、动画和交互式可视化的综合库:
import matplotlib.pyplot as plt
导入所需的函数和类方法。array_to_latex function() 返回一个具有 1 或 2 维的复杂数组的 LaTeX 表示形式:
from qiskit.visualization import array_to_latex, plot_bloch_vector, plot_bloch_multivector, plot_state_qsphere, plot_state_city
from qiskit import QuantumRegister, ClassicalRegister, QuantumCircuit, transpile
from qiskit import execute, Aer
import qiskit.quantum_info as qi
from qiskit.extensions import Initialize
from qiskit.providers.aer import extensions # import aer snapshot instructions
使用以下命令导入 Qiskit Nature 库:
from qiskit import Aer
from qiskit_nature.drivers import UnitsType, Molecule
from qiskit_nature.drivers.second_quantization import ElectronicStructureDriverType, ElectronicStructureMoleculeDriver
from qiskit_nature.problems.second_quantization import ElectronicStructureProblem
from qiskit_nature.mappers.second_quantization import ParityMapper, JordanWignerMapper, BravyiKitaevMapper
from qiskit_nature.converters.second_quantization import QubitConverter
from qiskit_nature.transformers.second_quantization.electronic import ActiveSpaceTransformer, FreezeCoreTransformer
from qiskit_nature.operators.second_quantization import FermionicOp
from qiskit_nature.circuit.library.initial_states import HartreeFock
from qiskit_nature.circuit.library.ansatzes import UCCSD
使用以下命令导入 Qiskit Nature 属性框架:
from qiskit_nature.properties import Property, GroupedProperty
使用以下命令导入 ElectronicEnergy 属性:
# https://qiskit.org/documentation/nature/tutorials/08_property_framework.html
from qiskit_nature.properties.second_quantization.electronic import (
ElectronicEnergy,
ElectronicDipoleMoment,
ParticleNumber,
AngularMomentum,
Magnetization,
)
使用以下命令导入 ElectronicIntegrals 属性:
from qiskit_nature.properties.second_quantization.electronic.integrals import (
ElectronicIntegrals,
OneBodyElectronicIntegrals,
TwoBodyElectronicIntegrals,
IntegralProperty,
)
from qiskit_nature.properties.second_quantization.electronic.bases import ElectronicBasis
使用以下命令导入 Qiskit Aer 状态向量模拟器和各种算法:
from qiskit.providers.aer import StatevectorSimulator
from qiskit import Aer
from qiskit.utils import QuantumInstance
from qiskit_nature.algorithms import VQEUCCFactory, GroundStateEigensolver, NumPyMinimumEigensolverFactory, BOPESSampler
from qiskit.algorithms import NumPyMinimumEigensolver, VQE, HamiltonianPhaseEstimation
from qiskit.circuit.library import TwoLocal
from qiskit.algorithms.optimizers import QNSPSA
from qiskit.opflow import StateFn, PauliExpectation, CircuitSampler, PauliTrotterEvolution
from functools import partial as apply_variation
使用以下命令导入 PySCF gto 和 scf 库:
from pyscf import gto, scf
使用以下命令导入 PyQMC API 库:
import pyqmc.api as pyq
使用以下命令导入 h5py:
import h5py
使用以下命令导入 ASE 库、Atoms 对象、分子数据和可视化:
from ase import Atoms
from ase.build import molecule
from ase.visualize import view
使用以下命令导入数学库:
import cmath
import math
使用以下命令导入 SciPy 包提供的 Python 统计函数:
import scipy.stats as stats
使用以下命令导入 QuTiP:
import qutip
使用以下命令导入 time 和 datetime:
import time, datetime
使用以下命令导入 pandas 和 os.path:
import pandas as pd
import os.path
5.1. 变分法
我们通过经典和混合量子方法来展示变分方法。我们比较 VQE 与变分蒙特卡罗方法。此外,我们还比较了 VQE 的结果与量子相位估计(QPE)算法的结果,后者不是变分方法。
在本节中,我们涵盖了以下主题:
-
第 5.1.1 节,Rayleigh-Ritz 变分定理
-
第 5.1.2 节,变分蒙特卡罗方法
-
第 5.1.3 节,量子相位估计(QPE)
-
第 5.1.4 节,VQE 算法描述
5.1.1. Rayleigh-Ritz 变分定理
Rayleigh-Ritz 变分定理指出,系统哈密顿量 ![img/Formula_05_001.png] 关于任意波函数状态 (![img/Formula_05_002.png]) 的期望值总是该系统描述的精确基态能量 ![img/Formula_05_003.png] 的上界:
![img/Formula_05_004.jpg]
其中 ![img/Formula_05_005.png] 通常代表时间、空间和自旋变量。这个公式没有假设任何特定的化学设置或参考系。
现在我们给出了一般哈密顿量定理的证明,该哈密顿量由离散厄米算子 ![img/Formula_05_006.png] [Toulouse] 表示。回顾一下,根据在第 2.3.1 节中引入的谱定理,厄米算子 ![img/Formula_05_007.png] 必须有一组正交归一的本征向量 ![img/Formula_05_008.png] 以及实本征值 ![img/Formula_05_009.png],![img/Formula_05_010.png],这些构成了希尔伯特空间的一个正交归一基,并且在这个基中 ![img/Formula_05_006.png] 有一个唯一的谱表示:
![img/Formula_05_012.jpg]
我们可以按能量增加的顺序对 ![img/Formula_05_006.png] 的正交归一本征向量进行索引,![img/Formula_05_014.png],并将任何状态 ![img/Formula_05_015.png] 在这个基中分解:
![img/Formula_05_016.jpg]
系数 ![img/Formula_05_017.png] 和归一化约束:
![img/Formula_05_018.jpg]
注意到复共轭转置是:
![img/Formula_05_019.jpg]
我们计算期望值:
![img/Formula_05_020.jpg]
这个表达式 ![img/Formula_05_021.png] 的最小值在 ![img/Formula_05_022.png] 和 ![img/Formula_05_023.png] 处取得,对于所有 ![img/Formula_05_024.png],即对于 ![img/Formula_05_025.png]。因此:
![img/Formula_05_026.jpg]
为了找到最小值,可以找到关于波函数参数的表达式的第一和第二导数。这个变分定理的设置对于电子分子哈密顿量 (![img/Formula_05_027.png]) 是成立的。
5.1.2. 变分蒙特卡罗方法
变分蒙特卡罗(VMC)方法基于 Rayleigh-Ritz 变分定理 [Chen] [Gorelov] [Toulouse_1] [Cao] [Dagrada] 和蒙特卡罗积分方法 [Pease],注意到期望值可以重写为以下形式:

我们将积分分解为一个概率分布:

并且一个可观察的:

这使我们能够将能量表示为平均值的形式:

现在我们对
公式进行近似,这被称为Metropolis-Hastings(MH)算法 [Chen] [Toulouse1]。为了在数学上进行近似,我们从概率分布
中采样一组
点,并在每个点
上评估局部能量,因此:

在实践中,我们可以使用灵活的显式相关波函数 
现在我们用来自 Ref. [Stephens] 的 Python 代码给出 MH 算法的示例。MH 算法是一种用于从概率分布中产生样本的马尔可夫链蒙特卡罗(MCMC)方法,我们将称之为目标概率分布。它通过模拟一个马尔可夫链来工作,其平稳分布是目标概率分布。马尔可夫链理论用于描述在化学、化学工程、生物学和医学中突出的聚合反应类型,例如聚合酶链反应(PCR)[Tamir]。
我们想从以下概率分布中采样:

我们使用“随机游走”核实现 MH 算法,
,其中
是正态分布,以下接受概率:

这里是代码:
n = 10000 # Size of the Markov chain stationary distribution
# Use np.linspace to create an array of n numbers between 0 and n
index = np.linspace(0, n, num=n)
x = np.linspace(0, n, num=n)
x[0] = 3 # Initialize to 3
for i in range(1, n):
current_x = x[i-1]
# We add a N(0,1) random number to x
proposed_x = current_x + stats.norm.rvs(loc=0, scale=1, size=1, random_state=None)
A = min(1, p(proposed_x)/p(current_x))
r = np.random.uniform(0,1) # Generate a uniform random number in [0, 1]
if r < A:
x[i] = proposed_x # Accept move with probabilty min(1,A)
else:
x[i] = current_x # Otherwise “reject” move, and stay where we are
我们绘制了马尔可夫链
访问的位置:
plt.plot(index, x, label=”Trace plot”)
plt.xlabel('Index')
plt.ylabel('MH value')
plt.legend()
plt.show()
图 5.2 显示了结果:

图 5.2 – 马尔可夫链
访问的位置图
我们使用 Freedman-Diaconis 规则来选择用于直方图的“正确”的箱宽 [Bushmanov] [Freeman]:
q25, q75 = np.percentile(x, [25, 75])
bin_width = 2 * (q75 - q25) * len(x) ** (-1/3)
bins = round((x.max() - x.min()) / bin_width)
print(“Freedman–Diaconis number of bins:”, bins)
这里是结果:
Freedman–Diaconis number of bins: 109
我们绘制了马尔可夫链
的直方图:
plt.hist(x, density=True, bins=bins)
plt.ylabel('Density')
plt.xlabel('x');
图 5.3 显示了结果:

图 5.3 – 马尔可夫链
的直方图
我们看到马尔可夫链
的值直方图是先前定义的分布
的良好近似。
现在我们定义 run_PySCF() 函数,该函数使用 PySCF RHF 方法计算基态能量,并使用 PyQMC Python 模块中的 OPTIMIZE 函数实现空间变分蒙特卡罗技术 [PyQMC]。它具有以下参数:
-
molecule,分子的几何形状,使用 Qiskit 的Molecule类定义 -
pyqmc,默认设置为True以运行 PyQMC Python 模块 -
show,默认设置为True以显示中间结果 -
这里是
run_PySCF()函数的定义:
def run_PySCF(molecule, pyqmc=True, show=True):
现在我们展示包含在run_PySCF()函数中的代码。首先,我们重置文件:
# Reset the files
for fname in ['mf.hdf5','optimized_wf.hdf5']:
if os.path.isfile(fname):
os.remove(fname)
- 然后我们从输入参数传递的分子构建 PySCF 分子几何。
mol_PySCF = gto.M(atom = [“ “.join(map(str, (name, *coord))) for (name, coord) in molecule.geometry])
- 我们运行了 PySCF RHF 方法:
mf = scf.RHF(mol_PySCF)
mf.chkfile = “mf.hdf5”
conv, e, mo_e, mo, mo_occ = scf.hf.kernel(mf)
if show:
if conv:
print(“PySCF restricted HF (RHF) converged ground-state energy: {:.12f}”.format(e))
else:
print(“PySCF restricted HF (RHF) ground-state computation failed to converge”)
- 接下来,我们在 PyQMC Python 模块中运行
OPTIMIZE函数:
if pyqmc:
pyq.OPTIMIZE(“mf.hdf5”,# Construct a Slater-Jastrow wave function from the pyscf output
“optimized_wf.hdf5”, # Store optimized parameters in this file.
nconfig=100, # Optimize using this many Monte Carlo samples/configurations
max_iterations=4, # 4 optimization steps
verbose=False)
- 我们读取包含优化参数的 HDF5 文件的内容,如果 PyQMC 变分蒙特卡洛计算收敛,则打印每次迭代的能量:
with h5py.File(“optimized_wf.hdf5”) as f:
iter = f['iteration']
energy = f['energy']
error = f['energy_error']
l = energy.shape[0]
e = energy[l-1]
err = error[l-1]
if show:
if err < 0.1:
print(“Iteration, Energy, Error”)
for k in iter:
print(“{}: {:.4f} {:.4f}”.format(k, energy[k], error[k]))
print(“PyQMC Monte Carlo converged ground-state energy: {:.12f}, error: {:.4f}”.format(e, err))
else:
print(“PyQMC Monte Carlo failed to converge”)
最后,我们让run_PySCF()函数将以下参数返回给调用者:
-
conv,Boolean,如果 PySCF RHF 方法收敛则设置为True -
e,基态能量 -
这里是
return语句:
return conv, e
5.1.3. 量子相位估计 (QPE)
在量子化学中,我们需要对参与化学反应的每种分子物种的总电子能量进行非常精确的计算 [Burg]。量子相位估计 (QPE) 算法具有一个独特的特性,即它允许对量子系统进行有界误差的模拟,这使得它成为未来容错量子计算最有希望的应用之一。给定一个单位算符
,其本征态和本征值
,准备状态
的能力,以及应用
本身的能力,QPE 算法计算
,其中
是用于估计
的量子比特数,从而允许我们将
测量得尽可能精确。
回想一下,在 第 2.5 节,公设 5 – 时间演化动力学 中,我们看到了量子系统的动力学由薛定谔方程描述:

对于具有初始条件
的时间独立哈密顿量
,解为:

其中
是单位时间演化算符。进一步回忆,任何单位矩阵都有形式为
的特征值。
的特征值也是
的特征值。
现在我们说明如何使用 Qiskit 的PhaseEstimation类。首先,我们定义一个函数
,它创建一个包含单个量子比特
的量子电路,并应用以下单位算符:

其中
是我们在 第 3.2.1 节,单量子比特量子门 中引入的门,其矩阵形式为:

这里是代码:
def U(theta):
unitary = QuantumCircuit(1)
unitary.p(np.pi*2*theta, 0)
return unitary
我们定义了do_qpe()函数,它说明了如何使用 Qiskit Nature 的PhaseEstimation类,并且有三个参数:
-
unitary,一个实现单位算符的函数 -
nqubits,量子比特数,默认为3 -
show,默认设置为True以显示PhaseEstimation类返回的相位
这里是代码:
def do_qpe(unitary, nqubits=3, show=True):
state_in = QuantumCircuit(1)
state_in.x(0)
pe = PhaseEstimation(num_evaluation_qubits=nqubits, quantum_instance=quantum_instance)
result = pe.estimate(unitary, state_in)
phase_out = result.phase
if show:
print(“Number of qubits: {}, QPE phase estimate: {}”.format(nqubits, phase_out))
return(phase_out)
首先,我们使用三个量子比特进行准确度测试:
quantum_instance = QuantumInstance(backend = Aer.get_backend('aer_simulator_statevector'))
theta = 1/2 + 1/4 + 1/8
print(“theta: {}”.format(theta))
unitary = U(theta)
result = do_qpe(unitary, nqubits=3)
这里是结果:
theta: 0.875
Number of qubits: 3, QPE phase estimate: 0.875
接下来,我们使用八个量子比特进行准确度测试:
theta = 1/2 + 1/4 + 1/8 + 1/16 + 1/32 + 1/64 + 1/128 + 1/256
print(“theta: {}”.format(theta))
unitary = U(theta)
result = do_qpe(unitary, nqubits=8)
这里是结果:
theta: 0.99609375
Number of qubits: 8, QPE phase estimate: 0.99609375
我们可以看到,通过增加 PhaseEstimation 类允许使用的量子比特数量,我们可以从真实相位中获得一个有界误差的相位估计。
5.1.4. VQE 算法描述
在循环中,经典计算机根据目标函数优化量子电路的参数,例如寻找分子的基态,这是具有最低能量的状态。参数化量子电路准备一个试验量子态作为试验解(一个试探解)。通过反复测量量子电路输出的量子比特,我们得到与试验态相关的能量可观察量的期望值。
VQE 算法提供了一个编码为哈密顿量
的给定量子系统的基态估计,即系统具有最低能量的状态
,例如,分子的基态能量。它涉及对参数化(
)试验态
的能量可观察量的期望值
进行迭代最小化:

如 第 3.1.6 节,泡利矩阵 所示,我们可以将哈密顿量
分解为
张量积
的加权求和,其中
具有权重
和
个量子比特:

因此,能量可观察量的期望值
可以重新写为以下形式:

我们使用量子电路初始化在状态
并表示为
的参数集
准备一个试验态
,该电路输出状态
。
通过转置复共轭
,我们可以将能量可观察量的期望值
重新写为以下形式:

然后将求和项移到前面:

对于每个
,我们运行量子电路
,然后根据
进行旋转
,在 Z 基础上测量量子比特,从而有效地测量输出态在
的特征向量基中的输出态,以获得与输出态
相关的期望值
。
在经典计算机上,我们计算期望值的加权总和
与权重
相乘,以得到相对于输出状态
的期望值
。我们使用经典优化算法更新参数集
,最小化期望值
,直到能量值收敛或达到最大允许迭代次数。收敛时的参数
大约定义了编码到哈密顿量
中的量子系统的基态
的最低能量
。算法总结在 图 5.4 中。

图 5.4 – VQE 算法
尝试波函数
耦合簇(CC)理论使用指数簇算符
构建多电子波函数 (
),其中
是所有单激发的算符,
是所有双激发的算符,等等。我们以以下量子态
的单位 ary 耦合簇(UCC)基函数
作为变分参数 [Panagiotis] [Lolur] 开始 VQE:

其中
是哈特里-福克基态。在仅限于单、双激发扩展的 UCC 方法(UCCSD)中,算符
和
可以展开如下:


其中:
-
是在第 4.3.1 节“费米子创建算符”中引入的费米子创建算符 -
是在第 4.3.2 节“费米子湮灭算符”中引入的费米子湮灭算符 -
是所有展开系数的参数集。
然后将量子态
的 UCCSD 基函数映射到量子比特算符,使用第 4.7 节中引入的 Jordan-Wigner(JW)、偶数性或 Bravyi-Kitaev(BK)变换,从而得到 VQE 计算的初始量子比特状态向量。
设置 VQE 求解器
我们使用 Qiskit Aer 状态向量模拟器后端设置了一个无噪声的模拟:
quantum_instance = QuantumInstance(backend = Aer.get_backend('aer_simulator_statevector'))
现在我们设置求解方法。要了解如何训练基于电路的变分模型,请参阅参考文献 [Qiskit_2021_Lab4]。首先,我们按照以下方式设置 NumPy 最小特征值求解器:
numpy_solver = NumPyMinimumEigensolver()
我们按照 [Panagiotis] 的方法设置双局部电路如下:
tl_circuit = TwoLocal(rotation_blocks = ['h', 'rx'], entanglement_blocks = 'cz',
entanglement='full', reps=2, parameter_prefix = 'y')
我们使用启发式基函数,即默认的顺序最小二乘规划(SLSQP)优化器设置 VQE,采用双局部电路:
vqe_tl_solver = VQE(ansatz = tl_circuit,
quantum_instance = QuantumInstance(Aer.get_backend('aer_simulator_statevector')))
然后,我们使用单位耦合簇(UCC)工厂设置求解器。它允许快速初始化 VQE,将量子比特初始化在哈密顿状态,并使用量子 UCC 单双(q-UCCSD),这是一个流行的波函数近似[VQE_2] [VQE_3]。以下是代码:
vqe_ucc_solver = VQEUCCFactory(quantum_instance, ansatz=tl_ circuit)
我们为qnspsa_loss设置了一个回调函数,qnspsa_callback():
qnspsa_loss = []
def qnspsa_callback(nfev, x, fx, stepsize, accepted):
qnspsa_loss.append(fx)
现在,我们准备展示一些示例。
5.2. 示例化学计算
如第四章中所述,分子哈密顿量,由于使用了 BO 近似,近似核运动的 PES。我们可以使用半经验方法通过实验数据/或计算机模拟来近似 PES。
PES 可以与有山有谷的地形进行比较。在实践中,作为化学家,我们希望找到 PES 的全局最小值(海底),而不是局部最小值(山丘草地),如图 5.1 所示。我们使用经典和量子变分方法来找到全局最小值。这可以与在地形上滚动的球体进行比较。如果我们给球体一个方向上的推力,通常是向下的,球体最终会落在最小值处。我们称这种梯度下降。梯度下降可以通过数值改变输入值或通过描述 PES 的波函数的解析公式来提供。
为了说明确定 PES 的计算,我们猜测一个试探波函数,该波函数可以在计算中优化,使我们能够找到能量的全局最小值。我们称这个全局最小值为给定本征值的最低能量。我们称这个全局最小值为给定本征值的最低能量。
我们展示了使用经典 PySCF RHF、PyQMC 变分蒙特卡洛、QPE 和 Qiskit Nature 的 VQE 以及使用 PySCF 驱动程序的 STO-3G 基,求解三个分子的基态并绘制 BOPES 的几种实现。
在本节中,我们将涵盖以下主题:
-
第 5.2.1 节,氢分子
-
第 5.2.2 节,氢化锂分子
-
第 5.2.3 节,大分子
我们使用在第 4.6.1 节,构建氢分子的费米子哈密顿量算符中定义的get_particle_number()函数,该函数获取给定电子结构问题的粒子数属性。
我们使用在第 4.8 节,使用 Qiskit Nature 构建量子比特哈密顿量中定义的fermion_to_qubit()函数,将费米子算符转换为量子比特算符。它具有以下输入参数:
-
f_op,一个费米子算符,如第 4.6 节,使用 Qiskit Nature 构建费米子哈密顿量中所述获得 -
mapper,可以是“Jordan-Wigner”、“Parity”或“Bravyi-Kitaev” -
truncate,一个用于截断泡利列表的整数,默认设置为 20 项 -
two_qubit_reduction,一个布尔值,默认为False,用于确定是否在可能的情况下执行两量子比特简化 -
z2symmetry_reduction,默认为None,表示是否应将 Z2 对称性减少应用于基于在算符中可检测到的数学对称性计算出的结果量子比特算符[de Keijzer] -
show,默认设置为True以显示变换名称和结果
Qiskit Nature 提供了一个名为GroundStateEigensolver的类,用于计算分子的基态。我们定义了run_vqe()函数,它具有以下输入参数:
-
name,一个字符串,将被打印出来,例如'NumPy 精确求解器' -
f_op,一个通过第四部分,使用 Qiskit Nature 构建费米子哈密顿量中解释的方法获得的费米子算符 -
qubit_converter,JordanWignerMapper()、ParityMapper()或BravyiKitaevMapper()之一,这是fermion_to_qubit()函数的输出 -
solver,第 5.2.3 节,设置 VQE 求解器中定义的求解器之一,numpy_solver、vqe_ucc_solver或vqe_tl_solver。
这里是代码:
def run_vqe(name, f_op, qubit_converter, solver, show=True):
calc = GroundStateEigensolver(qubit_converter, solver)
start = time.time()
ground_state = calc.solve(f_op)
elapsed = str(datetime.timedelta(seconds = time.time()-start))
if show:
print(“Running the VQE using the {}”.format(name))
print(“Elapsed time: {} \n”.format(elapsed))
print(ground_state)
return ground_state
我们定义了run_qpe()函数以执行量子相位估计,并返回哈密顿量的本征值作为电子基态能量的估计。它具有以下输入参数:
-
particle_number,get_particle_number()函数返回的属性 -
qubit_converter,JordanWignerMapper()、ParityMapper()或BravyiKitaevMapper()之一,这是fermion_to_qubit()函数的输出 -
qubit_op,由fermion_to_qubit()函数返回的量子比特哈密顿量算符 -
n_ancillae,一个整数,默认为3,表示辅助量子比特的数量 -
num_time_slices,一个整数,默认为1,表示PauliTrotterEvolution类的数量 -
show,默认设置为True以显示中间结果
这里是代码:
def run_qpe(particle_number, qubit_converter, qubit_op, n_ancillae=3, num_time_slices = 1, show=True):
initial_state = HartreeFock(particle_number.num_spin_orbitals,
(particle_number.num_alpha,
particle_number.num_beta), qubit_converter)
state_preparation = StateFn(initial_state)
evolution = PauliTrotterEvolution('trotter', reps=num_time_slices)
qpe = HamiltonianPhaseEstimation(n_ancillae, quantum_instance=quantum_instance)
result = qpe.estimate(qubit_op, state_preparation, evolution=evolution)
if show:
print(“\nQPE initial Hartree Fock state”)
display(initial_state.draw(output='mpl'))
eigv = result.most_likely_eigenvalue
print(“QPE computed electronic ground state energy (Hartree): {}”.format(eigv))
return eigv
我们定义了plot_energy_landscape()函数,以绘制原子间距作为能量的函数:
def plot_energy_landscape(energy_surface_result):
if len(energy_surface_result.points) > 1:
plt.plot(energy_surface_result.points, energy_surface_result.energies, label=”VQE Energy”)
plt.xlabel('Atomic distance Deviation(Angstrom)')
plt.ylabel('Energy (hartree)')
plt.legend()
plt.show()
else:
print(“Total Energy is: “, energy_surface_result.energies[0], “hartree”)
print(“(No need to plot, only one configuration calculated.)”)
return
我们定义了plot_loss()函数,它接受以下输入参数:
-
loss,一个浮点数数组,可选,由回调函数生成 -
label,一个字符串,将由plot_loss()函数显示 -
target,一个浮点数,将由plot_loss()函数显示
这里是代码:
def plot_loss(loss, label, target):
plt.figure(figsize=(12, 6))
plt.plot(loss, 'tab:green', ls='--', label=label)
plt.axhline(target, c='tab:red', ls='--', label='target')
plt.ylabel('loss')
plt.xlabel('iterations')
plt.legend()
我们现在定义solve_ground_state()函数,该函数用于求解基态。它接受以下参数作为输入,这些参数定义了分子的几何形状:
-
molecule,分子的几何形状,以及Molecule函数的输出。 -
mapper,“Jordan-Wigner”、“Parity”或“Bravyi-Kitaev”之一。 -
num_electrons,一个整数,可选,ActiveSpaceTransformer的电子数量。默认为2。 -
num_molecular_orbitals,一个整数,可选,ActiveSpaceTransformer的电子轨道数量。默认为2。
以下输入参数列表控制整个流程:
-
transformers,一个可选的转换器列表。例如,对于氢化锂,我们将使用以下设置:transformers=[FreezeCoreTransformer(freeze_core=True, remove_orbitals=[4, 3])]。 -
two_qubit_reduction,一个布尔值,默认为False。它决定了是否在可能的情况下执行两比特简化。 -
z2symmetry_reduction,默认为None,这表示是否应该将 Z2 对称性简化应用于基于可以在算子中检测到的数学对称性计算出的结果量子比特算子[de Keijzer]。 -
name_solver,求解器的名称,默认为'NumPy exact solver'。 -
solver,可以是第 5.2.3 节中定义的求解器之一,即numpy_solver、vqe_ucc_solver或vqe_tl_solver。默认为NumPyMinimumEigensolver()。 -
plot_bopes,一个布尔值,设置为True以计算和绘制分子的 BOPES。 -
perturbation_steps,评估自由度的点,在这种情况下是一个以埃为单位的距离。默认为np.linspace(-1, 1, 3)。 -
pyqmc,默认设置为True以运行 PyQMC Python 模块。 -
n_ancillae,一个整数,默认为3,代表run_qpe()函数使用的辅助量子比特的数量。 -
num_time_slices,一个整数,默认为1,代表PauliTrotterEvolution类的数量。 -
loss,一个可选的浮点数数组,由回调函数生成。 -
label,一个字符串,将由plot_loss()函数显示。 -
target,一个浮点数,将由plot_loss()函数显示。 -
show,默认设置为True以显示中间结果。
下面是solve_ground_state()函数的定义:
def solve_ground_state(
molecule,
mapper =”Parity”,
num_electrons=None,
num_molecular_orbitals=None,
transformers=None,
two_qubit_reduction=False,
z2symmetry_reduction = “Auto”,
name_solver='NumPy exact solver',
solver=NumPyMinimumEigensolver(),
plot_bopes=False,
perturbation_steps=np.linspace(-1, 1, 3),
pyqmc=True,
n_ancillae=3,
num_time_slices=1,
loss=[],
label=None,
target=None,
show=True
):
现在我们展示包含在solve_ground_state()函数中的代码。
我们首先通过选择 PySCF 驱动类型和分子轨道要展开的基础集sto3g来定义电子结构分子驱动程序。以下是代码:
# Defining the electronic structure molecule driver
driver = ElectronicStructureMoleculeDriver(molecule, basis='sto3g', driver_type=ElectronicStructureDriverType.PYSCF)
然后,如果同时指定了num_electrons和num_molecular_orbitals,我们调用ActiveSpaceTransformer函数将计算分为经典和量子两部分:
# Splitting into classical and quantum
if num_electrons != None and num_molecular_orbitals != None:
split = ActiveSpaceTransformer(num_electrons=num_electrons, num_molecular_orbitals=num_molecular_orbitals)
else:
split = None
接下来,我们创建一个ElectronicStructureProblem,如下生成费米子算子的列表:
# Defining a fermionic Hamiltonian operator
if split != None:
fermionic_hamiltonian = ElectronicStructureProblem(driver, [split])
elif transformers != None:
fermionic_hamiltonian = ElectronicStructureProblem(driver, transformers=transformers)
else:
fermionic_hamiltonian = ElectronicStructureProblem(driver)
然后,我们使用second_q_ops()方法[Qiskit_Nat_3],它返回一个包含量子化算子的列表:哈密顿算子、总粒子数算子、总角动量算子、总磁化算子,以及如果可用的话,
,
,
偶极算子:
second_q_op = fermionic_hamiltonian.second_q_ops()
我们通过调用particle_number()函数来获取分子的粒子数属性:
# Get particle number
particle_number = get_particle_number(fermionic_hamiltonian, show=show)
如果输入参数show设置为True,我们使用set_truncation(1000)方法将截断设置为1000,然后打印分子的费米子哈密顿算子:
if show:
# We set truncation to 1000 with the method set_truncation(1000)
second_q_op[0].set_truncation(1000)
# then we print the first 20 terms of the fermionic Hamiltonian operator of the molecule
print(“Fermionic Hamiltonian operator”)
print(second_q_op[0])
接下来,我们使用在第 4.8 节使用 Qiskit Nature 构建量子比特哈密顿量中定义的fermion_to_qubit()函数将费米子算符转换为量子比特算符:
# Use the function fermion_to_qubit() to convert a fermionic operator to a qubit operator
if show:
print(“ “)
qubit_op, qubit_converter = fermion_to_qubit(fermionic_hamiltonian, second_q_op, mapper=mapper, two_qubit_reduction=two_qubit_reduction, z2symmetry_reduction=z2symmetry_reduction, show=show)
然后我们调用之前定义的run_PySCF()函数来运行 PySCF RHF 方法:
# Run the the PySCF RHF method
if show:
print(“ “)
conv, e = run_PySCF(molecule, pyqmc=pyqmc, show=show)
然后我们调用run_qpe()函数执行 QPE,并将哈密顿量的最可能本征值作为电子基态能量的估计值返回:
# Run QPE
eigv = run_qpe(particle_number, qubit_converter, qubit_op, n_ancillae=n_ancillae, num_time_slices=num_time_slices, show=True)
接下来,我们调用之前定义的run_vqe()函数来求解基态:
# Run VQE
if show:
print(“ “)
ground_state = run_vqe(name_solver, fermionic_hamiltonian, qubit_converter, solver, show=show)
如果loss参数不是一个空数组,我们调用plot_loss()函数来绘制损失随迭代次数的变化:
# Plot loss function
if loss != []:
plot_loss(loss, label, target)
接下来,如果plot_bopes参数设置为True,我们使用BOPESSampler Python 类[Qiskit_Nat_6],它管理改变几何形状并重复调用基态求解器的过程,然后我们获取并绘制 BOPES:
if plot_bopes:
# Compute the potential energy surface as follows:
energy_surface = BOPESSampler(gss=GroundStateEigensolver(qubit_converter, solver), bootstrap=False)
# Set default to an empty dictionary instead of None:
energy_surface._points_optparams = {}
energy_surface_result = energy_surface.sample(fermionic_hamiltonian, perturbation_steps)
# Plot the energy as a function of atomic separation
plot_energy_landscape(energy_surface_result)
最后,我们让solve_ground_state()函数将以下参数返回给调用者:
-
fermionic hamiltonian,分子的费米子哈密顿量算符 -
particle number,分子的粒子数性质 -
qubit_op,量子比特哈密顿量算符 -
qubit_converter,可以是JordanWignerMapper()、ParityMapper()或BravyiKitaevMapper(),这是fermion_to_qubit()函数的输出 -
ground_state,分子的基态,如果已经收敛
使用以下return语句:
return fermionic_hamiltonian, particle_number, qubit_op, qubit_converter, ground_state
现在我们演示如何使用solve_ground_state()函数处理不同的分子、不同的映射器和不同的经典求解器。
5.2.1. 氢分子(H2)
我们遵循第 4.6.1 节中描述的过程,即构建氢分子的费米子哈密顿量算符。首先,我们定义氢分子的几何形状如下:
hydrogen_molecule = Molecule(geometry=[['H', [0., 0., 0.]],
['H', [0., 0., 0.735]]],
charge=0, multiplicity=1)
我们在第 4.6.1 节的图 4.9中展示了氢分子的粒子数性质,其中我们看到四个自旋轨道(SOs),一个
电子和一个
电子。
我们在第 4.6.1 节构建氢分子的费米子哈密顿量算符中展示了氢分子的费米子哈密顿量算符。
变化氢分子
我们指定分子变体的类型,Molecule.absolute_stretching,如下所示:
molecular_variation = Molecule.absolute_stretching
我们指定将指定原子对中的第一个原子移动到第二个原子更近的位置。数字指的是几何定义列表中原子的索引。以下是代码:
specific_molecular_variation = apply_variation(molecular_variation, atom_pair=(1, 0))
我们按如下方式修改原始分子定义:
hydrogen_molecule_stretchable = Molecule(geometry=
[['H', [0., 0., 0.]],
['H', [0., 0., 0.735]]],
charge=0, multiplicity=1,
degrees_of_freedom=[specific_molecular_variation])
现在我们继续求解基态。
求解基态
现在我们使用 NumPy 精确最小本征值求解器运行 VQE:
H2_fermionic_hamiltonian, H2_particle_number, H2_qubit_op, H2_qubit_converter, H2_ground_state = \
solve_ground_state(hydrogen_molecule, mapper =”Parity”,
two_qubit_reduction=True, z2symmetry_reduction=None,
name_solver = 'NumPy exact solver', solver = numpy_solver)
图 5.5显示了run_PySCF()和run_QPE()函数的计算结果:

图 5.5 – 使用 PySCF RHF、PyQMC 模拟退火和 QPE 的 H2 分子基态
图 5.6 展示了 VQE 计算的结果:

图 5.6 – 使用 NumPy 最小特征值求解器进行 VQE 的 H2 分子基态
接下来,我们使用 UCC 工厂基组([VQE_2] [VQE_3])运行 VQE:
H2_fermionic_hamiltonian, H2_particle_number, H2_qubit_op, H2_qubit_converter, H2_ground_state = \
solve_ground_state(hydrogen_molecule, mapper =”Parity”,
two_qubit_reduction=True, z2symmetry_reduction=None,
name_solver = 'Unitary Coupled Cluster (UCC) factory ansatz', solver = vqe_ucc_solver)
图 5.7 展示了结果:

图 5.7 – 使用 UCC 工厂基组进行 VQE 的 H2 分子基态
现在我们使用启发式基组,默认的 SLSQP 优化器([Panagiotis])运行 VQE:
H2_fermionic_hamiltonian, H2_particle_number, H2_qubit_op, H2_qubit_converter, H2_ground_state = \
solve_ground_state(hydrogen_molecule, mapper =”Parity”,
two_qubit_reduction=True, z2symmetry_reduction=None,
name_solver = 'Heuristic ansatz, the Two-Local circuit with SLSQP',solver = vqe_tl_solver)
图 5.8 展示了结果:

图 5.8 – 使用 Two-Local 电路和 SLSQP 进行 VQE 的 H2 分子基态
我们定义 qnspsa() 函数如下:
qnspsa_loss = []
ansatz = tl_circuit
fidelity = QNSPSA.get_fidelity(ansatz, quantum_instance, expectation=PauliExpectation())
qnspsa = QNSPSA(fidelity, maxiter=200, learning_rate=0.01, perturbation=0.7, callback=qnspsa_callback)
这里是设置 VQE 使用启发式基组和 QN-SPSA 优化器的代码:
vqe_tl_QNSPSA_solver = VQE(ansatz=tl_circuit, optimizer=qnspsa,
quantum_instance=quantum_instance)
现在我们使用启发式基组和 QN-SPSA 优化器调用 solve_ground_state():
H2_fermionic_hamiltonian, H2_particle_number, H2_qubit_op, H2_qubit_converter, H2_ground_state = \
solve_ground_state(hydrogen_molecule, mapper =”Parity”,
two_qubit_reduction=True, z2symmetry_reduction=None, loss=qnspsa_loss, label='QN-SPSA', target=-1.857274810366,
name_solver='Two-Local circuit and the QN-SPSA optimizer', solver=vqe_tl_QNSPSA_solver)
图 5.9 展示了结果:

图 5.9 – 使用 Two-Local 电路和 QN-SPSA 进行 VQE 的 H2 分子基态
图 5.10 展示了 QN-SPSA 优化器的损失函数图:

图 5.10 – 使用 Two-Local 电路和 QN-SPSA 对 H2 分子进行 VQE 的损失函数图
图 5.11 中的表格总结了使用 Python 包 PySCF RHF、PyQMC 以及 Qiskit Nature 类(VQE 使用 NumPy 精确求解器、SLSQP、QN-SPSA 和 QPE)获得的计算结果。

图 5.11 – 总结使用 H2 分子获得的基态能量的计算表格
图 5.11 显示了不同电子基态计算和总基态能量与相同量子比特映射器(称为 ParityMapper(),two_qubit_reduction=True)的紧密一致性。PyQMC 方法给出了最低的总能量 -1.162 Ha,是最准确的。它与参考文献 [Ebomwonyi] 中显示的 -1.168 Ha 的结果一致。
计算 BOPES
我们现在计算并绘制氢分子的 BOPES 如下:
perturbation_steps = np.linspace(-0.5, 2, 25) # 25 equally spaced points from -0.5 to 2, inclusive.
H2_stretchable_fermionic_hamiltonian, H2_stretchable_particle_number, H2_stretchable_qubit_op, H2_stretchable_qubit_converter, H2_stretchable_ground_state = \
solve_ground_state(hydrogen_molecule_stretchable, mapper =”Parity”,
two_qubit_reduction=True, z2symmetry_reduction=None,
name_solver = 'NumPy exact solver', solver = numpy_solver,
plot_bopes = True, perturbation_steps=perturbation_steps)
图 5.12 展示了氢分子 BOPES 的图:

图 5.12 – 氢分子 BOPES 的图
5.2.2. 锂氢分子
我们遵循 第 4.6.2 节,构建锂氢分子的费米子哈密顿算符 中描述的过程。首先,我们定义锂氢(LiH)分子的几何结构如下:
LiH_molecule = Molecule(geometry=[['Li', [0., 0., 0.]],
['H', [0., 0., 1.5474]]],
charge=0, multiplicity=1)
我们在第 4.6.2 节的图 4.17中展示了粒数属性,其中我们看到了六个 SOs、一个
电子和一个
电子。我们在第 4.6.2 节的图 4.20中展示了锂氢分子的费米子哈密顿算符。
改变锂氢分子
我们如下修改了原始分子定义:
LiH_molecule_stretchable = Molecule(geometry=[['Li', [0., 0., 0.]],
['H', [0., 0., 1.5474]]],
charge=0, multiplicity=1,
degrees_of_freedom=[specific_molecular_variation])
reduction=True, z2symmetry_reduction=”auto”)
求解基态
我们使用 NumPy 精确特征值求解器运行 VQE:
LiH_fermionic_hamiltonian, LiH_particle_number, LiH_qubit_op, LiH_qubit_converter, LiH_ground_state = \
solve_ground_state(LiH_molecule, mapper =”Parity”,
transformers=[FreezeCoreTransformer(freeze_core=True, remove_orbitals=[4, 3])],
two_qubit_reduction=True, z2symmetry_reduction=”auto”,
name_solver = 'NumPy exact solver', solver = numpy_solver)
图 5.13 展示了run_PySCF()和run_QPE()函数的计算结果:

图 5.13 – 使用 PySCF RHF、PyQMC 蒙特卡洛和 QPE 得到的 LiH 分子的基态
图 5.14 展示了 VQE 计算的成果:

图 5.14 – 使用 NumPy 最小特征值求解器的 VQE 得到的 LiH 分子的基态
我们使用 Two-Local 电路和 SLSQP 运行 VQE:
LiH_fermionic_hamiltonian, LiH_particle_number, LiH_qubit_op, LiH_qubit_converter, LiH_ground_state = \
solve_ground_state(LiH_molecule, mapper =”Parity”,
transformers=[FreezeCoreTransformer(freeze_core=True, remove_orbitals=[4, 3])],
two_qubit_reduction=True, z2symmetry_reduction=”auto”,
name_solver = 'Heuristic ansatz, the Two-Local circuit with SLSQP', solver = vqe_tl_solver)
图 5.15 展示了结果:

图 5.15 – 使用 Two-Local 电路和 SLSQP 的 VQE 得到的 LiH 分子的基态
我们如下定义qnspsa()函数:
qnspsa_loss = []
ansatz = tl_circuit
fidelity = QNSPSA.get_fidelity(ansatz, quantum_instance, expectation=PauliExpectation())
qnspsa = QNSPSA(fidelity, maxiter=500, learning_rate=0.01, perturbation=0.7, callback=qnspsa_callback)
下面是使用启发式基和 QN-SPSA 优化器的 VQE 设置的代码:
vqe_tl_QNSPSA_solver = VQE(ansatz=tl_circuit, optimizer=qnspsa,
quantum_instance=quantum_instance)
现在我们使用启发式基和 QN-SPSA 优化器调用solve_ground_state():
LiH_fermionic_hamiltonian, LiH_particle_number, LiH_qubit_op, LiH_qubit_converter, LiH_ground_state = \
solve_ground_state(LiH_molecule, mapper=”Parity”,
transformers=[FreezeCoreTransformer(freeze_core=True, remove_orbitals=[4, 3])],
two_qubit_reduction=True, z2symmetry_reduction=”auto”, loss=qnspsa_loss, label='QN-SPSA', target=-1.0703584,
name_solver='Two-Local circuit and the QN-SPSA optimizer', solver=vqe_tl_QNSPSA_solver)
图 5.16 展示了结果:

图 5.16 – 使用 Two-Local 电路和 QN-SPSA 的 VQE 得到的 LiH 分子的基态
图 5.17 展示了 QN-SPSA 优化器的损失函数图:

图 5.17 – 使用 Two-Local 电路和 QN-SPSA 的 VQE 对 LiH 分子的损失函数
图 5.18 中显示的表格总结了使用 Python 包 PySCF RHF、PyQMC 以及 Qiskit Nature 类、使用 NumPy 精确求解器的 VQE、SLSQP、QN-SPSA 和 QPE 得到的计算结果:

图 5.18 – 总结使用 LiH 分子得到的基态能量的计算表格
图 5.18 显示了不同电子基态计算和总基态能量之间的紧密一致性。PyQMC 方法给出了最低的总能量-8.102 Ha,并且是最准确的。它与参考文献[Adamowicz_3]中显示的-8.07 Ha 的结果一致。
计算 BOPES
我们现在如下计算并绘制锂氢分子的 BOPES:
perturbation_steps = np.linspace(-0.8, 0.8, 10) # 10 equally spaced points from -0.8 to 0.8, inclusive.
LiH_stretchable_fermionic_hamiltonian, LiH_stretchable_particle_number, LiH_stretchable_qubit_op, LiH_stretchable_qubit_converter, LiH_stretchable_ground_state = \
solve_ground_state(LiH_molecule_stretchable, mapper =”Parity”,
transformers=[FreezeCoreTransformer(freeze_core=True, remove_orbitals=[4, 3])],
two_qubit_reduction=True, z2symmetry_reduction=”auto”,
name_solver='NumPy exact solver', solver=numpy_solver,
plot_bopes = True, perturbation_steps=perturbation_steps)
图 5.19 展示了结果:

图 5.19 – LiH 分子的 BOPES 图
5.2.3. 宏分子
现在,我们探索 IBM 量子挑战非洲 2021 年 HIV 的使用案例,量子化学在 HIV 中的应用 [Africa21]。在他们的挑战中,他们旨在确定一个抗逆转录病毒分子的玩具模型是否能与一个蛋白酶分子的玩具模型结合。由于抗逆转录病毒分子有多个原子,它通过使用单个碳原子进行近似。蛋白酶分子的玩具模型由甲酰胺分子(HCONH2)的一个组成部分表示;特别是它是甲酰胺分子的碳-氧-氮部分。简而言之,实验是确定单个碳原子是否能与甲酰胺分子的碳-氧-氮部分结合。我们将通过绘制宏观分子(甲酰胺分子加上碳原子)的 BOPES 来得到 IBM 提出的问题的答案。
首先,我们使用 ASE 的Atoms对象定义宏观分子 [ASE_1]:
macro_ASE = Atoms('ONCHHHC', [(1.1280, 0.2091, 0.0000),
(-1.1878, 0.1791, 0.0000),
(0.0598, -0.3882, 0.0000),
(-1.3085, 1.1864, 0.0001),
(-2.0305, -0.3861, -0.0001),
(-0.0014, -1.4883, -0.0001),
(-0.1805, 1.3955, 0.0000)])
然后,我们使用 ASE 查看器 X3D 为 Jupyter 笔记本显示分子的 3D 视图 [ASE2]:
view(macro_ASE, viewer='x3d')
图 5.20显示了结果。氮原子在左侧用蓝色表示,氧原子在右侧用红色表示,碳原子在中间用灰色表示,三个氢原子是浅灰色中最小的。顶部的碳原子没有与其他原子结合。

图 5.20 – 宏观分子
我们指定分子变体的类型,Molecule.absolute_stretching,如下所示:
molecular_variation = Molecule.absolute_stretching
我们指定变体应用于哪些原子。数字指的是几何定义列表中原子的索引。单个碳原子被移动到氮原子更近的位置:
specific_molecular_variation = apply_variation(molecular_variation, atom_pair=(6, 1))
我们使用 Qiskit 的Molecule类定义宏观分子的分子几何形状,如下所示:
macromolecule = Molecule(geometry=
[['O', [1.1280, 0.2091, 0.0000]],
['N', [-1.1878, 0.1791, 0.0000]],
['C', [0.0598, -0.3882, 0.0000]],
['H', [-1.3085, 1.1864, 0.0001]],
['H', [-2.0305, -0.3861, -0.0001]],
['H', [-0.0014, -1.4883, -0.0001]],
['C', [-0.1805, 1.3955, 0.0000]]],
charge=0, multiplicity=1,
degrees_of_freedom=[specific_molecular_variation])
现在我们可以求解基态。
求解基态
通过指定某些电子应使用量子计算算法处理,而其余电子应使用 Qiskit 的ActiveSpaceTransformer类进行经典近似,从而减少量子工作量,该类接受两个参数:
-
num_electrons,从最外层电子中选出的电子数量,从外向内计数,用于量子计算算法处理。 -
num_molecular_orbitals,允许这些电子在所谓的费米能级周围(漫游)的轨道数量。它决定了需要多少个量子比特。
我们打印 VQE 运行的参数选择:
print(“Macro molecule”)
print(“Using the ParityMapper with two_qubit_reduction=True to eliminate two qubits”)
print(“Parameters ActiveSpaceTransformer(num_electrons=2, num_molecular_orbitals=2)”)
print(“Setting z2symmetry_reduction=\”auto\””)
这里是结果:
Macro molecule
Using the ParityMapper with two_qubit_reduction=True to eliminate two qubits
Parameters ActiveSpaceTransformer(num_electrons=2, num_molecular_orbitals=2)
Setting z2symmetry_reduction=”auto”
然后我们使用 NumPy 精确最小本征值求解器运行 VQE:
macro_fermionic_hamiltonian, macro_particle_number, macro_qubit_op, macro_qubit_converter, macro_ground_state = \
solve_ground_state(macromolecule, mapper=”Parity”,
num_electrons=2, num_molecular_orbitals=2,
two_qubit_reduction=True, z2symmetry_reduction=”auto”,
name_solver='NumPy exact solver', solver=numpy_solver, pyqmc=False)
图 5.21显示了宏观分子费米子算符的前 20 项:

图 5.21 – 宏观分子费米子哈密顿算符的前 20 项
图 5.22 展示了通过偶宇称变换获得的大分子最外层两个电子的量子比特哈密顿算符。正如预期的那样,只需要两个量子比特来将费米子哈密顿算符映射到量子比特哈密顿算符:

图 5.22 – 大分子最外层两个电子的量子比特哈密顿算符
图 5.23 展示了由 PySCF RHF Python 软件包计算的分子的总基态能量以及由 Qiskit Nature QPE 类计算的最外层两个电子的分子电子基态能量的估计:

图 5.23 – 由 PySCF 和 QPE 分别计算的大分子的总基态能量和电子基态能量
图 5.24 展示了 VQE 计算的结果:

图 5.24 – 使用 NumPy 精确最小本征值求解器计算的大分子基态
通过 QPE 计算的大分子最外层两个电子的电子基态能量,
(哈特里),以及通过 VQE 和 Qiskit Nature 类计算的大分子电子基态能量,
,是一致的。
由 PySCF RHF Python 软件包计算的大分子的总基态能量,
(哈特里),以及由 Qiskit Nature VQE 类计算的大分子的总基态能量,
,是一致的。
计算 BOPES
我们现在按照以下方式计算和绘制大分子的 BOPES:
perturbation_steps = np.linspace(-0.5, 3, 10) # 10 equally spaced points from -0.5 to 3, inclusive.
macro_fermionic_hamiltonian, macro_particle_number, macro_qubit_op, macro_qubit_converter, macro_ground_state = \
solve_ground_state(macromolecule, mapper =”Parity”,
num_electrons=2, num_molecular_orbitals=2,
two_qubit_reduction=True, z2symmetry_reduction=”auto”,
name_solver='NumPy exact solver', solver=numpy_solver, pyqmc=False,
plot_bopes=True, perturbation_steps=perturbation_steps)
图 5.25 展示了结果:

图 5.25 – 大分子 BOPES 的绘图
大分子 BOPES 的绘图显示在任何分离下都没有明显的最小值。我们得出结论,单个碳原子与甲酰胺玩具蛋白酶分子没有结合。
摘要
在本章中,我们介绍了用于寻找量子系统最低能量本征值的经典和混合经典-量子变分方法,以及使用与 PySCF 和 Qiskit Nature 兼容的基于 Python 的 PyQMC 变分蒙特卡洛 Python 软件包的实现,该软件包使用 STO-3G 基和基于 Python 的 PySCF 驱动程序。
我们已经展示了这些方法,求解了氢分子、氢化锂分子和宏分子的基态,并绘制了它们的 BOPES。
我们使用 Qiskit Nature VQE 和 QPE 获得的结果与使用 PyQMC 和 PySCF RHF 软件包获得的那些结果在几个费米子到量子比特哈密顿映射器和经典梯度下降求解器的组合中以及通过将量子工作量减少到甲酰胺分子的最外层两个电子的形式中是一致的。我们希望这些结果将鼓励读者用不同的求解器和不同的分子重新进行这些实验。
问题
请使用相应的 Google Colab 笔记本测试你对本章中提出的概念的理解:
-
变分定理是否适用于激发态?
-
对或错:Metropolis-Hastings 方法是一种近似空间坐标积分的方法。
-
对或错:VQE 只是一个量子计算算法,不需要使用经典计算。
答案
-
是
-
对
-
错误
参考文献
[ASE_0] 原子模拟环境 (ASE),wiki.fysik.dtu.dk/ase/index.html
[ASE_1] ASE,原子对象,wiki.fysik.dtu.dk/ase/ase/atoms.html
[ASE_2] ASE 可视化,wiki.fysik.dtu.dk/ase/ase/visualize/visualize.html#module-ase.visualize
[Adamowicz_3] Tung WC,Pavanello M,Adamowicz L.,LiH 分子的非常精确的势能曲线。表 I. LiH 分子基态在 R = 3.015 bohr 时的 BO 能量收敛性比较,J Chem Phys. 2011 年 2 月 14 日;134(6):064117。doi:10.1063/1.3554211,doi.org/10.1063/1.3554211
[Africa21] IBM 量子挑战非洲 2021,github.com/qiskit-community/ibm-quantum-challenge-africa-2021
[Burg] Vera von Burg,Guang Hao Low,Thomas Häner,Damian S. Steiger,Markus Reiher,Martin Roetteler,Matthias Troyer,量子计算增强的计算催化,2021 年 3 月 3 日,10.1103/PhysRevResearch.3.033055,arxiv.org/abs/2007.14460
[Bushmanov] Sergey Bushmanov,如何在 Python 中使用 Matplotlib 和数据列表绘制直方图?,Stack Overflow,stackoverflow.com/questions/33203645/how-to-plot-a-histogram-using-matplotlib-in-python-with-a-list-of-data
[Cao] Yudong Cao,Jonathan Romero,Jonathan P. Olson,Matthias Degroote,Peter D. Johnson,Mária Kieferová,Ian D. Kivlichan,Tim Menke,Borja Peropadre,Nicolas P. D. Sawaya,Sukin Sim,Libor Veis,Alán Aspuru-Guzik,量子计算时代的量子化学,Chem. Rev. 2019,119,19,10856–10915,2019 年 8 月 30 日,doi.org/10.1021/acs.chemrev.8b00803
[Chen] Sija Chen,量子蒙特卡罗方法,Maplesoft,fr.maplesoft.com/Applications/Detail.aspx?id=154748
[Dagrada] Mario Dagrada,改进的量子蒙特卡罗模拟:从开放到扩展系统,材料科学 [cond-mat.mtrl-sci]。皮埃尔和玛丽·居里大学 - 巴黎第六大学;圣马丁国立大学,2016。英语。⟨NNT: 2016PA066349⟩。⟨tel-01478313⟩,tel.archives-ouvertes.fr/tel-01478313/document
[埃博姆沃尼] 埃博姆沃尼,奥萨罗迪翁,使用 CASINO 代码对氢分子的基态能量进行量子蒙特卡罗计算,2013,表 3.1:不同研究者对氢分子基态能量的比较分析,https://www.semanticscholar.org/paper/A-Quantum-Monte-Carlo-Calculation-of-the-Ground-for-Ebomwonyi/5316eb86f39cf4fa0a8fd06d136aac4db1105ad4
[Freeman] 弗里德曼-迪亚科尼斯规则,维基百科,en.wikipedia.org/wiki/Freedman%E2%80%93Diaconis_rule
[戈列洛夫] 维塔利·戈列洛夫,电子结构计算的量子蒙特卡罗方法:应用于极端条件下的氢,1.4.1 变分蒙特卡罗(VMC),tel.archives-ouvertes.fr/tel-03045954/document
[Grok] 理解布洛赫球,javafxpert.github.io/grok-bloch/
[H5py] 快速入门指南,docs.h5py.org/en/stable/quick.html
[IBM_CEO] IBM 首席执行官:本世纪量子计算将“像火箭一样”起飞,Fast Company,2021 年 9 月 28 日,www.fastcompany.com/90680174/ibm-ceo-quantum-computing-will-take-off-like-a-rocket-ship-this-decade
[IBM_comp1] 欢迎使用 IBM 量子作曲家,quantum-computing.ibm.com/composer/docs/iqx/
[IBM_comp2] IBM 量子作曲家,quantum-computing.ibm.com/composer/files/new
[洛尔] 洛尔,法尔贡,马格努斯·拉姆,马库斯·斯科格,劳拉·加西亚-阿尔瓦雷斯和戈兰·温丁,通过在高性能计算机上模拟原生物分子的基态能量来基准测试变分量子本征求解器,arXiv:2010.13578v2 [quant-ph],2021 年 1 月 5 日,arxiv.org/pdf/2010.13578.pdf
[NumPy] NumPy:初学者的绝对基础,numpy.org/doc/stable/user/absolute_beginners.html
[帕纳吉奥蒂斯] 帕纳吉奥蒂斯·K. 巴科乌索斯,杰罗姆·F. 贡蒂耶尔,伊戈尔·索科洛夫,尼古拉·莫尔,吉安·萨利斯,安德烈亚斯·富赫勒,马克·甘茨霍恩,丹尼尔·J. 埃格尔,马蒂亚斯·特罗耶,安东尼奥·梅扎卡波,斯特凡·菲利普,伊瓦诺·塔瓦内利,电子结构计算的量子算法:粒子-空穴哈密顿量和优化波函数展开,物理评论 A 98,022322 – 发布于 2018 年 8 月 20 日,DOI:10.1103/PhysRevA.98.022322,link.aps.org/doi/10.1103/PhysRevA.98.022322,arxiv.org/abs/1805.04340
[Pease] 克里斯托弗·皮斯,蒙特卡洛方法概述,数据科学之路,towardsdatascience.com/an-overview-of-monte-carlo-methods-675384eb1694
[PyQMC] PyQMC,一个实现实空间量子蒙特卡洛技术的 Python 模块,github.com/WagnerGroup/pyqmc
[PySCF] 基于 Python 的化学模拟框架(PySCF),pyscf.org/
[Qiskit] Qiskit,qiskit.org/
[Qiskit_2021_Lab4] 朱利安·加孔,实验 4:量子电路训练简介,Qiskit 夏令营 2021,learn.qiskit.org/summer-school/2021/lab4-introduction-training-quantum-circuits
[Qiskit_Nat_0] Qiskit_Nature,github.com/Qiskit/qiskit-nature/blob/main/README.md
[Qiskit_Nat_3] ElectronicStructureProblem.second_q_ops,qiskit.org/documentation/nature/stubs/qiskit_nature.problems.second_quantization.ElectronicStructureProblem.second_q_ops.html
[Qiskit_Nat_4] QubitConverter,qiskit.org/documentation/nature/stubs/qiskit_nature.converters.second_quantization.QubitConverter.html
[Qiskit_Nat_5] Qiskit Nature 教程,电子结构,qiskit.org/documentation/nature/tutorials/01_electronic_structure.html
[Qiskit_Nat_6] Qiskit Nature 教程,采样势能面,qiskit.org/documentation/nature/_modules/qiskit_nature/algorithms/pes_samplers/bopes_sampler.html
[Qiskit_Nature] 介绍 Qiskit Nature,Qiskit,Medium,2021 年 4 月 6 日,medium.com/qiskit/introducing-qiskit-nature-cb9e588bb004
[QuTiP] QuTiP,在布洛赫球上绘图,qutip.org/docs/latest/guide/guide-bloch.html
[SciPy] 统计函数(scipy.stats),docs.scipy.org/doc/scipy/getting_started.html
[Stephens] 马修·斯蒂芬斯,Metropolis Hastings 算法,stephens999.github.io/fiveMinuteStats/MH_intro.html
[Toulouse] Julien Toulouse,量子化学导论,2021 年 1 月 20 日,www.lct.jussieu.fr/pagesperso/toulouse/enseignement/introduction_qc.pdf
[Tamir] Abraham Tamir,化学工程中马尔可夫链的应用,Elsevier,1998 年,9780080527390,0080527396,www.google.fr/books/edition/Applications_of_Markov_Chains_in_Chemica/X0ivOmHYPoYC
[Toulouse_1] Julien Toulouse,量子蒙特卡洛波函数及其在量子化学中的优化,CEA Saclay,SPhN Orme des Merisiers,2015 年 4 月,www.lct.jussieu.fr/pagesperso/toulouse/presentations/presentation_saclay_15.pdf
[Troyer] Matthias Troyer,Matthias Troyer:在化学模拟中实现实用量子优势,QuCQC 2021,www.youtube.com/watch?v=2MsfbPlKgyI
[VQE_1] Peruzzo, A., McClean, J., Shadbolt, P. 等人,基于光子量子处理器的变分本征值求解器,Nat Commun 5, 4213 (2014),doi.org/10.1038/ncomms5213
[VQE_2] Qiskit Nature, 地基态求解器,qiskit.org/documentation/nature/tutorials/03_ground_state_solvers.html
[VQE_3] 用于小分子和量子磁体的硬件高效变分量子本征值求解器,Nature 549, 242–246 (2017),doi.org/10.1038/nature23879
[VQE_4] 在状态向量模拟器上运行 VQE,qiskit.org/textbook/ch-applications/vqe-molecules.html#Running-VQE-on-a-Statevector-Simulator
第六章:超越 Born-Oppenheimer
“第一条原则是,你绝不能欺骗自己——而你是最容易欺骗的人。”
– 理查德·费曼
“科学进步是以勇气而非智力为单位的。”
– 保罗·狄拉克

图 6.1 – 凯珀·夏基博士想象的双原子分子的分子振动 [作者]
计算分子结构和振动光谱是现代计算化学的两个基本目标,这些目标在许多领域都有应用,从天体化学到生物化学和气候变化缓解。当原子数和/或相同粒子的数量线性增加时,计算复杂性呈指数增长。当旋转和振动自由度之间存在显著耦合,以及在接近解离和电离极限的高能量状态时,还会出现额外的复杂性 [Sawaya]。
能够实现下一代精度的计算方法将超越本书中现有的标准近似。本章重点介绍非 Born-Oppenheimer(非 BO)计算如何包括做出更好预测所需的效果,即对高于基态振动的化学状态的预测 [Adamowicz_1][Adamowicz_2]。其他超越 BO 类型的途径正在被追求以克服 BO 近似的局限性,但它们并非完全非 BO,例如预 BO [Schiffer_1] [Schiffer_2][Mátyus][D4.1 VA Beta]。
作为利用振动状态优势的一个例子,我们提到了麻省理工学院电子研究实验室的一组物理学家,他们展示了一种新的费米子对量子寄存器,其中信息存储在处于两个振动状态叠加的原子对的振动运动中 [Hartke]。每个原子对的共同和相对运动由交换对称性保护,从而实现长寿命和鲁棒的动量相干性。他们说 “因此,费米子反对称性和强相互作用,是经典计算多费米子行为的核心挑战,可能为保护和处理量子信息提供决定性的解决方案。” 他们的成就为构建多费米子行为的可编程量子模拟器和使用费米子对的数字计算铺平了道路。
在本章中,我们将涵盖以下主题:
-
第 6.1 节,非 Born-Oppenheimer 分子哈密顿量
-
第 6.2 节,振动频率分析计算
-
第 6.3 节,氢分子正位-反位异构化振动光谱
技术要求
本章的配套 Jupyter 笔记本可以从 GitHub 下载,网址为github.com/PacktPublishing/Quantum-Chemistry-and-Computing-for-the-Curious,该笔记本已在 Google Colab 环境中测试,这是一个免费且完全在云端运行的环境,以及 IBM Quantum Lab 环境中。请参阅附录 B – 在云端利用 Jupyter 笔记本,获取更多信息。配套的 Jupyter 笔记本会自动安装以下列表中的库:
-
NumPy [NumPy],一个开源的 Python 库,几乎被用于科学和工程的每一个领域
-
SciPy [SciPy],一个免费和开源的 Python 库,用于科学计算和技术计算
配套的 Jupyter 笔记本不包括安装 Psi4 免费和开源的高吞吐量量子化学软件[Psi4_0],我们使用它来执行二氧化碳(CO2)分子的振动频率分析的计算。对于有兴趣安装此软件包的读者,请参阅“Get Started with Psi4” [Psi4_1] 文档和文章参考文献 [Psi4_3]。
安装 NumPy、SimPy 和 math 模块
使用以下命令安装 NumPy:
pip install numpy
使用以下命令安装 SciPy:
pip install scipy
使用以下命令导入 NumPy:
import numpy as np
使用以下命令导入 Matplotlib,这是一个用于在 Python 中创建静态、动画和交互式可视化的综合性库:
import matplotlib.pyplot as plt
使用以下命令导入 SciPy 的特殊厄米多项式:
from scipy.special import hermite
使用以下命令导入 math factorial函数:
from math import factorial
6.1. 非 Born-Oppenheimer 分子哈密顿量
回想第 4.1 节,Born-Oppenheimer 近似,实验室坐标系中哈密顿量的表达式
:

在原子单位中,电子的质量和约化普朗克常数(
)被设置为 1。LAB 哈密顿量包括所有粒子的动能之和以及所有粒子之间的势能,其定义如下:
-
和
是相对于电子和核的位置坐标的二阶导数算子,即
和类似地对于
电子。 -
,
,和
是电子
和
、电子
和核
、以及核
和
之间的欧几里得距离。
LAB 哈密顿量的算子列表已在图 4.3中展示。
在 LAB 哈密顿算符中,分子系统的能量是连续的,而不是离散的。质心(COM)运动不会对系统的内部状态能量产生影响,可以将其分解出来。内部状态是量子化的,对平移不变。这些状态不受自由空间中的平移和旋转运动的影响。核仍然可以通过振动和内部旋转在 COM 周围移动。
在 BO 近似中,我们假设核的运动与电子的运动是解耦的,也就是说,核方程(旋转和振动)与电子方程的乘积:

其中
是核坐标,
是电子坐标,
是自旋坐标,而电子波函数(
)则依赖于核坐标(
)。
在非 BO 方法中,总波函数在旋转和振动以及电子能级方面仍然是可分离的;然而,所有能级都依赖于电子和核的变量,空间和自旋。

在 BO 近似中,仅求解具有固定核位置的电子方程,可以通过迭代来考虑核的振动和内部旋转。对于每一次迭代,原子的核在空间中是固定的,不移动,这可以被视为违反了在第 1.4 节,光和能量中引入的海森堡不确定性原理。你越确切地知道一个粒子的位置,你对它的动量的了解就越少。一般来说,内部坐标系可以放置在分子中最重的原子或质心处。这种近似有一定的局限性,我们将在振动光谱能量中具体讨论。
本章中提出的非 BO 方法利用显式相关高斯基函数(ECGs)[Adamowicz_4]的有效性和预测能力来描述原子和分子现象[Sharkey]。这种方法可以用来模拟少量粒子,即三个核或不超过七个电子,以及确定原子的电离能、里德伯态以及旋转和振动激发态的精确值到任意水平[Sharkey]。此外,这种方法非常适合有效的并行化。
内部哈密顿算符
我们考虑一个由
个粒子组成的通用非相对论原子系统,即
个电子和一个原子核。从实验室框架哈密顿量到内部哈密顿量的转换涉及严格地将 COM 运动与实验室框架分开。我们定义一个内部笛卡尔坐标系(CCF),其中所有粒子都平等对待,所有粒子都可以在没有任何约束的情况下自由地漫游空间。从实验室 CCF 到内部 CCF 的坐标变换在 图 6.2 中表示。

图 6.2 – 内部 CCF 和实验室 CCF
得到的内部哈密顿量用于计算系统的束缚态:

为了清晰起见,我们在 图 6.3 中列出内部哈密顿量的项。

图 6.3 – 分子内部哈密顿量算符的项
现在我们介绍全粒子显式相关方法。
显式相关所有粒子的高斯函数
在非 BO 方法中使用的 ECGs 如 图 6.4 所示。

图 6.4 – ECGs
非 BO 方法使用在 第五章 “变分量子本征值求解器(VQE)算法”中引入的变分原理,并特别包括一个能量最小化过程。
能量最小化
为了获得 LAB 哈密顿量
的本征值,我们使用基于 Rayleigh 商最小化的 Rayleigh-Ritz 变分方案:

其中
和
分别是哈密顿量和重叠
矩阵。
和
是包含在 ECGs 基础集内的非线性参数的函数。我们用
表示这些参数的集合,用
表示波函数相对于基函数的线性展开系数的向量。
我们推导并实现了相对于高斯非线性参数的能量的解析梯度的推导和实现,从 secular equation
开始:

将此方程乘以
从左侧,我们得到著名的 Hellmann-Feynman 定理:

为了得到这个表达式,我们利用了 secular equation,并假设波函数是归一化的,即
。
的表达式涉及
和
,它们依赖于哈密顿量的第一导数和相对于高斯非线性参数的重叠积分。
该方法采用显式相关联的全粒子高斯函数来展开系统的波函数。高斯函数的非线性参数通过采用相对于这些参数的解析能量梯度来确定的方法进行变分优化。
6.2. 振动频率分析计算
在 BO 近似中,分子的总能量是电子能、振动能和转动能的总和:

分子振动可以像通过弹簧连接的粒子的运动一样建模,代表通过可变长度的化学键连接的原子。在谐振子近似中,拉伸弹簧所需的力与拉伸成正比(胡克定律)。当振动能量高时,谐振子近似不再有效,正常模式的概念也不再适用。我们现在考虑双原子分子的简单情况。
建模双原子分子的振动-转动能级
双原子分子的转动能量由一系列离散值表示:

其中:
-
是角动量量子数。 -
是平衡距离。 -
是简化普朗克常数。 -
是两个原子的约化质量,
。
对于一个非旋转的双原子分子,转动量子数
为零。势能
可以通过围绕平衡位置
的位移
的二次函数来近似,这对应于两个核之间的平衡距离
:

其中
是恢复力常数(胡克定律)。对于这样的抛物线势,振动的分子是一个量子谐振子。能级是整数振动量子数
的简单函数:

其中
依赖于常数
和两个原子的约化质量
。
量子谐振子的归一化波函数为:

阶数为
的 Hermite 多项式由生成方程定义:

Hermite 多项式使用以下递归关系进行计算:

前三个 Hermite 多项式为:



我们定义 N(v) 函数,它计算归一化因子:

def N(v):
return 1./np.sqrt(np.sqrt(np.pi)*2**v*factorial(v))
我们定义了一个名为Psi(v, x)的函数,它使用特殊的hermite() SciPy 函数,并计算出一个与之前定义的量子简谐振子归一化波函数具有相同形式的函数:
def Psi(v, x):
return N(v)*hermite(v)(x)*np.exp(-0.5*x**2)
现在我们定义一个名为plot(n)的函数,该函数以抛物线(黑色)和空间概率
(彩色)的形式绘制势能,这是针对归一化量子简谐振子波函数的整数振动量子数
到
。以下是代码:
def plot(n):
fig, ax = plt.subplots(figsize=(n,n))
# Range of x
xmax = np.sqrt(2*n+1)
x = np.linspace(-xmax, xmax, 1000)
for v in range(n):
# plot potential energy function 0.5*x**2
ax.plot(x,0.5*x**2,color='black')
# plot spatial probabilities psi squared for each energy level
ax.plot(x,Psi(v,x)**2 + v + 0.5)
# add lines and labels
ax.axhline(v + 0.5, color='gray', linestyle='-')
ax.text(xmax, 1.2*(v+0.5), f”v={v}”)
ax.set_xlabel('x')
ax.set_ylabel('$|\psi_v(x)|²$')
现在我们调用plot(5)函数。图 6.5显示了结果:

图 6.5 – 对于
到
的归一化量子简谐振子波函数的势能(黑色抛物线)和空间概率(彩色)
对于围绕平衡位置的位移较大值,实际势能更接近于非简谐振子,其形式如下:

其中
是非简谐常数。随着振动量子数
的增加,能级之间的间隔减小。
在核间距离
处的旋转能量可以用以下幂级数展开近似 [Demtröder]:

其中
是与将两个原子结合在一起的恢复力相关的常数。
这个表达式可以用旋转频率 [Demtröder] 表示:

其中
是旋转常数,而
和
是离心常数:



我们定义了一个名为Frot()的 Python 函数,该函数使用参考文献 [Campargue] 中获得的表达式计算氢分子的旋转能级:
def Frot(J, Be, De, He, show=False):
F = Be*J*(J+1) + De*J**2*(J+1)**2 - He*J*3*(J+1)**3*10e-5
if show:
print(“{} {:.2f}”.format(J, F))
return F
我们设置了一个名为rov的字典,其中振动量子数
作为键,以下值:
-
Komasa 等人于 2011 年计算的基态
能量 [Komasa] -
2011 年由 Campargue 计算的振动能级
到
的罗维振动参数 [Campargue]
以下是代码:
# v E(v,J=0) Ee Be De He rms
rov = {0: (36118.0696, 0.0, 59.33289, 0.045498, 4.277, 3.4),
1: (31956.9034, 4161.1693, 56.37318, -0.043961, 4.168, 3.2),
2: (28031.0670, 8087.0058, 53.47892, -0.042523, 4.070, 3.2),
3: (24335.6787, 11782.3940, 50.62885, -0.041175, 3.963, 3.2),
4: (20867.7039, 15250.3688, 47.79997, -0.039927, 3.846, 3.2),
5: (17626.1400, 18491.9328, 44.96596, -0.038795, 3.717, 3.2),
6: (14612.2901, 21505.7826, 42.09566, -0.037808, 3.571, 3.1),
7: (11830.1543, 24287.9184, 39.15105, -0.037004, 3.399, 3.1),
8: (9286.9790, 26831.0937, 36.08416, -0.036451, 3.187, 3.1),
9: (6994.0292, 29124.0436, 32.83233, -0.036251, 2.902, 3.2)}
我们计算了氢分子在基态旋转态
和第一激发态
的振动能级,以及每个振动量子数
之间的能级差。以下是代码:
print(“v E(v,J=0) E(v,J=1) BO Diff.”)
for v in range(10):
E0 = rov[v][0] - Frot(0, rov[v][2], rov[v][3], rov[v][4])
E1 = rov[v][0] - Frot(1, rov[v][2], rov[v][3], rov[v][4])
print(“{} {:.4f} {:.4f} {:.4f}”.format(v, E0, E1, E0 - E1))
图 6.6中的结果与 Komasa 等人的结果 [Komasa] 一致:

图 6.6 – 氢分子的振动能级
,
和 
计算分子的所有振动-转动能级
我们概述了在经典计算机上通常用于计算分子所有振动-转动能级的方法 [Gaussian_1] [Neese]。
优化分子的几何结构
用于振动分析的分子几何结构必须首先进行优化,以确保原子处于平衡状态且没有动量,也就是说,原子相对于核笛卡尔坐标
的能量的所有一阶导数都为零:

计算力常数 Hessian 矩阵
计算一个力常数 Hessian 矩阵,它包含能量
对笛卡尔坐标
的原子 ![img/Formula_06_124.png] ,![img/Formula_06_125.png] ,![img/Formula_06_126.png] 的位移的二次偏导数,例如:
,
,![img/Formula_06_129.png]
力常数 Hessian 矩阵是一个
行
列的矩阵。当这些导数的解析表达式不可用时,通过梯度的有限差分来计算二次导数。
转换为质量加权的笛卡尔坐标
然后应用以下笛卡尔坐标变换:
,
,![img/Formula_06_134.png]
通过将力常数 Hessian 矩阵中与原子
和
相关的每个元素除以
。
对质量加权的 Hessian 矩阵进行对角化
然后将质量加权的 Hessian 矩阵对角化,得到一组
特征向量和
特征值。振动频率随后从特征值中导出,这些特征值是使用给出谐振子频率的方程计算得到的:

其中
是以 s-1 为单位的频率,
是约化质量,
是力常数。频率
以 cm-1 为单位,通过以下关系获得
,其中
是光速,
cm s-1:

我们现在通过使用 Psi4 [Psi4_0],一个开源量子化学软件包,对 CO2 分子进行振动频率分析来展示这种方法。对安装此软件包感兴趣的读者,请参阅“开始使用 Psi4” [Psi4_1] 文档。
首先,我们在 Python 笔记本中导入 Psi4:
import psi4
我们将 Psi4 计算的输出重定向到文件:
psi4.core.set_output_file('psi_CO2_output.txt', False)
我们指定计算所需的内存量:
psi4.set_memory('500 MB')
然后我们定义 CO2 分子的几何结构[Psi4_2]:
co2 = psi4.geometry(“””
symmetry c1
0 1
C 1.6830180 -0.4403696 3.1117942
O 0.5425545 -0.2216001 2.9779653
O 2.8186228 -0.6587208 3.2810031
units angstrom
“””)
我们优化分子的几何结构:
psi4.set_options({'reference': 'rhf'})
psi4.optimize('scf/cc-pvdz', molecule=co2)
这里是结果,CO2 分子基态电子的能量:
Optimizer: Optimization complete!
-187.65250930298149
我们现在进行振动频率分析:
scf_e, scf_wfn = psi4.frequency('scf/cc-pvdz', molecule=co2, return_wfn=True)
我们使用以下代码打印频率:
for i in range(4):
print(scf_wfn.frequencies().get(0,i))
这里是结果,cm-1 中的谐振动频率列表:
761.4181081677268
761.4181227549785
1513.1081106509557
2579.8280005025586
这些结果与分子科学软件研究所在其构建 CO2 分子课程中提出的结果非常一致[MolSSI]。ChemTube3D 提供了碳 dioxide 振动的交互式 3D 动画,这些振动[ChemTube3D]。
图 6.7展示了使用 Psi4 进行的振动频率分析的一部分。

图 6.7 – 使用 Psi4 对 CO2 分子进行的振动频率分析(摘录)
现在我们展示了使用 BO 和非 BO 方法计算的氢分子正反异构化振动光谱,并与实验数据进行了比较。
6.3. 氢分子正反异构化的振动光谱
图 6.8展示了比较氢分子正反异构化振动光谱相关波数能级间距的表格,表格由 A 到 C 列描述:
-
是使用 10,000 个基函数的非 BO 方法产生的波数能量[Sharkey]。 -
是 BO 方法产生的波数能量[Komasa]。 -
是波数中的实验数据[Dabrowski]。
对于每个振动能级
以及以百分比形式呈现的差异[Sharkey_1],描述由 D 到 G:
这里是表格[Sharkey_1]:

图 6.8 – 比较非 BO 与 BO 计算与实验的表格[Sharkey_1]
非 BO 方法在预测所有状态,包括激发态,方面高度准确,如图图 6.9所示,该图展示了 A 列和 B 列作为振动量子数的函数。在能级预测中,它始终较低,除了
激发态,这一异常归因于实验数据的准确性问题。在最高束缚态(
[Sharkey_1])中,BO 预测有 5%的分解。

图 6.9 – 比较非 BO 与 BO 计算与实验的图表[Sharkey_1]
图 6.10展示了 G 列,即 BO 和非 BO 计算之间的差异作为振动量子数
的函数的图表。

图 6.10 – 显示 BO/非 BO 与振动量子数之间百分差异的图表
[Sharkey_1]
摘要
在本章中,我们回顾了非 BO 分子哈密顿量,并概述了一种将非常准确的非 BO 计算(使用显式相关高斯函数)扩展到双原子分子被激发到第一转动能级以及振动激发到任意能级的状态的方法。我们展示了使用 Psi4 对二氧化碳分子进行的振动频率分析计算。我们展示了使用非 BO 方法 [Sharkey],BO 方法 [Komasa] 计算的氢分子正位-反位异构化振动光谱,并与实验数据进行了比较。非 BO 方法在预测所有状态,包括氢分子的激发态方面都非常准确。BO 和非 BO 方法使用的波函数的缩放具有阶乘依赖性,被认为是一个 NP-hard 问题。
问题
-
真或假:确定分子结构和振动光谱的计算复杂度随着原子数的增加呈指数增长。
-
ECG 这个缩写代表什么?
-
真或假:在谐振子近似中,扩展弹簧所需的力与伸长成正比。
-
真或假:当振动能量高时,谐振子近似不再有效。
-
真或假:用于振动分析的分子几何形状必须首先进行优化,以便原子处于平衡状态且没有动量。
答案
-
真
-
显式相关高斯函数
-
真
-
真
-
真
参考文献
[Adamowicz_1] Sergiy Bubin, Michele Pavanello, Wei-Cheng Tung, Keeper L. Sharkey, 和 Ludwik Adamowicz, Born–Oppenheimer and Non-Born–Oppenheimer, Atomic and Molecular Calculations with Explicitly Correlated Gaussians, Chem. Rev. 2013, 113, 1, 36–79, October 1, 2012, doi.org/10.1021/cr200419d
[Adamowicz_2] Sergiy Bubin 和 Ludwik Adamowicz, Computer program ATOM-MOL-nonBO for performing calculations of ground and excited states of atoms and molecules without assuming the Born–Oppenheimer approximation using all-particle complex explicitly correlated Gaussian functions, J. Chem. Phys. 152, 204102 (2020), doi.org/10.1063/1.5144268
[Adamowicz_4] Jim Mitroy, Sergiy Bubin, Wataru Horiuchi, Yasuyuki Suzuki, Ludwik Adamowicz, Wojciech Cencek, Krzysztof Szalewicz, Jacek Komasa, D. Blume, 和 Kálmán Varga, Rev. Mod. Phys. 85, 693 – Published 6 May 2013, Theory and application of explicitly correlated Gaussians, journals.aps.org/rmp/abstract/10.1103/RevModPhys.85.693
[Campargue] Alain Campargue, Samir Kassi, Krzysztof Pachucki and Jacek Komasa, The absorption spectrum of H2: CRDS measurements of the (2-0) band, review of the literature data and accurate ab initio line list up to 35000 cm-1, Physical Chemistry Chemical Physics, 13 Sep 2011, Table 5. Rovibrational parameters of the V=0-13 vibrational levels of H2 obtained from the fit of the J=0-7 energy levels calculated in Ref. [36], www.fuw.edu.pl/~krp/papers/camparge.pdf
[ChemTube3D] Vibrations of Carbon Dioxide, www.chemtube3d.com/vibrationsco2
[D4.1 VA Beta] Arseny Kovyrshin, AstraZeneca AB R&D, Giorgio Silvi, HQS Quantum Simulations GmbH, D4.1: VA Beta and BBO Beta, NExt ApplicationS of Quantum Computing, 23 Nov 2021, www.neasqc.eu/wp-content/uploads/2022/01/NEASQC_D4.1_VA-Beta-and-BBO-Beta-R1.0.pdf , github.com/NEASQC/Variationals_algorithms
[Dabrowski] Dabrowski, The Lyman and Werner Bands of H2, Can. J. Phys. 62, 1639 (1984) Table 5. Observed energy levels of the X¹ Sigma_g^+ of H_2, doi.org/10.1139/p84-210
[Demtröder] Atoms, Molecules and Photons, Wolfgang Demtröder, Second Edition, Springer, 9.5. Rotation and Vibration of Diatomic Molecules, Springer, ISBN-13: 978-3642102974
[Gaussian_1] Joseph W. Ochterski, Gaussian, Vibrational Analysis in Gaussian, gaussian.com/vib/
[Hartke] Hartke, T., Oreg, B., Jia, N. et al. Quantum register of fermion pairs. Nature 601, 537–541 (2022). doi.org/10.1038/s41586-021-04205-8
[Komasa] Komasa et al., Quantum Electrodynamics Effects in Rovibrational Spectra of Molecular Hydrogen J. Chem. Theory Comput. 2011, 7, 10, 3105–3115, Table 1. Theoretically Predicted Dissociation Energies {in cm^(-1)} of All 302 Bound States of H_2. doi.org/10.1021/ct200438t
[Maytus] Edit Mátyus, Edit Mátyus (2019) Pre-Born–Oppenheimer molecular structure theory, Molecular Physics, 117:5, 590-609, DOI: 10.1080/00268976.2018.1530461, doi.org/10.1080/00268976.2018.1530461
[MolSSI] Basis set convergence of molecular properties: Geometry and Vibrational Frequency, Molecular Sciences Software Institute (MolSSI), education.molssi.org/qm-tools/04-vib-freq/index.html
[Neese] Vibrational Spectroscopy, Frank Neese from the Max Planck Institute for Chemical Energy Conversion, 2014 summer school, www.youtube.com/watch?v=iJjg2L1F8I4
[Psi4_0] Psi4 手册主索引,psicode.org/psi4manual/master/index.html
[Psi4_1] 开始使用 PSI4,psicode.org/installs/v15/
[Psi4_2] C4H5N (吡咯)与 CO2 结合能的 MP2/def2-TZVPP 测试案例,github.com/psi4/psi4/blob/master/samples/mp2-def2/input.dat
[Psi4_3] Smith DGA, Burns LA, Simmonett AC, Parrish RM, Schieber MC, Galvelis R, Kraus P, Kruse H, Di Remigio R, Alenaizan A, James AM, Lehtola S, Misiewicz JP, Scheurer M, Shaw RA, Schriber JB, Xie Y, Glick ZL, Sirianni DA, O'Brien JS, Waldrop JM, Kumar A, Hohenstein EG, Pritchard BP, Brooks BR, Schaefer HF 3rd, Sokolov AY, Patkowski K, DePrince AE 3rd, Bozkaya U, King RA, Evangelista FA, Turney JM, Crawford TD, Sherrill CD. Psi4 1.4: 开源软件用于高通量量子化学。化学物理杂志。2020 年 5 月 14 日;152(18):184108。doi: 10.1063/5.0006002。PMID: 32414239;PMCID: PMC7228781。www.ncbi.nlm.nih.gov/pmc/articles/PMC7228781/pdf/JCPSA6-000152-184108_1.pdf
[Sawaya] Nicolas P. D. Sawaya, Francesco Paesani, Daniel P. Tabor,振动光谱的近中和长期量子算法方法,2021 年 2 月 1 日,arXiv:2009.05066 [quant-ph],arxiv.org/abs/2009.05066
[Schiffer_1] Fabijan Pavošević, Tanner Culpitt, 和 Sharon Hammes-Schiffer,多组分量子化学:通过核-电子轨道方法整合电子和核量子效应,化学评论。2020 年,120,9,4222–4253,doi.org/10.1021/acs.chemrev.9b00798
[Schiffer_2] Kurt R. Brorsen, Andrew Sirjoosingh, Michael V. Pak, 和 Sharon Hammes-Schiffer,显式相关核电子轨道的 Hartree-Fock 方法:限制基集和开壳系统,化学物理杂志。142, 214108 (2015),doi.org/10.1063/1.4921304
[SciPy_0] SciPy,scipy.org/
[Sharkey] K. Sharkey 等人。使用显式相关全粒子高斯函数的直接变分计算双原子第一激发转动能级的非 Born-Oppenheimer 方法,物理评论 A,88, 032513 (2013,表 I. H_2 的(v,0)和(v,1)态的总能量(单位: hartrees))。journals.aps.org/pra/abstract/10.1103/PhysRevA.88.032513
[Sharkey_1] K. Sharkey,分子氢海报,QLEAN™,qlean.world/molecular-hydrogen-poster
[Veis] Libor Veis, Jakub Višňák, Hiroaki Nishizawa, Hiromi Nakai, Jiří Pittner, 在量子计算机上超越 Born-Oppenheimer 近似的量子化学:模拟相位估计研究,国际量子化学杂志,2016 年 6 月 22 日,doi.org/10.1002/qua.25176
第七章:结论
“我没有特殊的天赋。我只是对知识充满热情。”
– 阿尔伯特·爱因斯坦

图 7.1 – 量子化学与量子计算之间的循环依赖关系 [作者]
7.1. 量子计算
计算的初始量子电路模型作为逻辑量子门按时间顺序执行量子寄存器状态的单位演化序列,已经演变成一个紧密集成的动态量子电路模型,允许对中电路测量结果进行并发经典处理 [Corcoles] [IBM_mid]。这种新的动态量子计算范式为从经典计算到量子增强计算的平稳过渡铺平了道路。
一个经常被忽视的潜在量子优势是量子计算的能源效率 [Auffeves] [Q Daily] [Quantum_AI] [Thibault]。量子霸权实验 [Arute] 中的能耗比高性能计算机实现实验预期结果的精确计算所需的能耗小三个数量级。确定能够实现能源量子优势的条件是一个开放的研究课题 [Auffeves]。
最近展示的新量子寄存器对费米子对,其中信息存储在处于两个振动状态叠加的原子对的振动运动中,为分子可编程量子模拟器开辟了前景 [Hartke]。分子振动光谱的精确计算,这些计算在从天体化学到生物化学以及气候变化缓解中都有应用,可能在量子计算机上比电子能量计算更容易实现 [Sawaya]。
7.2. 量子化学
在第四章**,分子哈密顿量 和 第五章**,变分量子本征值求解器(VQE)算法 中,我们使用 Python 和开源量子化学软件包 PySCF、ASE、PyQMC 和 Qiskit 展示了量子计算化学的一些方法,求解了氢分子、氢化锂分子和宏分子 ONCHHC 的基态能量水平,并绘制了这些分子的 BOPES。使用最简单的基组(STO-3G)和噪声无模拟的量子电路(状态向量模拟器),不同的计算方法得到了良好的吻合。
科学或工业应用需要化学反应机制的高度精确相对能量估计,大约为 1 毫电子哈特里 (mHA) 或甚至 0.1 mHA。对于参与感兴趣化学反应的每种分子物种的总电子能量,也需要相同的精度 [Burg]。在关于计算与原生物化学相关的分子电子结构的算法基准的作者们得出结论:“对于 NISQ 处理器来说,利用 VQE 并实现近化学精度将极具挑战性” [Lolur]。他们指出,主要挑战来自于将费米子哈密顿量映射到量子比特哈密顿量产生的大量 Pauli 项、大量的变分参数以及大量的能量评估。此外,为了获得 1 mHA 的精确能量估计,VQE 的基必须接近真实基态,误差小于百万分之一 [Troyer]。
在 第六章**,超越玻恩-奥本海默 中,我们解释了非玻恩-奥本海默 (non-BO) 计算如何包括在基态振动以上预测化学状态所需的效果。使用创新的混合经典-量子算法实现这些 non-BO 计算是一个开放的研究课题。谷歌量子算法团队的负责人 Ryan Babbush 开发了化学的第一个量子模拟算法。在他的这些算法的介绍 [Babbush] 中,他提到在许多情况下非-BO 模拟都很重要,例如涉及氢键的低温度、电子与原子核之间的隧穿或耦合,或者直接从量子动力学计算动力学、反应散射系数或热速率常数。对这些算法的研究 [Su] 显示出对第二量子化算法的潜在优势。然而,这些算法需要能够运行具有巨大数量门 (
到
) 的量子电路的具有数千个逻辑量子比特的容错量子计算机,这远远超出了当前或近期的 NISQ 时代处理器的功能。
参考文献
[Arute] Arute, F., Arya, K., Babbush, R. et al., 使用可编程超导处理器实现量子霸权,自然 574, 505–510 (2019), doi.org/10.1038/s41586-019-1666-5
[Auffeves] Alexia Auffèves, 优化量子计算器的能耗:一个跨学科挑战,物理反思 N°69 (2021) 16-20,2021 年 7 月 12 日,doi.org/10.1051/refdp/202169016
[Babbush] Ryan Babbush,2021 年 2 月 24 日,第一量子化化学量子模拟的承诺,Google AI Quantum,化学的容错未来是第一量子化的!,www.youtube.com/watch?v=iugrIX616yg
[Burg] Vera von Burg,Guang Hao Low,Thomas Häner,Damian S. Steiger,Markus Reiher,Martin Roetteler,Matthias Troyer,量子计算增强的计算催化,2021 年 3 月 3 日,10.1103/PhysRevResearch.3.033055,arxiv.org/abs/2007.14460
[Corcoles] A. D. Córcoles, Maika Takita, Ken Inoue, Scott Lekuch, Zlatko K. Minev, Jerry M. Chow, and Jay M. Gambetta, 利用超导量子比特在量子算法中利用动态量子电路,物理评论快报 127, 100501,2021 年 8 月 31 日,journals.aps.org/prl/abstract/10.1103/PhysRevLett.127.100501
[Hartke] Hartke, T., Oreg, B., Jia, N. et al., 费米子对量子寄存器,自然 601, 537–541 (2022),doi.org/10.1038/s41586-021-04205-8
[IBM_mid] 中断电路测量教程,IBM 量子系统,quantum-computing.ibm.com/lab/docs/iql/manage/systems/midcircuit-measurement/
[Lolur] Lolur, Phalgun, Magnus Rahm, Marcus Skogh, Laura García-Álvarez 和 Göran Wendin,通过在高性能计算机上模拟原生物分子的基态能量来基准测试变分量子本征求解器,arXiv:2010.13578v2 [quant-ph],2021 年 1 月 5 日,arxiv.org/pdf/2010.13578.pdf
[Q Daily] 量子技术 | 我们可持续的未来,量子日报,2021 年 7 月 29 日,www.youtube.com/watch?v=iB2_ibvEcsE
[Quantum_AI] 量子人工智能可持续性研讨会,Q4Climate,演讲者:Karl Thibault 博士,Michał Stęchły 先生,2021 年 9 月 1 日,quantum.ieee.org/conferences/quantum-ai
[Sawaya] Nicolas P. D. Sawaya,Francesco Paesani,Daniel P. Tabor,振动光谱的近中和长期量子算法方法,2021 年 2 月 1 日,arXiv:2009.05066 [quant-ph],arxiv.org/abs/2009.05066
[Su] Yuan Su, Dominic W. Berry, Nathan Wiebe, Nicholas Rubin, and Ryan Babbush, 在第一量子化中实现容错量子化学模拟,2021 年 10 月 11 日,PRX 量子 2, 040332,DOI:10.1103/PRXQuantum.2.040332,doi.org/10.1103/PRXQuantum.2.040332
[Thibault] Casey Berger, Agustin Di Paolo, Tracey Forrest, Stuart Hadfield, Nicolas Sawaya, Michał Stęchły, Karl Thibault, 量子技术应对气候变化:初步评估,IV. 量子计算机的能源效率,作者:Karl Thibault,arXiv:2107.05362 [quant-ph],2021 年 6 月 23 日,arxiv.org/abs/2107.05362
[Troyer] Matthias Troyer, Matthias Troyer: 在化学模拟中实现实用量子优势,QuCQC 2021,www.youtube.com/watch?v=2MsfbPlKgyI
第八章:参考文献
[ASE_0] 原子模拟环境 (ASE), wiki.fysik.dtu.dk/ase/index.html
[ASE_1] ASE,原子对象,wiki.fysik.dtu.dk/ase/ase/atoms.html
[ASE_2] ASE 可视化,wiki.fysik.dtu.dk/ase/ase/visualize/visualize.html#module-ase.visualize
[Aaronson_1] 斯科特·阿伦森,量子计算机的极限,科学美国人,2008 年 3 月,www.scientificamerican.com/article/the-limits-of-quantum-computers/
[Aaronson_2] 斯科特·阿伦森,量子计算机的极限(草案),www.scottaaronson.com/writings/limitsqc-draft.pdf
[Adamowicz_1] 谢尔盖·布宾,米歇尔·帕瓦内洛,魏成忠,凯普·L·沙基,和卢德维克·亚当诺维奇,基于显式相关高斯函数的 Born-Oppenheimer 和非 Born-Oppenheimer 原子和分子计算,化学评论,2013 年,第 113 卷,第 1 期,第 36-79 页,2012 年 10 月 1 日,doi.org/10.1021/cr200419d
[Adamowicz_2] 谢尔盖·布宾和卢德维克·亚当诺维奇,计算机程序 ATOM-MOL-nonBO,用于在不假设 Born-Oppenheimer 近似的情况下,使用所有粒子的复显式相关高斯函数进行原子和分子的基态和激发态计算,化学物理杂志第 152 卷,第 204102 号(2020 年),doi.org/10.1063/1.5144268
[Adamowicz_3] Tung WC,Pavanello M,Adamowicz L.,LiH 分子的非常精确的势能曲线。表 I.在 R = 3.015 bohr 时,LiH 分子基态的 BO 能量的收敛性比较,化学物理杂志,2011 年 2 月 14 日;第 134 卷,第 6 期:064117。doi:10.1063/1.3554211,doi.org/10.1063/1.3554211
[Adamowicz_4] 吉姆·米特罗伊,谢尔盖·布宾,森仓和朗,铃木康行,亚当·阿多维奇,沃伊切赫·森切克,克日什托夫·萨莱维奇,雅切克·科马萨,D. 布卢梅,和卡尔曼·瓦加,现代物理评论第 85 卷,第 693 页 - 2013 年 5 月 6 日出版,显式相关高斯函数的理论与应用,journals.aps.org/rmp/abstract/10.1103/RevModPhys.85.693
[Africa21] IBM 量子挑战非洲 2021,github.com/qiskit-community/ibm-quantum-challenge-africa-2021
[Arute] 阿鲁特,F.,阿亚,K.,巴布斯,R.等,使用可编程超导处理器实现量子霸权,自然第 574 卷,第 505-510 页(2019 年),doi.org/10.1038/s41586-019-1666-5
[Auffeves] Alexia Auffèves,优化量子计算器的能耗:一个跨学科挑战,物理反思第 69 期(2021)16-20 页,2021 年 7 月 12 日,doi.org/10.1051/refdp/202169016
[Babbush] Ryan Babbush,2021 年 2 月 24 日,化学首次量子化量子模拟的承诺,Google AI Quantum,化学容错未来的首次量子化!,www.youtube.com/watch?v=iugrIX616yg
[Balmer_series] 巴耳末系列,维基百科,en.wikipedia.org/wiki/Balmer_series
[Bell_1] Bell, J. S.,关于爱因斯坦-波多尔斯基-罗森佯谬,物理物理物理,第 1 卷,195: 195–200,1964 年,doi.org/10.1103/PhysicsPhysiqueFizika.1.195
[Bell_2] "第二章: 关于爱因斯坦-波多尔斯基-罗森佯谬"。量子力学中的可说与不可说:量子哲学论文集(1987 年版,Alain Aspect 作序),重印于 JS Bell (2004),剑桥大学出版社。第 14-21 页。ISBN 978-0521523387
[Benioff] Benioff, P.,计算机作为物理系统:计算机作为图灵机的微观量子力学哈密顿量模型,doi.org/10.1007/BF01011339
[Bittel] Lennart Bittel 和 Martin Kliesch, 训练变分量子算法是 NP 难的——即使是对于对数数量的量子比特和自由费米子系统,DOI:10.1103/PhysRevLett.127.120502,2021 年 1 月 18 日,doi.org/10.1103/PhysRevLett.127.120502
[Bohr_1] N. 玻尔,I.,关于原子和分子的构成,哲学杂志,第 26 卷,1-25 页(1913 年 7 月),DOI: 10.1080/14786441308634955
[Bohr_2] 玻尔的壳层模型,大英百科全书,www.britannica.com/science/atom/Bohrs-shell-model#ref496660
[Born_1] Born, M.,Jordan, P.,关于量子力学,物理杂志,第 34 卷,858–888 页(1925 年),doi.org/10.1007/BF01328531
[Bravyi] Sergey Bravyi,Jay M. Gambetta,Antonio Mezzacapo,Kristan Temme,减少量子比特以模拟费米子哈密顿量,arXiv:1701.08213v1,2017 年 1 月 27 日,arxiv.org/pdf/1701.08213.pdf
[Bubin] Bubin, S.,Cafiero, M.,& Adamowicz, L.,使用显式相关高斯基函数的原子和分子非 Born-Oppenheimer 变分计算,化学物理进展,第 131 卷,377-475 页,doi.org/10.1002/0471739464.ch6
[Burg] Vera von Burg,Guang Hao Low,Thomas Häner,Damian S. Steiger,Markus Reiher,Martin Roetteler,Matthias Troyer,量子计算增强的计算催化,2021 年 3 月 3 日,10.1103/PhysRevResearch.3.033055,arxiv.org/abs/2007.14460
[Bushmanov] Sergey Bushmanov,如何在 Python 中使用 Matplotlib 和一组数据绘制直方图?,Stack Overflow,stackoverflow.com/questions/33203645/how-to-plot-a-histogram-using-matplotlib-in-python-with-a-list-of-data
[Byjus] BYJU'S,氢光谱,波长,图,氢发射光谱,byjus.com/chemistry/hydrogen-spectrum/#
[CERN_ 夸克] CERN,原子世界之旅,www.youtube.com/watch?v=7WhRJV_bAiE
[Campargue] Alain Campargue,Samir Kassi,Krzysztof Pachucki 和 Jacek Komasa,H2 的吸收光谱:CRDS 测量(2-0)带,文献数据综述和精确的从头计算线表至 35000 cm-1,表 5。从参考文献[36]中计算的 J=0-7 能级拟合得到的 H2 V=0-13 振动能级的转振动参数,Physical Chemistry Chemical Physics,2011 年 9 月 13 日,www.fuw.edu.pl/~krp/papers/camparge.pdf
[Cao] Yudong Cao,Jonathan Romero,Jonathan P. Olson,Matthias Degroote,Peter D. Johnson,Mária Kieferová,Ian D. Kivlichan,Tim Menke,Borja Peropadre,Nicolas P. D. Sawaya,Sukin Sim,Libor Veis,Alán Aspuru-Guzik,量子化学在量子计算时代,Chem. Rev. 2019,119,19,10856–10915,2019 年 8 月 30 日,doi.org/10.1021/acs.chemrev.8b00803
[Chem-periodic] Chemistry LibreTexts,5.17:电子排布和周期表,chem.libretexts.org/Bookshelves/General_Chemistry/Book%3A_ChemPRIME_(Moore_et_al.)/05%3A_The_Electronic_Structure_of_Atoms/5.17%3A_Electron_Configurations_and_the_Periodic_Table
[ChemChiral] 5.1 手性分子,Chemistry LibreTexts,2015 年 7 月 5 日,chem.libretexts.org/Bookshelves/Organic_Chemistry/Map%3A_Organic_Chemistry_(Vollhardt_and_Schore)/05._Stereoisomers/5.1%3A_Chiral__Molecules
[ChemTube3D] 二氧化碳的振动,www.chemtube3d.com/vibrationsco2
[Chem_spectr] 化学自由教材,7.3:氢原子的原子光谱,chem.libretexts.org/Courses/Solano_Community_College/Chem_160/Chapter_07%3A_Atomic_Structure_and_Periodicity/7.03_The_Atomic_Spectrum_of_Hydrogen
[Chen] Sija Chen, 量子蒙特卡洛方法,Maplesoft,fr.maplesoft.com/Applications/Detail.aspx?id=154748
[Chiew] Mitchell Chiew 和 Sergii Strelchuk, 最佳费米子-量子比特映射,arXiv:2110.12792v1 [quant-ph],2021 年 10 月 25 日,arxiv.org/pdf/2110.12792.pdf
[Clay] 千禧年问题,www.claymath.org/millennium-problems
[Cmap] 在 Matplotlib 中选择色图,matplotlib.org/stable/tutorials/colors/colormaps.html
[Comp_Zoo] 复杂性动物园,complexityzoo.net/Complexity_Zoo
[Corcoles] A. D. Córcoles, Maika Takita, Ken Inoue, Scott Lekuch, Zlatko K. Minev, Jerry M. Chow, and Jay M. Gambetta, 利用超导量子比特在量子算法中动态量子电路,物理评论快报 127, 100501, 2021 年 8 月 31 日,journals.aps.org/prl/abstract/10.1103/PhysRevLett.127.100501
[Crockett] Christopher Crockett, 手性分子的叠加,2021 年 9 月 14 日,物理 14,s108,physics.aps.org/articles/v14/s108
[D4.1 VA Beta] Arseny Kovyrshin, AstraZeneca AB R&D, Giorgio Silvi, HQS Quantum Simulations GmbH, D4.1: VA Beta 和 BBO Beta,量子计算的 NExt 应用,2021 年 11 月 23 日,www.neasqc.eu/wp-content/uploads/2022/01/NEASQC_D4.1_VA-Beta-and-BBO-Beta-R1.0.pdf ,https://github.com/NEASQC/Variationals_algorithms
[Dabrowski] Dabrowski, H2 的莱曼和沃纳带,表 5. H2 的 X¹ Sigma_g^+ 的观测能级,加拿大物理学报 62,1639 (1984),doi.org/10.1139/p84-210
[Dagrada] Mario Dagrada, 改进的量子蒙特卡洛模拟:从开放到扩展系统,材料科学 [cond-mat.mtrl-sci]。皮埃尔和玛丽居里大学 - 巴黎六大学;圣马丁国立大学,2016. 英语。 ⟨NNT : 2016PA066349⟩。 ⟨tel-01478313⟩,tel.archives-ouvertes.fr/tel-01478313/document
[Daskalatis] 科斯蒂斯·达斯卡拉基斯,平衡计算与深度学习的基础,科斯蒂斯·达斯卡拉基斯在数据科学基础系列,2021 年 2 月 18 日,www.youtube.com/watch?v=pDangP47ftE
[De Keijzer] de Keijzer, R. J. P. T.,Colussi, V. E.,Škorić, B.,& Kokkelmans, S. J. J. M. F. (2021),针对量子化学应用的变分量子本征求解器的优化,arXiv,2021,[2102.01781],arxiv.org/abs/2102.01781
[Demtröder] 原子、分子和光子,第 9.5 节:双原子分子的旋转和振动,沃尔夫冈·德默特罗德,第二版,斯普林格出版社,斯普林格出版社,ISBN-13:978-3642102974
[Deutsch-Jozsa] 大卫·德施和理查德·约萨,通过量子计算快速解决问题的方法,伦敦皇家学会 A 类会刊,439:553-558,doi.org/10.1098/rspa.1992.0167
[DiVincenzo] 大卫·P·迪维岑佐,量子计算的物理实现,10.1002/1521-3978(200009)48:9/11<771::AID-PROP771>3.0.CO;2-E,arxiv.org/abs/quant-ph/0002077
[Dirac_2] 狄拉克,P.A.M.,量子动力学的物理解释,皇家学会会刊 A,1927,113,621-641,doi.org/10.1098/rspa.1927.0012
[Dowling] 乔纳森·P·道林和杰拉尔德·J·米尔伯恩,量子技术:第二次量子革命,皇家学会,2003 年 6 月 20 日,doi.org/10.1098/rsta.2003.1227
[E_mass] 基本物理常数,电子质量,NIST,https://physics.nist.gov/cgi-bin/cuu/Value?me|search_for=electron+mass
[Ebomwonyi] Ebomwonyi, Osarodion, 使用 CASINO 代码对氢分子基态能量的量子蒙特卡罗计算,2013,表 3.1:不同研究者对氢分子基态能量的比较分析,www.semanticscholar.org/paper/A-Quantum-Monte-Carlo-Calculation-of-the-Ground-for-Ebomwonyi/5316eb86f39cf4fa0a8fd06d136aac4db1105ad4
[Fearnley] 约翰·费恩利(利物浦大学),保罗·W·戈德堡(牛津大学),亚历山德罗斯·霍伦德(牛津大学),以及拉胡尔·萨瓦尼(利物浦大学),梯度下降的复杂性:CLS = PPAD
PLS,STOC 2021:第 53 届 ACM SIGACT 理论计算年会的论文集,2021 年 6 月,第 46-59 页,doi.org/10.1145/3406325.3451052
[Freeman] Freedman-Diaconis 规则,维基百科,en.wikipedia.org/wiki/Freedman%E2%80%93Diaconis_rule
[Gard] Gard, B.T.,Zhu, L.,Barron, G.S.等,用于变分量子本征求解算法的高效对称性保持态制备电路,npj 量子信息 6,10(2020),doi.org/10.1038/s41534-019-0240-1
[Gaussian_1] Joseph W. Ochterski,Gaussian 中的振动分析,gaussian.com/vib/
[Gorelov] Vitaly Gorelov,极端条件下氢原子的电子结构计算量子蒙特卡罗方法:变分蒙特卡罗(VMC)应用,1.4.1 变分蒙特卡罗(VMC),tel.archives-ouvertes.fr/tel-03045954/document
[Grok] 理解布洛赫球,javafxpert.github.io/grok-bloch/
[H5py] 快速入门指南,docs.h5py.org/en/stable/quick.html
[Hartke] Hartke, T.,Oreg, B.,Jia, N.等,费米子对的量子寄存器,Nature 601,537–541(2022),doi.org/10.1038/s41586-021-04205-8
[Hill] 使用 Python 学习科学编程,第二章:核心 Python 语言 I,问题,P2.5,电子排布,scipython.com/book/chapter-2-the-core-python-language-i/questions/problems/p25/electronic-configurations/
[IBM_CEO] IBM 首席执行官:本世纪量子计算将“像火箭一样”起飞,Fast Company,2021 年 9 月 28 日,www.fastcompany.com/90680174/ibm-ceo-quantum-computing-will-take-off-like-a-rocket-ship-this-decade
[IBM_comp1] 欢迎使用 IBM 量子作曲家,quantum-computing.ibm.com/composer/docs/iqx/
[IBM_comp2] IBM 量子作曲家,quantum-computing.ibm.com/composer/files/new
[IBM_mid] 中断电路测量教程,IBM 量子系统,quantum-computing.ibm.com/lab/docs/iql/manage/systems/midcircuit-measurement/
[Intro_BOA_1] M. Born,J.R. Oppenheimer,关于分子的量子理论,www.theochem.ru.nl/files/dbase/born-oppenheimer-translated-s-m-blinder.pdf
[Intro_BOA_2] M. Born 和 R. J. Oppenheimer, 关于分子的量子理论,物理年鉴,20,457-484(1927 年 8 月),doi.org/10.1002/andp.19273892002
[Kaplan] 伊利亚·G. 卡普兰,泡利不相容原理的现代状态及其理论基础问题,对称性 2021,13(1),21,doi.org/10.3390/sym13010021
[Knill] 艾曼纽尔·克尼尔,雷蒙德·拉法拉梅,量子纠错码理论,arxiv.org/abs/quant-ph/9604034
[Komasa] Komasa 等人,分子氢的转振动光谱中的量子电动力学效应,化学理论计算杂志,2011,7,10,3105–3115,表 1。理论上预测的所有 302 个束缚态的 H_2 解离能{以 cm^(-1)为单位},doi.org/10.1021/ct200438t,www.fuw.edu.pl/~krp/papers/H2D2v18.pdf
[Lolur] Lolur,Phalgun,Magnus Rahm,Marcus Skogh,Laura García-Álvarez 和 Göran Wendin,通过在高性能计算机上模拟原生物分子的基态能量来基准测试变分量子本征求解器,arXiv:2010.13578v2 [quant-ph],2021 年 1 月 5 日,arxiv.org/pdf/2010.13578.pdf
[Lucr_1] 卢克莱修关于事物的本质,由约翰·塞尔比·沃森牧师,文学硕士,伦敦 1870 年直译成英文散文,www.google.fr/books/edition/Lucretius_On_the_Nature_of_Things/59HTAAAAMAAJ?hl=en&gbpv=1&printsec=frontcover
[Lucr_2] 托马斯·奈尔,卢克莱修:我们的当代人,2019 年 2 月 15 日,www.youtube.com/watch?v=VMrTk1A2GX8
[Lucr_3] 大卫·古德休,卢克莱修讲座,生活、爱情、死亡和原子物理学,www.youtube.com/watch?v=mJZZd3f_-oE
[Lyman_series] 莱曼系,来自维基百科,en.wikipedia.org/wiki/Lyman_series
[MIT_QC_1981] MIT Endicott House,计算物理会议,图片“计算物理会议,Endicott House MIT 1981 年 5 月 6-8 日”,2018 年 3 月 21 日,mitendicotthouse.org/physics-computation-conference/
[Maytus] Edit Mátyus,Edit Mátyus(2019)Pre-Born-Oppenheimer 分子结构理论,分子物理学,117:5,590-609,DOI:10.1080/00268976.2018.1530461,doi.org/10.1080/00268976.2018.1530461
[Mezzacapo] Antonio Mezzacapo,《量子计算机上的化学模拟》,第一部分,2020 年 Qiskit 全球夏季学校,IBM 量子,Qiskit,量子计算和量子硬件简介,qiskit.org/learn/intro-qc-qh/,讲义第八部分,github.com/qiskit-community/intro-to-quantum-computing-and-quantum-hardware/blob/master/lectures/introqcqh-lecture-notes-8.pdf?raw=true
[Micr_Algebra] 线性代数,QuantumKatas/tutorials/LinearAlgebra/,github.com/microsoft/QuantumKatas/tree/main/tutorials/LinearAlgebra
[Micr_Complex] 复数运算,QuantumKatas/tutorials/ComplexArithmetic/,github.com/microsoft/QuantumKatas/tree/main/tutorials/ComplexArithmetic
[MolSSI] 分子性质基集收敛性:几何和振动频率,分子科学软件研究所(MolSSI),education.molssi.org/qm-tools/04-vib-freq/index.html
[内塞] 振动光谱学,来自马克斯·普朗克化学能转换研究所的弗兰克·内塞,2014 年夏季学校,www.youtube.com/watch?v=iJjg2L1F8I4
[NumPy] NumPy:初学者的绝对基础,numpy.org/doc/stable/user/absolute_beginners.html
[中子-电子质量比] 中子-电子质量比,NIST,physics.nist.gov/cgi-bin/cuu/Value?mnsme
[Orb_Approx] 轨道近似定义,www.chemicool.com/definition/orbital-approximation.html
[Panagiotis] Panagiotis Kl. Barkoutsos,Jerome F. Gonthier,Igor Sokolov,Nikolaj Moll,Gian Salis,Andreas Fuhrer,Marc Ganzhorn,Daniel J. Egger,Matthias Troyer,Antonio Mezzacapo,Stefan Filipp,Ivano Tavernelli,《电子结构计算的量子算法:粒子-空穴哈密顿量和优化波函数展开》,物理评论 A 98,022322 – 发布于 2018 年 8 月 20 日,DOI:10.1103/PhysRevA.98.022322,link.aps.org/doi/10.1103/PhysRevA.98.022322
[Part_1] 粒子列表,维基百科,en.wikipedia.org/wiki/List_of_particles
[保罗林] L. 保罗林和 E. B. 威尔逊,《量子力学导论及其在化学中的应用》,多佛出版社(1935 年)
[Pease] 克里斯托弗·皮斯,蒙特卡洛方法概述,数据科学向导,towardsdatascience.com/an-overview-of-monte-carlo-methods-675384eb1694
[Phys5250] 角动量加法,科罗拉多大学,PHYS5250,physicscourses.colorado.edu/phys5250/phys5250_fa19/lecture/lec32-addition-angular-momentum/
[PoorLeno] 文件:Hydrogen Density Plots.png,来自维基百科,en.wikipedia.org/wiki/File:Hydrogen_Density_Plots.png
[Preskill_40y] 约翰·普雷斯基尔,40 年后的量子计算,arxiv.org/abs/2106.10522
[Psi4_0] Psi4 手册主索引,psicode.org/psi4manual/master/index.html
[Psi4_1] 从 PSI4 入门,psicode.org/installs/v15/
[Psi4_2] 使用 MP2/def2-TZVPP 对 C4H5N(吡咯)与 CO2 的结合能进行测试的用例,github.com/psi4/psi4/blob/master/samples/mp2-def2/input.dat
[Psi4_3] Smith DGA,Burns LA,Simmonett AC,Parrish RM,Schieber MC,Galvelis R,Kraus P,Kruse H,Di Remigio R,Alenaizan A,James AM,Lehtola S,Misiewicz JP,Scheurer M,Shaw RA,Schriber JB,Xie Y,Glick ZL,Sirianni DA,O'Brien JS,Waldrop JM,Kumar A,Hohenstein EG,Pritchard BP,Brooks BR,Schaefer HF 3rd,Sokolov AY,Patkowski K,DePrince AE 3rd,Bozkaya U,King RA,Evangelista FA,Turney JM,Crawford TD,Sherrill CD,Psi4 1.4:用于高通量量子化学的开源软件,J Chem Phys. 2020 年 5 月 14 日;152(18):184108。doi:10.1063/5.0006002。PMID:32414239;PMCID:PMC7228781,www.ncbi.nlm.nih.gov/pmc/articles/PMC7228781/pdf/JCPSA6-000152-184108_1.pdf
[PvsNP] P 和 NP,www.cs.uky.edu. 从原始版本存档于 2016-09-19,web.archive.org/web/20160919023326/
[PyQMC] PyQMC,一个实现实空间量子蒙特卡洛技术的 Python 模块,github.com/WagnerGroup/pyqmc
[PySCF] 基于 Python 的化学模拟框架(PySCF),pyscf.org/
[Q Daily] 量子技术 | 我们可持续的未来,量子日报,2021 年 7 月 29 日,www.youtube.com/watch?v=iB2_ibvEcsE
[QC40] (直播) QC40:计算物理会议 40 周年,www.youtube.com/watch?v=GR6ANm6Z0yk
[QMC] Google 量子 AI,使用量子计算机进行无偏费米子量子蒙特卡洛,量子夏季研讨会 2021,2021 年 7 月 30 日,www.youtube.com/watch?v=pTHtyKuByvw
[Qa_Zoo] 史蒂芬·乔丹,代数和数论算法,quantumalgorithmzoo.org/
[Qiskit] Qiskit, qiskit.org/
[Qiskit_2021_Lab4] 朱利安·加孔,实验 4:量子电路训练简介,Qiskit 夏季学校 2021,learn.qiskit.org/summer-school/2021/lab4-introduction-training-quantum-circuits
[Qiskit_Alg] 线性代数,Qiskit,qiskit.org/textbook/ch-appendix/linear_algebra.html
[Qiskit_Nat_0] Qiskit_Nature, github.com/Qiskit/qiskit-nature/blob/main/README.md
[Qiskit_Nat_1] Qiskit Nature 与金融演示会,Max Rossmannek 与 朱利安·加孔,2021 年 10 月 15 日,www.youtube.com/watch?v=UtMVoGXlz04
[Qiskit_Nat_2] FermionicOp,qiskit.org/documentation/nature/stubs/qiskit_nature.operators.second_quantization.FermionicOp.html
[Qiskit_Nat_3] ElectronicStructureProblem.second_q_ops,qiskit.org/documentation/nature/stubs/qiskit_nature.problems.second_quantization.ElectronicStructureProblem.second_q_ops.html
[Qiskit_Nat_4] QubitConverter,qiskit.org/documentation/nature/stubs/qiskit_nature.converters.second_quantization.QubitConverter.html
[Qiskit_Nat_5] Qiskit Nature 教程,电子结构,qiskit.org/documentation/nature/tutorials/01_electronic_structure.html
[Qiskit_Nat_6] Qiskit Nature 教程,采样势能面,qiskit.org/documentation/nature/_modules/qiskit_nature/algorithms/pes_samplers/bopes_sampler.html
[Qiskit_Nat_T] 第二量子化算子(qiskit_nature.operators.second_quantization)> FermionicOp > FermionicOp.set_truncation,qiskit.org/documentation/nature/stubs/qiskit_nature.operators.second_quantization.FermionicOp.set_truncation.html
[Qiskit_Nature] 介绍 Qiskit Nature,Qiskit,Medium,2021 年 4 月 6 日,medium.com/qiskit/introducing-qiskit-nature-cb9e588bb004
[QuTiP] QuTiP,在 Bloch 球上的绘图,qutip.org/docs/latest/guide/guide-bloch.html
[Quantum_AI] 量子 AI 可持续性研讨会,Q4Climate,演讲者:Karl Thibault 博士,Michał Stęchły 先生,2021 年 9 月 1 日,quantum.ieee.org/conferences/quantum-ai
[Rayleigh_Ritz] Rayleigh-Ritz 方法,维基百科,en.wikipedia.org/wiki/Rayleigh%E2%80%93Ritz_method
[Ribeiro] Sofia Leitão, Diogo Cruz, João Seixas, Yasser Omar, José Emilio Ribeiro, J.E.F.T. Ribeiro, 费米子系统的量子模拟,CERN,indico.cern.ch/event/772852/contributions/3505906/attachments/1905096/3146117/Quantum_Simulation_of_Fermion_Systems.pdf
[Rioux] 使用张量代数分析的马赫-曾德尔偏振干涉仪,faculty.csbsju.edu/frioux/photon/MZ-Polarization.pdf
[Rydberg_R] Rydberg 常数,来自维基百科,en.wikipedia.org/wiki/Rydberg_constant
[Rydberg_Ritz] Rydberg-Ritz 组合原理,维基百科,en.wikipedia.org/wiki/Rydberg%E2%80%93Ritz_combination_principle
[Sawaya] Nicolas P. D. Sawaya, Francesco Paesani, Daniel P. Tabor, 近期和长期振动光谱量子算法方法,2021 年 2 月 1 日,arXiv:2009.05066 [quant-ph],arxiv.org/abs/2009.05066
[Schiffer_1] Fabijan Pavošević, Tanner Culpitt, 和 Sharon Hammes-Schiffer,多组分量子化学:通过核-电子轨道方法整合电子和核量子效应,Chem. Rev. 2020, 120, 9, 4222–4253,doi.org/10.1021/acs.chemrev.9b00798
[Schiffer_2] Kurt R. Brorsen, Andrew Sirjoosingh, Michael V. Pak, 和 Sharon Hammes-Schiffer,显式相关核-电子轨道 Hartree-Fock 方法:限制基集和开壳系统,J. Chem. Phys. 142, 214108 (2015),doi.org/10.1063/1.4921304
[SciPy] 统计函数(scipy.stats),docs.scipy.org/doc/scipy/getting_started.html
[SciPy_0] SciPy,scipy.org/
[SciPy_sph] SciPy,API 参考,计算球谐函数,scipy.special.sph_harm,docs.scipy.org/doc/scipy/reference/generated/scipy.special.sph_harm.html
[Seeley] Jacob T. Seeley,Martin J. Richard,Peter J. Love,用于电子结构量子计算的 Bravyi-Kitaev 变换,2012 年 8 月 29 日,arXiv:1208.5986 [quant-ph],arxiv.org/abs/1208.5986v1
[Sharkey] K. Sharkey 等人,使用显式相关全粒子高斯函数直接变分计算双原子第一激发转动能级的非 Born-Oppenheimer 方法,表 I。H_2 的(v,0)和(v,1)态的总能量(单位:hartrees),Physical Review A,88,032513 (2013),journals.aps.org/pra/abstract/10.1103/PhysRevA.88.032513
[Sharkey_0] Keeper L. Sharkey 和 Ludwik Adamowicz,使用全电子显式相关高斯基函数进行非相对论量子力学有限核质量变分计算氮原子在 L = 0,M = 0 态的算法,J. Chem. Phys. 140,174112 (2014),doi.org/10.1063/1.4873916
[Sharkey_1] K. Sharkey,分子氢海报,QLEAN™,qlean.world/molecular-hydrogen-poster
[Shor] Peter Shor,Shor 算法的故事,直击源头,2021 年 7 月 2 日,www.youtube.com/watch?v=6qD9XElTpCE
[Skylaris] C.-K. Skylaris,CHEM6085:密度泛函理论,第 8 讲,高斯基组,www.southampton.ac.uk/assets/centresresearch/documents/compchem/DFT_L8.pdf
[Skylaris_1] C.-K. Skylaris,CHEM3023:自旋、原子和分子,第 8 讲,实验可观测量/未成对电子,www.southampton.ac.uk/assets/centresresearch/documents/compchem/chem3023_L8.pdf
[Sph_Real] 维基百科,球谐函数,实形式,en.wikipedia.org/wiki/Spherical_harmonics#Real_forms
[Spheres] 如何在实际量子计算机上制备排列对称的多量子比特态,spheres.readthedocs.io/en/stable/notebooks/9_Symmetrized_Qubits.html
[Stephens] Matthew Stephens,Metropolis Hastings 算法,stephens999.github.io/fiveMinuteStats/MH_intro.html
[斯ティ克勒] B. A. Stickler 等人,手性分子物质波干涉产生的对映异构体叠加,Phys. Rev. X 11,031056(2021),journals.aps.org/prx/abstract/10.1103/PhysRevX.11.031056
[苏] Yuan Su, Dominic W. Berry, Nathan Wiebe, Nicholas Rubin, 和 Ryan Babbush,基于第一量子化的容错量子化学模拟,2021 年 10 月 11 日,PRX Quantum 2,040332,DOI:10.1103/PRXQuantum.2.040332,doi.org/10.1103/PRXQuantum.2.040332
[SymPy] SymPy,Python 符号数学库,www.sympy.org/en/index.html
[SymPy_CG] SymPy,Clebsch-Gordan 系数,docs.sympy.org/latest/modules/physics/quantum/cg.html
[SymPy_Rnl] 氢波函数,docs.sympy.org/latest/modules/physics/hydrogen.html
[塔米尔] Abraham Tamir,化学工程中马尔可夫链的应用,Elsevier,1998 年,9780080527390,0080527396,www.google.fr/books/edition/Applications_of_Markov_Chains_in_Chemica/X0ivOmHYPoYC
[蒂博] Casey Berger, Agustin Di Paolo, Tracey Forrest, Stuart Hadfield, Nicolas Sawaya, Michał Stęchły, Karl Thibault,气候变化中的量子技术:初步评估,IV. 量子计算机的能源效率,Karl Thibault,arXiv:2107.05362 [quant-ph],2021 年 6 月 23 日,arxiv.org/abs/2107.05362
[图卢兹] Julien Toulouse,量子化学导论,2021 年 1 月 20 日,www.lct.jussieu.fr/pagesperso/toulouse/enseignement/introduction_qc.pdf
[图卢兹 _1] Julien Toulouse, 量子化学中的量子蒙特卡罗波函数及其优化,CEA Saclay,SPhN Orme des Merisiers,2015 年 4 月,www.lct.jussieu.fr/pagesperso/toulouse/presentations/presentation_saclay_15.pdf
[特兰特] Andrew Tranter, Peter J. Love, Florian Mintert, Peter V. Coveney,Bravyi-Kitaev 变换和 Jordan-Wigner 变换在量子化学量子模拟中的比较,2018 年 12 月 5 日,J. Chem. Theory Comput. 2018,14,11,5617–5630,doi.org/10.1021/acs.jctc.8b00450
[托伊勒] Matthias Troyer:在化学模拟中实现实用量子优势,QuCQC 2021,www.youtube.com/watch?v=2MsfbPlKgyI
[Ucsd] 加州大学圣地亚哥分校,球坐标系和角动量算符,quantummechanics.ucsd.edu/ph130a/130_notes/node216.html
[VQE_1] Peruzzo,A.,McClean,J.,Shadbolt,P.等,光子量子处理器上的变分本征值求解器,自然通讯 5,4213(2014 年),doi.org/10.1038/ncomms5213
[VQE_2] Qiskit Nature,基态求解器,qiskit.org/documentation/nature/tutorials/03_ground_state_solvers.html
[VQE_3] 用于小分子和量子磁体的硬件高效变分量子本征值求解器,自然杂志 549,242–246(2017 年),doi.org/10.1038/nature23879
[VQE_4] 在状态向量模拟器上运行 VQE,qiskit.org/textbook/ch-applications/vqe-molecules.html#Running-VQE-on-a-Statevector-Simulator
[Vandersypen] Vandersypen,L.,Steffen,M.,Breyta,G.等,使用核磁共振实现 Shor 的量子分解算法,自然 414,883–887(2001 年),doi.org/10.1038/414883a
[Veis] Libor Veis,Jakub Višňák,Hiroaki Nishizawa,Hiromi Nakai,Jiří Pittner,量子计算机上超越玻恩-奥本海默近似下的量子化学:模拟相位估计研究,国际量子化学杂志,2016 年 6 月 22 日,doi.org/10.1002/qua.25176
[Wiki-Comb] 所有 k 的 k 组合数,维基百科,en.wikipedia.org/wiki/Combination#Number_of_k-combinations_for_all_k
[Wiki-GAU] 高斯轨道,维基百科,en.wikipedia.org/wiki/Gaussian_orbital
[Wiki-STO] 斯莱特型轨道,维基百科,en.wikipedia.org/wiki/Slater-type_orbital
[Wiki_1] 量子力学的数学表述,维基百科,en.wikipedia.org/wiki/Mathematical_formulation_of_quantum_mechanics
[Wonders] 光学异构体,对映异构体和手性分子,化学奇迹,www.youtube.com/watch?v=8TIZdWR4gIU
[Yepez] Jeffrey Yepez,讲义:矩阵和梯形算符形式的量子门,2013 年 1 月 15 日,www.phys.hawaii.edu/~yepez/Spring2013/lectures/Lecture2_Quantum_Gates_Notes.pdf
第九章:术语表
按照惯例,星号表示在 附录 A 中有相应的条目 – 准备数学概念。
角动量量子数 *
也称为轨道量子数或方位量子数,用
表示,它描述了电子亚层,并给出了轨道角动量的幅度。
反对易子 *
两个算符
的运算,定义为:
。
反对易性 *
可以定义一组作用于局部电子模式的费米子湮灭算符和创建算符,它们满足反对易关系。
原子
构成化学元素的基本粒子。它由一个由电子围绕的原子核组成,电子以轨道排列,以概率描述其位置。原子没有整体电荷。
原子序数
一个数字,通过指定原子中的质子/电子数量来识别原子。
原子或分子轨道
一个数学函数,描述了在原子或分子中,在特定时间、特定空间点找到电子的概率。
原子模拟环境 (ASE)
一套工具和 Python 模块,用于设置、操作、运行、可视化和分析原子模拟。
基组
一组函数,通过线性组合来创建分子轨道。
波恩-奥本海默 (BO) 近似
这是这样的假设,即分子中原子核和电子的波函数可以分别处理,这样电子运动和核运动可以分开。
拉布里-基塔耶夫 (BK) 变换
一种将费米子系统的占据态映射到量子比特的变换方法。这种变换将 n 个相互作用的费米子的哈密顿量映射到 n 个量子比特的
本地哈密顿量。
质心 (COM)
质量分布的平均位置,这是许多体系统中元素质量的加权平均值。
克莱布施-戈登 (CG) 系数
在未耦合的张量积基中,耦合总角动量和/或自旋动量的展开系数。
对易子 *
两个算符
的运算,定义为:
。对于任何算符
和
,
当且仅当
和
对易。可以证明,如果一个量子系统有两个同时物理可观测的量,那么代表它们的厄米算符必须对易。
完成
对于一个函数,其中包含了表示该量子系统所需的所有统计上重要的数据,使得性质的计算收敛到极限,即一个单一值。
构造性干涉
当两个或多个波相加,使得产生的波振幅等于各个振幅之和时。
耦合簇(CC)
一种理论,它使用指数簇算子构建多电子波函数,该算子是所有单激发算子的和,所有双激发算子的和,等等。
密度泛函理论(DFT)
一种基于量子力学第一原理(从头计算)的模拟方法,在空间上依赖于描述原子系统、原子、分子和晶体电子结构性质的密度泛函。
密度矩阵
基于概率、平均值和测量结果来描述量子系统的状态。
破坏性干涉
当两个波的最大值相差
弧度时,产生的波振幅较小,甚至可能为零振幅,这种现象称为破坏性干涉。
狄拉克符号
狄拉克符号也称为括号符号。量子系统的状态,或波函数,由一个括号表示,它是一个坐标和/或变量的列向量。括号表示一个线性函数,它将每个列向量映射到一个复共轭的行向量。行向量对列向量的作用。
特征值
当对向量应用线性变换的结果是向量乘以一个标量时,则该向量称为特征向量,而该标量称为与该线性变换相关的特征值。
电子
一个具有负电荷的稳定亚原子粒子,是所有原子的组成部分,是固体中电的主要载体。
电子结构分子哈密顿算子
分子的哈密顿算子代表所有粒子的总能量,包括电子和核子,由所有粒子的动能之和以及所有粒子之间的势能之和组成。
纠缠
如果多粒子系统的波函数不能分解为单个粒子函数的乘积,那么量子系统就被认为是纠缠的。
交换算子
这是一个操作符,它交换粒子的非物理标签。它作用于 Fock 空间中的状态,并确定相同粒子是玻色子还是费米子。
期望值
这是测量一个状态的所有可能结果的和,这些结果根据它们的概率加权。
显式相关高斯(ECG)
这是所有粒子对之间距离的平方,以指数形式表示。
显式相关高斯基函数(ECGs)
集合中有多于一个的 ECG。
费米子、费米子、电子湮灭算子
一种数学运算,允许我们表示准粒子的激发或跃迁。激发需要初始状态比最终状态具有更低的能量水平。
费米子、费米子、电子创建算子
一种数学运算,允许我们表示准粒子的去激发(退激发)或跃迁。去激发需要初始状态比最终状态具有更高的能量水平。
费米子、费米子、电子激发算子 *
一种数学运算,它将电子从占据的自旋轨道激发到未占据的轨道。
佛克空间
在量子力学中用于从单个粒子的希尔伯特空间创建变量或未知数量的相同粒子的量子态空间的代数结构。
高斯型轨道(GTOs)
在原子轨道线性组合(LCAO)方法中用作原子轨道的函数,用于表示分子中的电子轨道及其依赖的各种属性。
梯度下降
一种通过在给定点(该点处函数的梯度方向为最速下降方向)迭代地移动到函数梯度的相反方向来寻找函数局部最小值的优化算法。这可以比作一个球在景观中滚动。如果我们给球一个方向(通常是向下)的推动,球最终会落在最小值处。
哈密顿算子
与量子系统总能量相关的算子,它是势能算子和动能算子的和。
哈特里(Ha)
在分子轨道计算中常用的原子能量单位,定义为
,其中
是里德伯常数,
是普朗克常数,
是光速。
哈特里-福克方法
一种技术,用作近似方法,用于确定处于定态的量子多体系统的波函数和能量。
赫米特算子
一个等于其转置共轭的线性算子,即自伴的,并且具有与可观测量相对应的实特征值。
约尔丹-维格纳变换
约尔丹-维格纳变换广泛用于模拟与电子数量相同的量子比特的电子系统。它在每个量子比特中存储每个自旋轨道的占据情况,并将费米子创建和湮灭算子映射到泡利算子的张量积。
原子轨道线性组合(LCAO)
原子轨道的叠加。
磁量子数
描述电子在其子壳层中的能量水平以及电子轨道的取向,并表示为
。它可以取从
到的整数值,其中
是角动量量子数。
马尔可夫链蒙特卡洛(MCMC)
一种通过模拟具有目标概率分布的马尔可夫链的方法来从目标概率分布中产生样本的方法,其平稳分布是目标概率分布。
马尔可夫链理论(MCT)
一种近似方法,用于描述一个(非)量子系统,该系统可以占据各种状态,并且一旦确定了初始状态和状态之间的概率跃迁,其(时间)演化就定义了。
平均场理论 (MFT)
一种通过一个平均场与一个有效相互作用来减少系统多体相互作用的近似方法。
Metropolis-Hastings (MH)
一种用于从概率中产生样本的马尔可夫链蒙特卡洛 (MCMC) 方法。
混合量子态
一个纯量子态的统计系综。
分子哈密顿量
表示分子粒子的总能量算符,包括所有粒子的动能之和以及所有粒子之间的势能之和。
分子轨道 (MO) 理论
一种通过应用密度泛函理论 (DFT) 或 Hartree-Fock 方法,将分子中电子的波函数(分子轨道)近似为原子轨道的线性组合(LCAO)的方法。
蒙特卡洛方法
任何用于解决问题的随机方法。
中子
一个电量为零、质量是电子的 1,838.68366173 倍的中子。中子比质子略重。
可归一化
一个满足其平方模积分有限的薛定谔方程的波函数,这意味着当在整个空间上积分时,正定乘积应小于无穷大。
核子
原子核的构成单元,即质子和中子。
核子(复数 nuclei)
每个原子的核心包含一个或多个质子和零个或多个中子,它们通过强核力结合在一起。
数值 Python (NumPy)
一个开源的 Python 库,几乎被用于科学和工程的每个领域。
占据数
在 Fock 空间的基中,如果自旋轨道状态未被电子占据,则与该自旋轨道状态相关的占据数为 0;如果被电子占据,则为 1。
占据数算符 *
一种作用于局部电子模式并满足反对易关系的算符。
占据数表示
第二量子化表示的同义词。
占据自旋轨道
被电子占据的自旋轨道。
奇偶变换
与 Jordan-Wigner 变换相反,奇偶算符是低权重,而占据算符成为高权重。
泡利不相容原理 (PEP) *
1925 年,泡利描述了电子的 PEP,该原理指出,同一原子的两个电子不可能同时具有以下四个量子数的相同值:主量子数、角动量量子数、磁量子数和自旋量子数。
随着各种类型的基本粒子的发现,电子的 PEP 已被推广到所有基本粒子和复合系统。对于费米子,总波函数必须对相同粒子对的交换具有反对称性。对于玻色子,总波函数必须对粒子对的交换具有对称性。对于同时包含相同费米子和相同玻色子的复合系统,上述操作必须同时成立。
泡利矩阵
一组三个
复合矩阵,它们是厄米矩阵、酉矩阵,并代表轨道和自旋角动量磁相互作用。
聚合酶链式反应(PCR)
一种放大技术,通过一系列相同的化学反应复制复杂的蛋白质。
势能面(PES)
系统的势能,通常是一个分子,描述了两个原子之间的键长和键角等参数的函数。
正定
这适用于矩阵、矢量和波函数,使得复共轭转置(†)乘以其自身,严格大于零。
主量子数
描述原子壳层中的能量水平或电子的位置,并从一数到包含该原子最外层电子的壳层,其范围从一到无穷大,因此它是一个连续的量子数。然而,当电子被激发到更高的值并从原子中解离出来时,它被认为是自由电子加上一个离子。这个过程称为电离,能量水平被认为是离散的。
氢离子
一种稳定的亚原子粒子,是原子核的组成部分,带有与电子等大的正电荷,其质量比电子高三个数量级。
模拟势
一种有效势,取代了完整的原子全电子势,消除了核心状态,并通过拟波函数描述价电子。
纯量子态
状态向量或波函数的同义词。
基于 Python 的化学模拟框架(PySCF)
由 Python 驱动的开源电子结构模块集合。
量子化学
一门旨在从量子力学的公设出发理解化学系统的化学分支。
量子力学
一种基本物理理论,从数学上描述了物质、能量以及光在亚原子粒子、原子和分子尺度上的相互作用的行为。
量子蒙特卡洛(QMC)
将蒙特卡洛方法应用于量子系统。
量子相位估计(QPE)*
一种测量量子态相位的算法。
量子工具箱在 Python 中(QuTiP)
解决量子力学问题的一般框架,例如由低能级量子系统和谐振子组成的系统。
Qiskit
用于在脉冲、电路和应用模块级别与量子计算机一起工作的开源软件开发工具包(SDK)。
量子自然 SPSA(QN-SPSA)
一种基于 SPSA 并通过近似目标电路的保真度 Hessian 来采样自然梯度的梯度下降方法,用于优化系统。
量子比特
通过耦合角动量和自旋动量来表示的状态矢量,代表计算信息的一个量子位。
量子比特哈密顿量
表示为厄米矩阵的厄米算符。
Rayleigh-Ritz 变分定理
系统哈密顿量的期望值总是与所求解的特征值相关的最低能量的上界。
限制 HF(RHF)方法
用于闭壳层分子的 HF 方法。自旋轨道可以是 alpha(自旋向上)或 beta(自旋向下),所有轨道都由 alpha 和 beta 自旋轨道双占。
限制开壳(ROHF)方法
用于开壳层分子的 HF 方法,其中每个自旋的电子数不相等。ROHF 尽可能使用双占分子轨道,对于未配对电子使用单占轨道。
第二量子化表示
在 Fock 态基中表示量子多体状态的表示。
顺序最小二乘规划(SLSQP)
由迪特·克劳特最初定义的顺序二次规划优化算法。
同时扰动随机近似(SPSA)
使用随机梯度近似并仅在每一步进行两次目标函数测量的梯度下降方法,用于优化系统。
SymPy
一个用于符号数学的 Python 库。
单值
对于给定的输入变量,只有一个可能输出的函数。
斯莱特行列式波函数
当两个电子交换时,通过改变符号来满足 PEP 反对称标准的波函数表达式。
斯莱特型轨道(STOs)
用于通过原子轨道的线性组合(LCAO)来制定原子轨道和分子轨道的函数。
自旋投影量子数
给出沿指定轴的自旋动量
在给定空间方向上的投影,可以是自旋向上(+½)或自旋向下(-½),在量子计算中定义为
-轴。
自旋量子数
描述某种粒子类型的固有自旋动量;它因粒子类型而异,没有经典类似物来描述它。对于电子,它等于 1/2。
方积可积
对于域中所有可能值的积分,其绝对值的平方是有限的实值或复值函数。
状态矢量
用于表示量子态波函数的矢量。
超叠加
所有实数或复数基函数的线性组合。
总波函数*
描述系统的物理行为。它包含量子系统的所有信息,包括作为参数的复数。一般来说,它是系统中所有粒子的函数,包括空间位置、每个粒子的自旋方向坐标和时间
特罗特化
一种量子模拟截断方法,广泛用于在量子计算机上模拟非交换哈密顿量。
单体和双体单位耦合簇(UCCSD)
一种单位耦合簇理论,它使用指数簇算子构建多电子波函数,该算子是所有单激发算子的和以及所有双激发算子的和。
无限制的高斯场(UHF)方法
用于开放壳分子的高斯场方法(HF),其中每个自旋的电子数不相等。UHF 轨道可以是α或β自旋,但α和β轨道可能具有不同的空间分量。
变分蒙特卡洛(VMC)
一种实现变分方法的量子蒙特卡洛方法。
变分量子算法(VQA)
一种算法,它使用参数化量子线路来准备一个作为试探解(一个试探解法)的试探量子状态,并使用经典计算机优化该量子线路相对于目标函数的参数。
变分量子本征值求解器(VQE)
2014 年引入的一种算法,它使用基于量子硬件定义。它是目前科学界正在探索的几个变分量子算法(VQAs)中的第一个。在一个循环中,经典计算机优化量子线路的参数,使其相对于目标函数(如寻找分子的基态,即能量最低的状态)进行优化。参数化量子线路准备一个试探量子状态作为试探解(一个试探解法)。通过反复测量量子线路输出的量子位,我们得到与试探状态相关的能量可观察量的期望值。
附录 A:准备数学概念
按照惯例,#表示在第九章**,术语表中有一个互补条目。
在本附录中,我们将涵盖以下主题:
-
使用的符号
-
数学定义
技术要求
本章的配套 Jupyter 笔记本可以从 GitHub 下载,网址为github.com/PacktPublishing/Quantum-Chemistry-and-Computing-for-the-Curious,已在 Google Colab 环境中测试,这是一个免费的环境,完全运行在云端,并在 IBM Quantum Lab 环境中。请参阅附录 B**——在云端利用 Jupyter 笔记本,获取更多信息。配套的 Jupyter 笔记本会自动安装以下列表中的库:
-
数值 Python(NumPy)[NumPy],一个开源的 Python 库,几乎被应用于科学和工程的各个领域
-
SymPy [SymPy],一个用于符号数学的 Python 库
-
Qiskit [Qiskit],一个开源 SDK,用于在脉冲、电路和应用模块级别与量子计算机交互
-
Qiskit 可视化支持以启用其可视化功能和使用 Jupyter 笔记本
安装 NumPy、SimPy 和 Qiskit 以及导入各种模块
使用以下命令安装 NumPy:
pip install numpy
使用以下命令安装 SymPy:
pip install simpy
使用以下命令安装 Qiskit:
pip install qiskit
导入 NumPy 和一个返回复数数组 LaTeX 表示的函数
使用以下命令导入 NumPy:
import numpy as np
导入所需的函数和类方法。array_to_latex function() 返回一个具有 1 或 2 维度的复数数组的 LaTeX 表示:
from qiskit.visualization import array_to_latex
使用的符号
我们将在适当的地方使用以下符号:
-
,等等——小写希腊字母表示标量。 -
,等等——小写拉丁字母表示粒子空间中的列向量。这些向量有 n 个分量,表示为
,等等,其中 k 是一个整数。 -
,等等——大写拉丁字母表示粒子空间中的矩阵。这些是 n x n 的矩阵。 -
,等等——撇号(')和字母
分别表示向量和矩阵的转置。 -
,等等——星号(*)用于向量和矩阵的复共轭。 -
,
,等等—— dagger 符号,
,用于向量和矩阵的复共轭转置。 -
,等等——负一的幂
表示矩阵的逆。 -
,等等 – 符号
表示矩阵和/或向量的克罗内克积或张量积。 -
,等等。 – 符号
表示平方矩阵的克罗内克和。 -
– 至少存在一个。 -
– 对于所有。 -
– 例如,是
的成员意味着
属于实数集合
。
数学定义
泡利不相容原理(PEP)
在 1925 年,泡利描述了电子的 PEP,该原理指出,同一原子的两个电子不可能同时具有以下四个量子数的相同值:
,主量子数;
,角动量量子数;
,磁量子数;和
,自旋量子数。
在发现各种基本粒子之后,电子的 PEP(泡利不相容原理)已被推广到所有基本粒子和复合系统。记住,费米子是具有半整数值自旋(
)的粒子,而玻色子是具有整数值自旋(
)的粒子。PEP 的一般公式指出,量子系统的总波函数
必须对所有相同粒子的集合具有某些对称性,即电子和相同核子,玻色子和费米子,在配对粒子排列操作下:
- 对于费米子,总波函数必须相对于相同配对粒子的交换具有反对称性(
):

这意味着波函数的空间部分是反对称的,而自旋部分是对称的,或者反之亦然。
- 对于玻色子,总波函数必须相对于配对粒子的交换具有对称性(
):

这意味着空间波函数和自旋函数要么都是对称的,要么都是反对称的。
- 对于同时包含相同费米子和相同玻色子的复合系统,上述操作必须同时成立。
角动量量子数
也称为轨道量子数或方位量子数,用
表示,它描述了电子亚层,并通过关系式:
给出了轨道角动量的模。在化学和光谱学中,
被称为
轨道,
是
轨道,
是
轨道,而
是
轨道。技术上,在
轨道之外还有更多的轨道,即
,
等等,这些具有更高的能级。
职位数算子
一个算子
,其中
和
是湮灭算子,而
是作用在局部电子模式上的创建算子,它们满足以下反对易关系:


其中
是狄拉克δ函数,而
是两个算子
和
的反对易子。
量子相位估计 (QPE)
给定一个幺正算子
,其本征态和本征值
,准备状态
的能力,以及应用
本身的能力,QPE 算法计算
,其中
是用于估计
所使用的量子比特数,从而允许我们测量
如我们所希望的那样精确。
复数
复数的形式为
,其中
和
是实数,而
(
在 Python 中称为虚数单位)定义为满足方程
的数。复数的模长为:
。复数
的共轭复数为
。欧拉公式
在复数的乘法和指数运算中非常方便。复数集加上加法和乘法运算构成一个域,表示为
。由复数组成的代数表达式遵循代数的标准规则;与实数不同的是,
被替换为
。
向量空间
在复数域
或实数域 ℝ 上,一个向量空间
是一组称为向量的对象集合,这些向量可以相加,并且可以由数字相乘(“缩放”)。
以下 Python 代码说明了具有两个复数分量的向量:
x = np.array([[1j],
[2]])
array_to_latex(x, prefix='x = ')

我们使用 Python 3.5 中引入的@运算符来乘以一个向量,如下所示,将向量
乘以虚数单位
(Python 中的
),其中
被替换为
:
α = 1j
print('α =', α)
y = α*x
array_to_latex(y, prefix=' y = α*x =')


线性算子
定义在向量空间
上,且在
上的函数
是线性算子,如果它具有以下两个性质:
-
对于任何
在
中,![]()
-
对于任何
在
中,
在
中,![]()
矩阵
矩阵是一组以方形或矩形排列的元素。元素可以是数字、矩阵、函数或代数表达式。矩阵的阶数或形状写作(行数)x(列数)。索引以行,列格式书写,例如,
是第
行和第
列的元素。矩阵代表向量空间中的线性算子。在某些正交归一基中,使用相同的符号表示算子和它的矩阵是方便的。
特征值和特征向量
根据定义,线性算子
在向量空间
上定义,且在
上,其特征向量是一个非零向量
,它具有以下性质:
,其中
是
中的一个标量,称为与特征向量
相关的特征值。
对于有限维空间
,上述定义等价于
,其中
是
的矩阵表示。
向量和矩阵的转置、共轭和共轭转置
一些向量
或一些矩阵
的转置,通常表示为
,是通过交换向量
或矩阵
的行和列索引得到的。以下 Python 代码说明了向量
的转置:
x = array_to_latex(x.transpose(), prefix='x^T = ')

一些向量
或一些矩阵
的复共轭,通常表示为
、
,是通过对所有元素执行复共轭得到的。
x = array_to_latex(x.conjugate(), prefix='x^* = ')

在量子力学中,某些向量
或矩阵
的复共轭转置通常表示为
、
。符号
被称为 dagger。
被称为伴随或厄米共轭
:
x = array_to_latex(x.conjugate().transpose(), prefix='(x^*)^T = ')

狄拉克符号
在狄拉克符号,也称为括号-括号符号中:
-
拉括号
表示一个矢量,它代表量子系统的状态。 -
拉括号
表示一个线性函数,它将每个向量映射到一个复数。 -
线性函数
对矢量
的作用表示为
。
它们之间的关系如下:

两个向量的内积
在向量空间
上,对
的内积是一个复函数 (·, ·),它返回一个标量,并满足以下条件:
-
对于任何
在
中,
。此外,
当且仅当
。 -
![公式 A_150.png].
-
.
在
上,标准厄米内积是:
.
使用狄拉克符号,向量
和
的内积表示为
,并且与将括号
应用到矢量
上的结果相同:

![公式 A_161.jpg]
Python 的 numpy.vdot 函数返回两个向量的厄米内积:
array_to_latex(x, prefix='x = ')
![公式 A_162.png]
array_to_latex(y, prefix='y = ')

print("np.vdot(x, y) = ", np.vdot(x, y)

向量的范数
内积产生一个由
定义的范数。除了三角不等式
之外,范数还满足施瓦茨不等式
。向量的范数或向量的模通常被称为向量的长度。
Python 的 numpy.linalg.norm 函数返回向量的范数:
print("Norm of vector x: {:.3f}".format(np.linalg.norm(x)))

希尔伯特空间
内积空间
如果在诱导范数下是完备的,即如果每个柯西序列都收敛:对于每个序列
有
使得
,在
中存在一个
,使得
。这个性质允许使用微积分技术。
矩阵与向量的乘法
Python 3.5 中引入的 @ 运算符实现了矩阵与向量的乘法:
A = np.array([[1, 2],
[3, 1j]])
array_to_latex(A, prefix='A = ')

a = np.array([[1],
[1]])
array_to_latex(a, prefix='a = ')

array_to_latex(A@ , prefix='A@ = ')

矩阵加法
相同形状的两个矩阵的加法是通过将相应的项相加来实现的:

A = np.array([[1, 0],
[0, 1j]])
array_to_latex(A, prefix='A = ')

B = np.array([[0, 1],
[1j, 0]])
array_to_latex(B, prefix='B = ')

array_to_latex(A+B, prefix='A+B = ')

矩阵乘法
设
是一个 m 行 n 列的矩阵,
是一个 n 行 p 列的矩阵,那么乘积
是一个 m 行 p 列的矩阵,其定义如下:

Python 3.5 中引入的 @ 运算符实现了矩阵乘法:
A = np.array([[1, 0],
[0, 1j]])
array_to_latex(A, prefix='A = ')

B = np.array([[1, 1, 1j],
[1, -1, 0]])
array_to_latex(B, prefix='B = ')

array_to_latex(A@B, prefix='A@B = ')

矩阵逆
当某些矩阵
存在时,其逆矩阵表示为
,是一个矩阵,使得
,其中
是单位矩阵,对于任何矩阵
:
。numpy.linalg.inv 函数计算矩阵的乘法逆:
from numpy.linalg import inv
a = np.array([[1., 2.], [3., 4.]])
array_to_latex(A, prefix='A =')

array_to_latex(inv(A), prefix='A^{-1} = ')

张量积
给定维度为
的向量空间
和维度为
的向量空间
在
上,张量积
是另一个维度为
的向量空间
在
上。
和
是
上的线性映射,
是
上的线性映射:
双线性



结合律


线性映射的性质


如果内积空间
是两个内积空间
,
的张量积,那么对于每一对向量
,
,在
中存在一个相关的张量积
。
在狄拉克记号中,我们表示张量积
为
或
。
和
的内积是
。
克朗内克积或矩阵或向量的张量积
表示为
的两个矩阵的克朗内克积或张量积是由第二个矩阵的块按第一个矩阵的比例缩放而成的复合矩阵。设
是一个 m 行 n 列的矩阵,
是一个 p 行 q 列的矩阵,那么克朗内克积
是一个 pm 行 qn 列的块矩阵:

Python 的 numpy.kron 函数实现了克罗内克积:
A = np.array([[1,2],
[3, 4]])
array_to_latex(A, prefix='A =')

B = np.array([[0, 5],
[6, 7]])
array_to_latex(B, prefix='B =')

C = np.kron(A,B)
array_to_latex(C, prefix='A \otimes B =')

克罗内克和
任何两个方阵的克罗内克和,
n×n 和
m×m,记为
,定义为:

其中
是阶数为
的单位矩阵,
是阶数为
的单位矩阵。
外积
基底
和 bra
的外积是一个秩为 1 的算子
,其规则为:

对于有限维向量空间,外积是一个简单的矩阵乘法:

Python 的 numpy.outer 函数实现了外积:
array_to_latex(x, prefix='x = ')

array_to_latex(y, prefix='y = ')

array_to_latex(np.outer(x, y), prefix='np.outer(x, y) = ')

将矩阵表示为外积之和
任何矩阵都可以用外积表示。例如,对于一个 2×2 矩阵:



厄米算子
某些向量
或矩阵
的复共轭转置通常表示为
,
在量子力学中。符号
被称为 dagger。
被称为伴随或厄米共轭。
一个线性算子
如果它是自己的伴随算子,则称为厄米算子或自伴算子:
。
谱定理表明,如果
是厄米算子,那么它必须有一组正交归一的特征向量

其中
具有实特征值
,
是特征向量的数量,或者也是希尔伯特空间的维度。厄米算子以特征值集合
和相应的特征向量
为唯一谱表示:

单位算子
一个线性算子
如果其伴随算子存在并且满足
,其中
是单位矩阵,根据定义,它将乘以的任何向量保持不变,则称为单位算子。
单位算子保持内积:

因此,单位算子也保持了通常称为量子态长度的范数:

对于任何幺正矩阵
,任何特征向量
和
以及它们的特征值
和
,
和
,特征值
和
的形式为
,如果
则特征向量
和
是正交的:
。
有用的一点是,由于对于任何
,
:

密度矩阵
任何量子态,无论是混合还是纯,都可以用一个密度矩阵(
)来描述,这是一个归一化的正厄米算子,其中
。根据谱定理,存在一个正交基,在第 2.3.1 节,厄米算子中定义,使得密度是所有特征值的和(
):

其中
从 1 到
,
是正的或零特征值 (
),特征值的和是密度矩阵的迹操作 (
),等于 1:

例如,当密度为
,
时,密度的迹为:

下面是一些纯量子态密度矩阵的例子:



由
个纯量子态
组成的混合量子态的密度矩阵,每个态具有经典发生的概率
,定义为:

其中每个
是正的或零,它们的和等于一:

我们在图 AA.1 中总结了纯态和混合态之间的区别,它与图 2.20相同。

图 AA.1 – 纯态和混合量子态的密度矩阵
泡利矩阵
存在三个泡利矩阵(
,
和
):
,
, 
它们是厄米算子和幺正算子,使得每个矩阵的平方等于
单位矩阵:

每个泡利矩阵都等于其逆矩阵:



我们在以下表格中总结了泡利矩阵和作用于量子比特的操作,这些操作产生相关的特征向量:

将矩阵分解为泡利矩阵张量的加权求和
可以证明任何矩阵都可以分解为恒等矩阵和泡利矩阵
的张量的加权求和,其中
,权重为
和
个量子比特:

对于厄米矩阵,所有权重
都是实数。
我们为任何 2x2 矩阵
提供一个证明。




由于
因此
我们有:


从 2x2 矩阵的分解作为外积之和开始:

因此我们可以写出:


反对易子
两个算子
的运算,定义为:
。
反对易
可以定义一组作用于局部电子模式的费米子湮灭算符
和创建算符
,它们满足以下反对易关系:


交换子
两个算子
的运算,定义为:
。对于任何算子
和
,
当且仅当
和
交换。可以证明,如果一个量子系统有两个同时物理可观测的量,那么表示它们的厄米算子必须交换。对于任何算子
,
和
,我们有以下关系,这些关系对于计算交换子是有用的:







费米子,费米子,电子湮灭算符
一种数学运算,允许我们表示准粒子的激发或跃迁。激发需要初始状态比最终状态具有更低的能量水平。
一个算子
,它将位于
费米子轨道中的粒子数减少一个单位:

其中:
和
是位于
费米子轨道中的粒子数。
是一个预因子,如果
费米子轨道中没有电子,即如果
,则湮灭斯莱特行列式中的状态。
相位因子
保持整个状态叠加的反对称性质。
费米子,费米子,电子创建算符
一种数学运算,允许我们表示准粒子的去激发(去激发)或跃迁。去激发需要初始状态比最终状态具有更高的能量水平。
一个算符
,它将位于
费米子轨道中的粒子数增加一个单位:

其中:
和
是位于
费米子轨道中的粒子数。
是一个预因子,如果我们有一个电子在
费米子轨道中,它将湮灭该状态,即如果
。
相位因子
保持整个状态叠加的反对称性质。
费米子,费米子,电子激发算符
一个算符
,它将电子从占据的自旋轨道
激发到未占据轨道
。
总波函数
描述系统的物理行为,并由大写希腊字母 Psi 表示:
。它包含量子系统的所有信息,包括作为参数的复数 (
)。一般来说,
是系统中所有粒子
的函数,其中粒子的总数是
。此外,
包括每个粒子的空间位置 (
)、每个粒子的自旋方向坐标 (
) 和时间
:

其中
和
是单粒子坐标的向量:


单粒子系统的总波函数是空间
、自旋
和时间
函数的乘积:

参考文献
[Micr_Algebra] 线性代数,QuantumKatas/tutorials/LinearAlgebra/:github.com/microsoft/QuantumKatas/tree/main/tutorials/LinearAlgebra
[Micr_Complex] 复数运算,QuantumKatas/tutorials/ComplexArithmetic/:https://github.com/microsoft/QuantumKatas/tree/main/tutorials/ComplexArithmetic
[NumPy] NumPy:初学者的绝对基础:numpy.org/doc/stable/user/absolute_beginners.html
[Qiskit] Qiskit:qiskit.org/
[Qiskit_Alg] 线性代数,Qiskit: qiskit.org/textbook/ch-appendix/linear_algebra.html
[SymPy] SymPy,一个用于符号数学的 Python 库:www.sympy.org/en/index.html
附录 B:在云端利用 Jupyter 笔记本
在本附录中,我们将涵盖以下主题:
-
Jupyter Notebook
-
Google Colaboratory
-
IBM 量子实验室
-
伴随 Jupyter 笔记本
Jupyter Notebook
Jupyter Notebook 是一个免费的 Web 应用程序,用于创建和共享结合 Markdown 格式的可执行代码和叙述文本的计算文档 [Jupyter_0]。它提供了一个简单、流畅、以文档为中心的体验。Project Jupyter 是一个非营利性、开源项目。
Google Colaboratory
Google Colaboratory(或简称 Colab)是一个完全在云端运行的免费 Jupyter Notebook 环境,无需下载或安装任何软件即可提供共享的在线 Jupyter 笔记本实例 [Colab_0] [Colab_1]。您只需拥有一个有效的 Gmail 账户即可保存和访问 Google Colab Jupyter 笔记本。
IBM Quantum Lab
IBM Quantum Lab 是一个无需安装的云启用 Jupyter 笔记本环境 [IBM_QLab0] [IBM_QLab1]。IBM Quantum Composer 是一个图形量子编程工具,允许您拖放操作来构建量子电路并在真实量子硬件或模拟器上运行它们 [IBM_comp1] [IBM_comp2]。它允许公众免费访问 IBM 提供的基于云的量子计算服务。在 Quantum Lab 中,您可以在定制的 Jupyter Notebook 环境中编写结合 Qiskit 代码、方程、可视化和叙述文本的脚本。
伴随 Jupyter 笔记本
我们在此处提供了一个 GitHub 仓库,其中包含本书的伴随 Jupyter 笔记本:https://github.com/PacktPublishing/Quantum-Chemistry-and-Computing-for-the-Curious。这些伴随笔记本会自动安装相关库,如下所示:
-
数值 Python(NumPy)[NumPy],一个开源的 Python 库,几乎在科学和工程的每个领域都得到应用。
-
Qiskit [Qiskit],一个开源 SDK,用于在脉冲、电路和应用模块级别与量子计算机交互。
-
Qiskit 可视化支持,以启用可视化功能和使用 Jupyter 笔记本。
-
Qiskit Nature [Qiskit_Nature] [Qiskit_Nat_0],一个独特的平台,用于弥合自然科学与量子模拟之间的差距。
-
基于 Python 的化学模拟框架(PySCF)[PySCF]是一个由 Python 驱动的开源电子结构模块集合。
-
量子工具箱在 Python 中(QuTiP)[QuTiP]旨在成为一个解决量子力学问题的一般框架,例如由少量量子系统和谐振子组成的系统。
-
原子模拟环境(ASE)[ASE_0],一套用于设置、操作、运行、可视化和分析原子模拟的工具和 Python 模块。代码在 GNU LGPL 许可下免费提供。
-
PyQMC [PyQMC],一个实现实空间量子蒙特卡洛技术的 Python 模块。它主要用于与 PySCF 交互。
-
h5py [H5py] 包,一个用于 HDF5 二进制数据格式的 Python 接口。
-
SciPy [SciPy_0],一个用于科学计算和技术计算的免费开源 Python 库。SciPy 提供了优化、积分、插值、特征值问题、代数方程、微分方程、统计学以及许多其他类别的算法。
-
SymPy [SymPy],一个用于符号数学的 Python 库。
所有配套的 Jupyter 笔记本在 Google Colab 和量子实验室环境中都运行成功。
第六章“超越玻恩-奥本海默”的配套 Jupyter 笔记本不包括安装 Psi4,这是一种用于高通量量子化学的开源软件 [Psi4_0],我们曾用它来对二氧化碳 (CO2) 分子的振动频率进行分析进行简单计算。我们建议对安装此软件包感兴趣的读者查阅“开始使用 Psi4” [Psi4_1] 文档和参考文献 [Psi4_3]。
参考文献
[ASE_0] 原子模拟环境 (ASE),wiki.fysik.dtu.dk/ase/index.html
[Colab_0] 欢迎来到 Colaboratory,Google Colab 常见问题解答,research.google.com/colaboratory/faq.html
[Colab_1] 欢迎来到 Colaboratory,colab.research.google.com/
[H5py] 快速入门指南,docs.h5py.org/en/stable/quick.html
[IBM_QLab0] IBM 量子实验室,quantum-computing.ibm.com/lab
[IBM_QLab1] 欢迎来到量子实验室,quantum-computing.ibm.com/lab/docs/iql/
[IBM_comp1] 欢迎来到 IBM 量子作曲家,quantum-computing.ibm.com/composer/docs/iqx/
[IBM_comp2] IBM 量子作曲家,quantum-computing.ibm.com/composer/files/new
[Jupyter_0] Jupyter,jupyter.org/
[NumPy] NumPy:初学者的绝对基础,numpy.org/doc/stable/user/absolute_beginners.html
[Psi4_0] Psi4 手册主索引,psicode.org/psi4manual/master/index.html
[Psi4_1] 开始使用 PSI4,psicode.org/installs/v15/
[Psi4_3] Smith DGA, Burns LA, Simmonett AC, Parrish RM, Schieber MC, Galvelis R, Kraus P, Kruse H, Di Remigio R, Alenaizan A, James AM, Lehtola S, Misiewicz JP, Scheurer M, Shaw RA, Schriber JB, Xie Y, Glick ZL, Sirianni DA, O'Brien JS, Waldrop JM, Kumar A, Hohenstein EG, Pritchard BP, Brooks BR, Schaefer HF 3rd, Sokolov AY, Patkowski K, DePrince AE 3rd, Bozkaya U, King RA, Evangelista FA, Turney JM, Crawford TD, Sherrill CD, Psi4 1.4: 开源软件用于高通量量子化学,J Chem Phys. 2020 年 5 月 14 日;152(18):184108. doi: 10.1063/5.0006002. PMID: 32414239; PMCID: PMC7228781, www.ncbi.nlm.nih.gov/pmc/articles/PMC7228781/pdf/JCPSA6-000152-184108_1.pdf
[PyQMC] PyQMC,一个实现实空间量子蒙特卡罗技术的 Python 模块,github.com/WagnerGroup/pyqmc
[PySCF] 基于 Python 的化学模拟框架(PySCF),pyscf.org/
[Qiskit] Qiskit,qiskit.org/
[Qiskit_Nat_0] Qiskit_Nature,github.com/Qiskit/qiskit-nature/blob/main/README.md
[Qiskit_Nature] 介绍 Qiskit Nature,Qiskit,Medium,2021 年 4 月 6 日,medium.com/qiskit/introducing-qiskit-nature-cb9e588bb004
[QuTiP] QuTiP,在布洛赫球上的绘图,qutip.org/docs/latest/guide/guide-bloch.html
[SciPy_0] SciPy,Python 符号数学库,scipy.org/
[SymPy] SymPy,Python 符号数学库,www.sympy.org/en/index.html
附录 C:商标
原子模拟环境(ASE)版权© 2022,ASE 开发者。
Google Colab 版权© 2017,COLAB,LLC。
h5py,一个围绕 HDF5 的薄型 Python 封装,在 Python 3(3.6+)上运行,版权© 2008,Andrew Collette 和贡献者。
IBM®、IBM Q Experience® 和 Qiskit® 是 IBM 公司的注册商标。
Linux 是 Linus Torvalds 在美国和其他国家的注册商标。
Psi4,一个开源量子化学软件包,版权© 2007-2022,Psi4 开发者。
pyQMC,一个实现实空间量子蒙特卡洛技术的 Python 模块,版权© 2019,Lucas K Wagner,pyQMC 作者。
基于 Python 的化学模拟框架(PySCF)版权© 2014,PySCF 开发者。
Python 版权© 2001-2022 Python 软件基金会。
Python 标志是 Python 软件基金会的商标:www.python.org/community/logos/。
Python 中的量子工具箱(QuTiP)版权© 2011-2021,包括 QuTiP 开发者和贡献者。
SciPy,一个用于数学、科学和工程的开源软件,版权© 2001-2002 Enthought,Inc.,以及 2003-2022,SciPy 开发者。
SymPy 版权© 2021,SymPy 开发团队。
NumPy 商标已在美国专利商标局(USPTO)注册。
Jupyter 商标已在美国专利商标局(USPTO)注册。


,描述了电子在原子壳层中的能量水平或位置,并从 1 开始编号,直到包含该原子最外层电子的壳层。技术上,
可以取从 1 到无穷大的值,因此它是一个连续的量子数。然而,当电子被激发到更高的
被认为是离散的。
,也称为轨道量子数或方位量子数,描述了电子子壳层,并通过以下关系给出轨道角动量的量级:
。在化学和光谱学中,
被称为
轨道,
是
轨道,
是
轨道,
是
轨道。技术上,在
轨道之外还有更多的轨道,即
、
等,它们的能量水平更高。
,描述了电子在其子壳层中的能量水平以及电子轨道的方向。它可以取从
开始的整数值。
,对于每种粒子类型都不同,并且没有经典的对立物来描述它是什么。自旋量子数描述了某种粒子类型的固有自旋动量;对于电子来说,它等于 1/2。
,给出了自旋动量
沿指定轴的投影,在给定的空间方向上可以是“自旋向上”(+½)或“自旋向下”(-½)。在量子计算中,这个方向被定义为
-轴。
到
的跃迁。
到
的跃迁。
到
的跃迁。
到
的跃迁。
到
的跃迁。
和原子轨道字母,第二个是显示在上标中的轨道中电子的数量。
的值对应于
?
的值是多少?


表示,乘以波函数本身严格大于零:
:
,其中
)
和某个时间点,即它必须存在于所有空间和时间中的某个地方:
,其中
以及空间变量
或
相关
) 和自旋量子数 (
)
) 是一个连续的量子变量,其范围从 1 到无穷大,在实际上,由于电离,它成为一个离散变量。
) 包含在由以下确定的离散集合中:
.
) 包含在由角动量量子数 (
) 确定的离散集合中:
)和方位角(phi
)的网格
:状态 1 的角动量投影
:状态 2 的角动量投影
:耦合系统的总角动量
)
)
)

电子在
,
:配置元组的字典
:字典中数组的索引
:默认为 None,设置为 
,
,
)的氮原子的波函数
,
,
)的波函数
):
):
与主量子数
混淆,因为我们使用的是相同的符号。
,使得
和
,其中
是该集合的最后一个可能的整数。
的相同玻色子粒子 (
) 时,对称量子数是
,分配函数是
,相应的 Young 框架如下:
的相同玻色子粒子时,对称量子数是
,分配函数是
,相应的 Young 框架与之前的 Young 框架相同。
的相同费米子粒子时,对称量子数是
,相应的 Young 框架与之前的 Young 框架相同。我们在 第 2.2.2 节,氢负离子的概率幅
中使用这个状态。
的相同费米子粒子时,对称量子数是
,分配函数是
,相应的 Young 框架如下:
),总自旋
,即两个成对的电子和一个孤电子时,对称量子数是
,分配函数是
,相应的 Young 框架如下:
),总自旋
,即三个未配对电子时,对称量子数是
,配分函数是
,相应的 Young 框架如下:
),对称量子数
,划分是
,我们有以下 Young 框架:
表示为
表示 Young 框架 图 2.15,其中第一行包含 1,2,第二行包含 3:
到 
,其中
是精细结构常数,
是光速,





、
和
、
与
、
相耦合,CG 系数是多少?
方向的位置算符是什么?
和 



是纠缠的,只能测量为状态
或状态
,每个状态的测量概率为 1/2。
和
时,
状态在
方向上是“向上”的。
和
时,
在
中,它变为
在
中(请注意,正数的反余弦是一个第一象限角度)
是
中的相对相位,忽略了全局相位 


。
在
中是布洛赫球上的角度。
在
中是相对相位,忽略全局相位。
在
中是布洛赫球上的角度。
中的测量
门
) 门
态
应用 Hadamard 门,将其置于状态
和
置于交换和不交换的叠加态
应用 Hadamard 门
在状态
下被测量时,计算最终状态
测量在状态
时计算最终状态
。如果我们得到 0,那么量子比特
和
和
处于反对称化状态。
得到的对称化状态
得到的反对称化状态
得到的对称化状态
创建对称化状态的实验
创建反对称态的实验
创建对称态的实验
和
是电子和核相对于位置坐标的二阶导数算符,即
,对于
电子也是如此。
、
和
是电子
和
、电子
和核
、以及核
和
之间的距离,由欧几里得范数确定。
或
.
或
.
或
.
和
是位于
费米子轨道中的粒子数。
是一个预因子,如果我们有一个电子位于
费米子轨道中,即如果
。
保持整个状态叠加的反对称性质。
和
是位于
费米子轨道中的粒子数。
是一个预因子,如果
费米子轨道中没有电子,即如果
。
保持整个状态叠加的反对称性质。
是角动量量子数,其值从
是电子从原子核的核距离。
被称为轨道指数,它控制了轨道密度随核距离变化的消失速度。
是角动量量子数,其值从
到
,其中
是主量子数。
是电子从原子核的距离。
被称为轨道指数,它控制着轨道密度随核距离变化的消失速度。
是编码费米子模式偶宇称的量子比特集合,其索引小于
,并给出全局相位。
是当费米子模式
改变占用时必须翻转的量子比特集合。
是确定量子比特
与费米子模式
是否具有相同或相反奇偶性的量子比特集合。它在奇数
是在第 4.3.1 节“费米子创建算符”中引入的费米子创建算符
是在第 4.3.2 节“费米子湮灭算符”中引入的费米子湮灭算符
是所有展开系数的参数集。
和
是相对于电子和核的位置坐标的二阶导数算子,即
和类似地对于
电子。
,
,和
是电子
和
、电子
和核
、以及核
和
之间的欧几里得距离。
是角动量量子数。
是平衡距离。
是简化普朗克常数。
是两个原子的约化质量,
。
能量 [Komasa]
到
的罗维振动参数 [Campargue]
是使用 10,000 个基函数的非 BO 方法产生的波数能量[Sharkey]。
是波数中的实验数据[Dabrowski]。



,等等——小写希腊字母表示标量。
,等等——小写拉丁字母表示粒子空间中的列向量。这些向量有 n 个分量,表示为
,等等,其中 k 是一个整数。
,等等——大写拉丁字母表示粒子空间中的矩阵。这些是 n x n 的矩阵。
,等等——撇号(')和字母
分别表示向量和矩阵的转置。
,等等——星号(*)用于向量和矩阵的复共轭。
,
,等等—— dagger 符号,
,用于向量和矩阵的复共轭转置。
,等等——负一的幂
表示矩阵的逆。
,等等 – 符号
表示矩阵和/或向量的克罗内克积或张量积。
,等等。 – 符号
表示平方矩阵的克罗内克和。
– 至少存在一个。
– 对于所有。
– 例如,是
的成员意味着
属于实数集合
。
):
):
在
中,
在
中,
在
表示一个矢量,它代表量子系统的状态。
表示一个线性函数,它将每个向量映射到一个复数。
对矢量
。
在
。此外,
当且仅当
。
.
浙公网安备 33010602011771号