有简单的方法可以数值求解时间相关的薛定ding方程吗?


34

我想对一维简单电位上的波包散射进行一些简单的模拟。

是否有简单的方法来数值求解单个粒子的一维TDSE?我知道,通常来说,尝试使用朴素的方法来积分偏微分方程会很快以灾难告终。因此,我正在寻找算法

  • 在数值上是稳定的
  • 易于实现,或易于访问的代码库实现,
  • 运行得相当快,希望
  • 比较容易理解。

我还想相对地避开频谱方法,尤其是那些只像往常一样解决与时间无关的Schrödinger方程的方法。但是,我对使用B样条或诸如此类的伪谱方法感兴趣。如果该方法可以发挥与时间有关的潜力,那么那绝对是一个好处。

当然,任何这种方法都将始终具有许多缺点,因此我想听听这些缺点。什么时候不起作用?什么是常见的陷阱?可以采用哪些方法,不能采用哪些方法?



@EmilioPisanty我在SSFM的撰写中添加了一个错误讨论:我注意到(写完答案后,很抱歉)您并不热衷于频谱方法,但以防万一……

清理线程;从物理学中删除对话题性的讨论。
Geoff Oxberry 2014年

1
我建议从这里开始,尽管还有许多新近的工作:比较随时间变化的Schrödinger方程的不同传播方案
David Ketcheson 2014年

3
@GeoffOxberry您可以提供这些评论的屏幕截图吗?
Emilio Pisanty 2014年

Answers:


24

Schroedinger方程实际上是一个反应扩散方程 (所有常数均为1)。对于任何偏微分方程,有两种解决方法:

(1)iψt=2ψ+Vψ
  1. 隐式方法(adv:时间步长大且无条件稳定,disadv:需要矩阵求解器可能会提供错误的数据)
  2. 显式方法(adv:易于实现,disadv:需要很小的时间步来保持稳定性)

对于抛物线方程(线性,二阶),隐式方法通常是更好的选择。原因是显式方法的稳定性条件要求,这将非常小。您可以通过使用隐式方法来避免此问题,该方法对时间步长没有任何限制(尽管实际上,由于可能会丢失一些物理特性,通常不会使它过分地大)。接下来我要介绍的是Crank-Nicolson方法,这是一种常见的二阶精确(时空)隐式方案。x d t d x 2txdtdx2

初学者

为了以计算方式求解PDE,您需要将其离散化(使变量适合网格)。最直接的是矩形的笛卡尔网格。在此,表示时间索引(始终是上标),表示位置索引(始终是下标)。通过对位置相关变量采用泰勒展开式,公式(1)变为 假设Ĵ ψ Ñ + 1 Ĵ - ψ ĴnjV=VX 1

iψjn+1ψjdt=12(ψj+1n+12ψjn+1+ψj1n+1dx2+ψj+1n2ψjn+ψj1ndx2)+12(Vjψjn+1+Vjψjn)
V=V(x)。接下来发生的是一组类似的空间和时间索引(您可能需要仔细检查数学): 这个方程具有如下形式 0-00+0
(2)12dtdx2ψj+1n+1+(idtdx212Vj)ψjn+1+12dtdx2ψj1n+1=iψjn12dtdx2(ψj+1n2ψjn+ψj1n)+12Vjψjn
ψ Ñ + 1 Ĵ
(A0A00A+A0A00A+A0A)(ψ0n+1ψ1n+1ψJ1n+1)=(ψ0nψ1nψJ1n)
这称为三对角矩阵,并且具有已知的解决方案(加上有效的示例,包括一本是我写的!)。除项外,显式方法会方程式(2)的整个左侧(或者我应该说顶行?)。iψjn+1

问题

我发现隐式方法的最大问题是它们很大程度上取决于边界条件。如果边界条件定义/实施不正确,则可能会在单元格中产生虚假振荡,从而导致不良结果(请参阅我在SciComp上有关类似主题的文章)。这实际上导致空间精度为一阶,而不是您的方案应该给出的精度为二阶。

隐式方法据说也很难并行化,但是我仅将它们用于一维热方程,不需要并行支持,因此我既不能验证也不否认该主张。

我也不确定波动函数的复杂性将如何影响计算。我所做的工作使用了Euler流体动力学方程,因此对于非负幅值是完全真实的。

随时间变化的潜力

如果您具有与时间相关的分析潜能(例如),则只需将当前时间用作RHS(2)上的和将来的时间,LHS上的。我不认为这会带来任何问题,但是我没有对此进行测试,因此我也无法验证或否认这方面。V Ĵ+ d Vcos(ωt)tVjt+dt

备择方案

