专栏首页浊酒清味你见过可以解量子力学薛定谔方程的Python库吗

你见过可以解量子力学薛定谔方程的Python库吗

前言

Python的发展速度持续加快,其应用范围从机器学习逐渐扩散到各个领域。今天给大家介绍一个可以解决量子力学中薛定谔方程的一个Python库Quantized。

Quantized是一个灵活的python库,用于解决一维的量子力学系统。它适合在玩具(简单)系统上进行实验,也可用于制作量子力学课程的教学材料。

主页:

https://quantized.readthedocs.io/en/latest/

功能介绍

01

PART

在它的核心,量子化是一个库求解时间相关的薛定谔方程。

我们先介绍什么是薛定谔方程(来源自维基百科):

含时薛定谔方程描述物理系统随时间演化,其最广义形式为

在三维空间里,移动于位置势能V(r,t) 的单独粒子,其含时薛定谔方程可以更具体地表示为

这个Python库用有一种数值方法来解这个方程。

它使用一个基集展开来做到这一点:

from quantized.basis import HarmonicOscillator, EigenBasis
basis_set = (
    [HarmonicOscillator(n, center=1.0) for n in range(5)]
    + [HarmonicOscillator(n, center=-1.0) for n in range(5)]
)
basis_set

运行结果:

[HarmonicOscillator(n=0, center=1.0, mass=1.0, omega=1.0), HarmonicOscillator(n=1, center=1.0, mass=1.0, omega=1.0), HarmonicOscillator(n=2, center=1.0, mass=1.0, omega=1.0), HarmonicOscillator(n=3, center=1.0, mass=1.0, omega=1.0), HarmonicOscillator(n=4, center=1.0, mass=1.0, omega=1.0), HarmonicOscillator(n=0, center=-1.0, mass=1.0, omega=1.0), HarmonicOscillator(n=1, center=-1.0, mass=1.0, omega=1.0), HarmonicOscillator(n=2, center=-1.0, mass=1.0, omega=1.0), HarmonicOscillator(n=3, center=-1.0, mass=1.0, omega=1.0), HarmonicOscillator(n=4, center=-1.0, mass=1.0, omega=1.0)]

你可以解出任意势函数的特征态:

from functools import partial
from quantized import operators

def potential(x, a, b):
    return a * x ** 4 - b * x**2


v = partial(potential, a=0.5, b=1.5)

H = operators.Hamiltonian(v).matrix(basis_set)
S = operators.Overlap().matrix(basis_set)

eig_basis = EigenBasis.from_basis(basis_set, H, S)

print("Ground state", eig_basis.states[0])
print("\nEnergies:", eig_basis.energies)

这个库是为那位科学家而设计的。本征态仅仅是x的函数,不需要对混乱和容易出错的转换大惊小怪。

我们画出波函数的前三阶展开:

from matplotlib.pyplot import subplots
import numpy as np
fig, ax = subplots()
x = np.linspace(-5, 5, 1000)

for i, (b, e) in enumerate(zip(eig_basis.states[:3], eig_basis.energies[:3])):
    ax.plot(x, b(x) + e, label=f"$\phi_{i}(x)$")

ax.plot(x, v(x), "k--", label="$x^2 + x$")
ax.legend(loc="upper right")
ax.set_xlim(-3, 4)
_ = ax.set_ylim(-2, 6)

我们也对时间相关的解做了同样的处理。选择一个初始状态(任何函数),你就可以看到波函数是如何随着时间演化的:

%%capture

from quantized.time_evolution import TimeEvolvingState
from quantized.plotting import animate_state

initial = HarmonicOscillator(n=0, center=-1)
time_state = TimeEvolvingState(initial, eig_basis)

fig, ax = subplots()
ax.set_xlim(-3, 4)
ax.set_ylim(-2, 6)
anim = animate_state(fig, ax, initial_state=initial, time_dependent_state=time_state, potential=v, nframes=200, interval=20)