Crank-Nicolson方法也有一些有趣的替代方法。首先是所谓的“超级时间步进”方法。在这个明确的方法,你花时间步长(),使用切比雪夫多项式的根得到一组优化的时间,步骤,迅速总和为速度比做步倍(有效您将获得因此每一步都会使您前进 d d / Ñ Ñ Δ Ť = Ñ 2 d Ñ Ñ d dtdx2dtdt/NNΔT=N2dtNNdt及时)。(我在研究中采用了这种方法,因为您使用Crank-Nicolson方案无法从一个单元到另一个单元定义明确的“通量”,该通量用于将数据从一个处理器合并到另一个处理器)。

编辑 要注意的一点是,该方法在时间上是一阶准确的,但是如果您结合使用Runge-Kutta 2方法,它将在时间上为您提供二阶精确的方案。

另一个称为交替方向显式。此方法要求您具有已知且定义明确的边界条件。然后,通过直接在计算中使用边界来求解方程(无需在每个步骤之后应用边界)。此方法发生的情况是您两次求解PDE,一次是向上扫描,一次是向下扫描。向上扫描使用 而向下扫描使用 ,而其他项保持不变。时间步长2ψ

2ψx2ψj1n+1ψjn+1ψjn+ψj+1ndx2
n+1
2ψx2ψj+1n+1ψjn+1ψjn+ψj1ndx2
n+1 然后通过平均两个方向扫描来求解。

1
很好的答案,唯一的抱怨就是你击败了我!
凯尔2014年

@ChrisWhite:我在想今天早上可以怎么做,我想到的唯一一件事就是对做一次,对做一次。我将看一下该论文(更重要的是他们给出的免费代码),并看看他们如何建议这样做。RI
Kyle Kanos 2014年

@ChrisWhite也许偷偷摸摸是为了计算本征函数,我已经看过通过虚构的时间步长来计算:布置步长方向,以便最低能量本征函数具有最小的负值,因此衰减最慢。在随机输入上进行迭代时,非常快地只剩下最低能量本征函数的形状。然后,从随机输入中减去它,然后再次执行此过程:现在,下一个最低能量本征函数是主要函数。等等。听起来有些狡猾(尤其是 eigenfuncs 更高),但是它可以工作!- hhνhν

1
@DavidKetcheson:反应扩散方程的形式为。在薛定inger方程的情况下,;请问这不是 RD型方程式吗?而且,奇怪的是,薛定inger方程实际上出现在我引用的反应扩散维基文章中。我所做的这种模棱两可也出现在许多出版的期刊和文章中(继续进行搜索)。也许对我来说建议使用标准库(如此处的通用MO)更好,例如PETSc,deal.ii或pyCLAW?- [R Û = V ùtu=Dx2u+R(u)R(u)=Vu
凯尔·坎诺斯

1
@KyleKanos:您的帖子很好。实际上,在DavidKetcheson发表的文章中,第一个参考文献主张Crank-Nicolson。与反应扩散的比较很好;正如您所注意到的,在许多公开的资料中都出现了对反应扩散的比较。我认为DavidKetcheson正在寻找类似前面提到的“色散方程”。
Geoff Oxberry 2014年

22

在90年代初期,我们一直在寻找一种解决TDSE的方法,该方法应足够快以在PC上实时制作动画,并且遇到了PB Visscher 在Physics in Physics中描述的令人惊讶的简单,稳定,显式的方法:“ 一种快速的显式算法对于时间相关的Schrödinger方程 ”。Visscher指出,如果将波函数分成实部和虚部,,则SE成为系统:ψ=R+iI

dRdt=HIdIdt=HRH=12m2+V

RIR0,Δt,2Δt,...I0.5Δt,1.5Δt,...)

R(t+12Δt)=R(t12Δt)+ΔtHI(t)

I(t+12Δt)=I(t12Δt)ΔtHR(t)

2ψ(r,t)=ψ(r+Δr,t)2ψ(r,t)+ψ(rΔr,t)Δr2
(标准三点拉普拉斯)。

这是明确的,非常快速地计算和二阶准确Δt

将概率密度定义为

P(x,t)=R2(x,t)+I(x,t+12Δt)I(x,t12Δt)
以整数时间步长,并且,

P(x,t)=R(x,t+12Δt)R(x,t12Δt)+I2(x,t)

使算法统一,从而节省了概率。

借助足够的代码优化,我们可以在80486台计算机上实时获得非常精美的动画。学生可以“利用”任何潜力,选择总能量,并观察高斯数据包的时间演变。


这是解决实部和虚部的非常巧妙的技巧!还请注意,您可以使用来获得大型的集中式方程$$ ... $$。我已经为您做到这一点的自由,希望您不要介意!
凯尔·坎诺斯

我们很高兴找到该算法-它易于编程且运行迅速。最困难的部分是使初始条件正确,在t = 0时的R,在0.5dt的I ...我不介意编辑,我很高兴能得到方程式。

1
@ user40172大约在同一时间,我们对波导进行了相同的操作,并确定了答案中描述的BPM。原因是当时我们可以使用DSP板与主CPU分开运行FFT。我们以为我们太聪明了,但是我必须说,在2014年提出解决软件问题的硬件解决方案看起来真是太难了!Visual Studio C ++的最新版本可以自动在CPU上对代码进行矢量化处理,并且可以通过FFT很好地完成工作。

1
0.5dt

1
@俄罗斯由于我们一直在进行散射,我们使用了标准的自由粒子高斯波包,但要确保将其“远离”电势非零的任何区域“足够远”地启动。参见,例如:demoss.wolfram.com/EvolutionOfAGaussianWavePacket

10

xt

您要做的是光束传播方法的伪装版本,用于通过横截面不同(类似于时变电势)的波导进行光传播,因此对它进行查找也将很有帮助。

我查看SSFM / BPM的方式如下。它的基础是李理论的Trotter产品公式:

(1)limm(exp(Dtm)exp(Vtm))m=exp((D+V)t)

xyxyzψ(x,y,z)tNΨ1024×1024N=10242=1048576

(2)dtΨ=KΨ=(D+V(t))Ψ

K=D+VN×Nu(N)Ψexp(Kt)iK=D+VNU(N)D+Vi2/(2m)i1V0+i1(V0V(x,y,z,t0))V0

我们让:

(3)D=i2m2i1V0V=i1(V0V(x,y,z,t))

我为什么将它们分成这样,将在下面阐明。

DΨexp(ΔtD)Ψ

  1. ΨΨ~x,y,zkx,ky,kz
  2. Ψ~exp(ΔtD)Ψ~exp(iΔt(V0kx2+ky2+kz2)/)
  3. exp(ΔtD)Ψ

    VV

  4. Ψexp(ΔtV)Ψexp(iΔt(V0V(x,y,z,t))/)

ΔtV(x,y,z,t)

Δtexp(D+VΔt)exp(DΔt)exp(VΔt)VD

请注意,即使在离散的世界中,您也只会赋予一元运算符:FFT和纯相位因子。

ΔtΔxΔx/Δtc

这种事情的第二个“经验”点-我几乎愿意打赌,这就是您如何遵循自己的想法。我们经常有想要进行简单,快速和肮脏的仿真的想法,但这种方法永远无法实现!我从上面介绍的SSFM开始,因为它非常容易运行,您将很快看到其结果是否是物理的。稍后,您可以使用Mathematica SSFM代码检查可能最终构建的更复杂代码的结果,例如,按照Kyle Kanos的答案创建Crank Nicolson代码。


错误界限

Baker-Campbell-Hausdorff定理的Dynkin公式实现:

exp(DΔt)exp(V)Δt)=exp((D+V)Δt+12[D,V]Δt2+)
Δt>0

exp(DΔt)exp(V)Δt)exp(12[D,V]Δt2)=exp((D+V)Δt+O(Δt3))

exp(V)Δt)exp(12[D,V]Δt2)Δt

Δt22[D,V]=iΔt22m(x2V(x,t)+2xV(x,t)x)

是一个简单的乘法运算符。所以你必须对 exp感到满意[D,V],并使用此来估算误差,通过加工出ð - exp(12[D,V]Δt2)eiφΔt2(id(12[D,V]iφ(t))Δt2)(id(12[D,V]iφ(t))Δt2)ψψ(x,t)Δtφ(12[D,V]iφ(t))Δt2exp(φdt)

有关SSFM / BPM中的错误的相关文章是:

拉斯·泰伦(LarsThylén)。“光束传播方法:其适用性分析”,《光学与量子电子学》 15(1983)pp433-439

拉尔斯·泰伦(LarsThylén)用非李理论上的术语来思考错误(李群是我的直觉,所以我想寻找它们的解释),但他的想法与上述观点基本相同。


1
exp[Δt(D+V)]exp[ΔtV/2]exp[ΔtD]exp[ΔtV/2]Δt权力。例如参见Bandrauk和Shen,Chem。物理 来吧 176,428(1991)。显然,您的动力学项不能依赖于坐标,也就是说,它在曲线坐标中不能很好地工作。

1
否则,将此拆分运算符与动能算符的FFT评估相结合,是解决分子物理学中基于网格表示的TDSE的标准过程之一。