from IPython.display import HTML
HTML(anim.to_html5_video())

02

PART

安装

根据其主页的安装方式:

pip install quantized

然而我安装失败了,这有可能是因为:

In some instances (particularly windows machines), you may run into trouble while trying to install numba. If this happens, The most reliable way I've found is to use conda to install numba. 在某些情况下(特别是windows机器),在尝试安装numba时可能会遇到麻烦。如果发生这种情况,我发现最可靠的方法是使用conda安装numba。

所以我按照教程中的conda方式进行安装

conda create -n quantized python=3.7
conda activate quantized
conda install numba
pip install quantized

嗯,安装过程非常顺利。但是运行程序的时候还是报错了。

于是我再次按照报错信息的要求:

Importing the numpy c-extensions failed. - Try uninstalling and reinstalling numpy.

先卸载了numpy然后再次安装。

有一点需要注意的是,这些操作都要在quantized的环境中进行,就像这样:

灵感来源

03

PART

这个库的最初灵感来自于寻找量子粒子从一个地方移动到另一个地方所需时间的概率可信度的研究过程。

文献链接:

https://www.worldscientific.com/doi/10.1142/S0219633618500463

这个库的特性:

  • 谐振子基函数
  • 用于求解时间无关/时间相关薛定谔方程的函数API
  • 分子操作:平移、旋转等
  • 保证80%+测试覆盖率
  • 一维传输时间分析的CLI
  • 缓存和优化的重叠和哈密顿积分
  • 主要类型暗示(正在进行中)
  • 日志记录和输入验证,以及有用的错误消息

04

PART

更多资料

可以看到主页上还提供了关于如何解薛定谔方程的教程:

以及关于这个Python的文档(documentaion):

感兴趣的小伙伴可以尝试一下哦。

·END·

本文分享自微信公众号 - Python与机器学习之路(gh_39aead19f756),作者:Huangwei AI

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-01-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python第十七课:列表

    在上一课中我们简单提到了列表这个概念,并且通过和for组合来完成一个循环结构。事实上,我们是可以直接访问列表中的元素的,没错就是通过列表名+[n]这种方式来访问...

    HuangWeiAI
  • Python第二十一课:类的从属关系

    在上一课我们介绍了类和对象,但是并没有详细给大家理清楚它们的联系和区别。这里我们从一个例子出发,试图让大家有一个更加清晰的认识。假如我问你香蕉和水果有什么区别,...

    HuangWeiAI
  • 如何用模拟退火算法解数独

    想必大家都看过或者玩过数独游戏吧。数独游戏是源自18世纪瑞士的一种数学游戏。是一种运用纸、笔进行演算的逻辑游戏。

    HuangWeiAI
  • OpenGL ES 2.0 (iOS)[06-1]:基础纹理

    Texture 在 OpenGL 里面有很多种类,但在 ES 版本中就两种——Texture_2D + Texture_CubeMap;

    半纸渊
  • 【数据科学系统学习】机器学习算法 #

    本篇内容为《机器学习实战》第 6 章 支持向量机部分程序清单。所用代码为 python3。

    py3study
  • Pandas的对齐运算

    祈澈菇凉
  • CG实验4 三维几何变换

    步行者08
  • Python+OpenGL进行立方体多纹理映射

    Python扩展库pyopengl完美地封装了OpenGL,从而使得可以使用Python编写计算机图形学程序。如果使用pip在线安装不成功的话,可以下载whl文...

    Python小屋屋主
  • Python实现立方体纹理映射

    本文要点在于扩展库pyopengl的使用,接口与标准的OpenGL基本一致。 import sys from OpenGL.GL import * from O...

    Python小屋屋主
  • 20个Linux服务器安全强化建议(二)

    当我们使用 useradd、usermod 命令创建或维护用户账号时,确保始终应用强密码策略。例如,一个好的密码至少包括8个字符,包含了字母、数字以及特殊字符串...

    大江小浪

扫码关注云+社区

领取腾讯云代金券