@perplexity非常感谢。很高兴知道不同领域使用什么。您所参考的1991年日期很有趣:我一直很确定拆分步骤的想法是在1970年代后期从波导仿真中产生的-所以也许我错了。

1
你根本没有错。那的确是灵感。我了解的将这些想法转化为质量管理的第一项工作是Feit,Fleck和Steiger,J. Comput。物理 47,412(1982),如果我没记错的话,它们实际上使用了相同的技巧,其优点是此处的操作器在构造上是统一的(与经典波不同)。我相信Ronnie Kosloff首次提出了针对此类仿真的基于FFT网格的方法。他在他的网页上对这个主题有很好的评价。

我领域的另一本很好的参考书是David Tannor的著作《量子力学:时间依赖的观点》。干杯。

5

我可以建议使用时域有限差分(FDTD)方法。我什至在不久前写了一个教程,应该可以回答您的大多数问题:

JR Nagel,“应用于Schrödinger方程的有限差分时域算法的回顾和应用”,ACES杂志,第1卷。2009年2月1日,第24号

我有一些Matlab代码,可以在一维系统上很好地运行。如果您有使用FDTD进行电磁学的经验,那么它对于量子力学也非常有用。如果您有兴趣,我可以发布我的验证码。

基本上,它只是通过将导数分解成有限的差直接作用于波函数。它有点类似于Crank-Nicholson方案,但不完全相同。如果您从电磁波理论熟悉FDTD,那么在求解Schrodinger方程时FDTD将非常直观。


4

最简单的有限差分法快速且易于理解,但时间上并不统一-因此概率不守恒。Crank-Nicholson-Crout对向前和向后有限差分方法取平均值,以生成混合的隐式/显式方法,该方法仍然非常易于理解和实现,并且在时间上是统一的。该站点很好地解释了该方法,提供了伪代码,并提供了相关的属性:

http://www.physics.utah.edu/~detar/phycs6730/handouts/crank_nicholson/crank_nicholson/ 注意:该链接的等式LHS缺少-符号,该符号在整个页面中传播。

不团结来自何处?

简而言之,解决TDSE归结为弄清楚如何处理

|ψ(x,t)=eiHt|ψ(x,0)

其中包含一个指数微分运算符。

应用前向有限差​​分可将微分算子转换为三对角矩阵(将实数转换为网格),并将指数转换为其泰勒级数的前两个项

eiHt1iHt

离散化和线性化是引起非单一性的原因。(通过直接计算,您可以证明三对角矩阵不是单一的。)将前向有限差​​分与后向有限差分相结合即可得出近似值

eiHt112iHt1+12iHt

恰好是单一的(再次可以通过直接计算来显示)。


感谢您及时的回复。您能否提供有关这两种方法的更多详细信息?它们如何工作,为什么?不团结来自何处?
Emilio Pisanty 2014年

我很乐意提供更多细节,但是为了避免错过目标受众,了解以下各个背景领域的学历和经验将非常有用:微积分,微分方程,线性代数,量子力学以及数值方法(特别是有限差分法)。

请从标准物理和数学中假设您需要的所有内容(尽管参考更复杂的部分可能会有所帮助)。不过,我的数值方法有些生锈。
Emilio Pisanty 2014年

(1+i2Ht)1(1+i2Ht)ψ

不,它与Kyle Kanos给出的算法相同。我只是用这种方式写的,以给出一种不同的视角。我希望更容易概念化-而他更容易实现。是的,您最终只是在求解一个三对角方程。AJP中有一篇很旧的(1967年)论文,我很难找到它对其进行了很好的描述:ergodic.ugr.es/cphys/lecciones/SCHROEDINGER/ajp.pdf 他们使用CN制作了8mm高斯波包的胶片环。散布各种电位。您仍然可以在许多大学物理演示库中找到这些胶片循环。

3

这里的一些答案和评论使TDSE与波动方程混淆不清。在某种程度上也许是语义问题。TDSE是经典非相对论哈密顿量的量化形式

H=p22m+V(x)=E.
pix,  Eit,  xx,
[22mxx+V(x)]ψ=itψ,
2
xxψ=ttψ+

ψn+1=(I+iτ2H~)1(Iiτ2H~)ψn
I
Hjk=(H~)jk=22m[δj+1,k+δj1,k2δjkh2]+Vjδjk.
ψψψs=eikx/L
|ψ|2dx
cp=E
c
icx=it
即对流方程,该对流方程没有色散(如果与Lax-Wendroff方法正确集成),则在这种情况下,波包不会随时间扩散。量子类似物是无质量粒子狄拉克方程。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.