量子轨迹及其与之一起吃的东西

这个小注释是关于如何绘制精美图片的,还有一些关于物理的知识,而关于玻莫夫量子力学的知识很少被提及。



小介绍


正如任何科幻小说和伪科学胡话喜欢告诉我们的,例如电影《秘密》一样,微观世界的定律与我们习惯的经典定律有很大不同。
在量子力学世界中,波动函数给出的概率决定了一切。  psi (例如,那些对细节感兴趣的人可以在文章“从量子化学的角度看Muon催化。第一部分:普通氢与μon氢”中找到 )。
诸如Schrödinger猫海森堡(Heisenberg)的不确定性原理贝尔(Bell)不等式 类的各种有趣事物的腿都是从量子力学的概率性质中成长出来的。

但是所有带有各种电子轨道的图片都没有回答“电子如何在太空中飞行”的问题。 为了弄清这种情况,物理学家花了很多时间,但是无法应付。 但是戴维·波姆David Bohm) (以Aaronov-Bohm效应而为人所熟知 )最终创造了一种量子力学的形式主义(他的名字) ,在量子力学中仍然存在着量子粒子沿其运动的轨迹。 而且,与费曼路径积分不同,每个粒子的该路径恰好是一个。 此属性从根本上允许您跟踪粒子的运动,并比较经典粒子和量子粒子的运动,本文将对此进行介绍。
不仅形式主义
实际上,没有人对形式主义本身特别感兴趣,但是从这种形式主义中,人们可以构造一种量子力学的解释,由于经典力学看似简单,它却受到某些怪胎的爱戴(不多,因为进入这一行业并不容易)。
我们将不讨论这种解释(以及其他解释)。


经典和量子轨迹


我们将考虑一个相当无聊的系统:几个质子场中的一个电子。 您可以在“从量子化学的角度看Muon催化”一文的第一部分和第二部分中了解该系统以及经典力学和量子力学。

牛顿第二定律给出了一定势中粒子运动的经典问题:

m ddotx=F


其中m是粒子质量, x是坐标, F是作用在粒子上的力,并且  ddotx= fracd2xdt2 -粒子的时间或加速度坐标的二阶导数。 如果只有势力在系统中起作用,则该力可以通过一个新实体表示,势能V

F= fracdVdx


在我们的例子中,在几个质子场中的电子

电子根据库仑定律与每个质子相互作用

VR=ke2/R

,其中k是原子单位等于1的系数, e是电子电荷, R是从电子到质子的距离。
在这种情况下,作用在电子上的总电势等于

V= sumNn=1VnRn= sumNn=1 frackee2Rn\,


其中索引n表示质子(总共N个质子), R n是从电子到第n个质子的距离。

数值求解微分是牛顿的第二定律,这是一项艰巨的任务,主要是设定初始位置和速度。 如果电子飞得太快,它将脱离质子的吸引力并飞向无穷大,如果只有一点能量,它将永远在一个原子核的场中颤动,永远不会访问另一个原子核。
辐射摩擦
如果考虑到辐射摩擦 ,该辐射摩擦是由于以下事实而发生的:当加速运动时,电子会将一部分能量提供给电磁场,将其发射到某个地方,那么电子最终将在一段时间内滚动到原子核上。

我们知道经典中发生了什么。

但是Bomov动力学会发生什么?
在这种情况下,粒子还将根据牛顿第二定律运动, V=V mathrmC+V mathrmQ 在哪里 V mathrmC -普通牛顿定律的经典潜能,在我们的情况下具有上面给出的形式。
即 除了经典势能之外,另一个实体将对其起作用: 量子势能 V mathrmQ 具有(在一维情况下)表格

V mathrmQ= frac hbar22mA fracd2Adx2


其中A是波动函数的振幅(模数) A=| psi| psi=A expi varphi 在哪里  varphi -波动函数的相位)。
因此,要获得量子粒子的运动方程,我们仍然需要了解一些有关波函数的知识。
关于隐藏选项
鲍姆的形式主义是具有隐藏参数的理论。 但是由于隐藏参数(波动函数)是非局部的,因此这种形式主义的计算结果仍然满足Bell的上述不等式。


对于一个质子,我们知道(例如, 在这里 )电子波函数在基态(1s)中的精确表示( 以原子单位表示 ):

 psiR= expR


关于规范化和单位
在量子势的公式中,分子的归一化将随着分母而减少,因此我们不必担心。
指数的论点实际上是不值得的 RR/a0 在哪里 a0 是玻尔半径(0.529Å)。 但是,由于我们使用原子单位,因此 a0=1 ,这个长度单位我们负担不起写。 您可以在此处了解更多信息。

在多个质子的情况下,在分子轨道方法的框架中,作为原子轨道的组合( MO LKAO ,请参见此处 ),每个原子的1s轨道之和将给出具有足够精确度的基态:

 psi\大 sumNn=1 psinRn= sumNn=1 expRn


现在,要找出量子势,您只需要使用此表达式。
<s> d </ s>
功能介绍  psi 因为1s轨道的总和是实数,因此 A=\磅
由于电子可以在三个维度上移动,因此需要一维导数 Axx= fracd2Adx2 用其三维概括代替:  DeltaA=Axx+Ayy+Azz 。 操作员 \三 可以表示为运算符nabla的平方:  Delta= nabla2 。 您也可以想象距离 Rn 怎么 Rn= sqrt mathbfR2n 在哪里  mathbfRn 是电子相对于第n个质子的半径向量。

然后

 DeltaA= nabla2 psi= sumNn=1 nabla2 psinRn


一阶导数被认为是容易的:

 nabla psinRn= nabla expRn= expRn cdot1 cdot frac12 underbrace sqrt mathbfR2nRn cdot2 mathbfRn= expRn cdot frac mathbfRnRn


二阶导数已经有些复杂了:

 nabla nabla expRn= frac mathbfRnRn nabla expRn expRn nabla frac mathbfRnRn= expRn frac2 expRnRn


在哪里  frac mathbfRnRn nabla expRn= expRn cdot underbrace\左 frac mathbfRnRn right21= expRn
 expRn nabla frac mathbfRnRn= expRn cdot left frac overbrace nabla mathbfRn3Rn frac2 mathbfR2n2R3n right= frac2 expRnRn
结果仍然是:
 Delta psi= overbrace sumNn=1 expRn psi sumNn=1 frac2 expRnRn
一切都分成  psi=A 并乘以  frac hbar22m
我们得到
V mathrmQ= frac hbar22m\左1 sumNn=1 frac2 expRnRn right
在分化过程中获得力量的单位将消失,因此您可以放心地只剩下第二个学期。

结果,我们可以将量子势记为

V mathrmQ\大 frac hbar2m sumNn=1 frac expRnRn


有了这个表达式,我们已经可以驱动许多质子场中电子的波姆动力学。

实作


对于所有这些耻辱,代码都是用python编写的,可以在这里找到:
Python代码
from math import * import numpy as np cutoff=5.0e-4 Quantum=True def dist(r1,r2): return np.dot((r1-r2), (r1-r2)) def Vc(r, r0): if dist(r, r0)>=cutoff: return -1.0/dist(r, r0) else: return -1.0/cutoff rH=[] #h1 #rH.append(np.array([ 0.0, 0.0, 0.0])) #h2 rH.append(np.array([-1.0, 0.0, 0.0])) rH.append(np.array([+1.0, 0.0, 0.0])) def Vat(r): V=0.0 for rh in rH: V+=Vc(r,rh) return V def PsiA(r): psi=0.0 for rh in rH: if dist(r, rh)<1.0e3: psi+=np.exp(-dist(r, rh)) return psi def Vq(r): vq=0.0 for rh in rH: if dist(r, rh)>=cutoff: vq-=2.0*np.exp(-dist(r, rh))/dist(r, rh) else: vq-=2.0*np.exp(-cutoff)/cutoff vq*=(-0.5) # -0.5*hbar**2/me return vq def GradF(F, r): grad=np.zeros(3) dx=0.1 for i in range(0,3): dr=np.zeros(3) dr[i]=dx #print(dr) #print(F(r+dr)-F(r-dr)) grad[i]+=(F(r+dr)-F(r-dr))/(2.*dx) return grad dt=0.001 tmax=2.0e1 DR=1.0 dx=0.001 MaxR=10.0 t=0.0 cent=np.zeros(3) Ntrj=30 m=1.0 def GenRvBox(DX): return np.random.uniform(-DX,+DX,3) def GenRvSph(DX): r=np.random.uniform(0.0,DX) phi=np.random.uniform(0.0,2.0*np.pi) theta=np.random.uniform(0.0,np.pi) x=r*np.sin(theta)*np.cos(phi) y=r*np.sin(theta)*np.sin(phi) z=r*np.cos(theta) return np.array([x,y,z]) for ntrj in range(0,Ntrj): if Quantum: outf=open("bmd_%05i" % (ntrj) + ".trj", "w") else: outf=open("cmd_%05i" % (ntrj) + ".trj", "w") nat=np.random.randint(0,len(rH)) r=rH[nat]+GenRvSph(DR) rprev=r+GenRvBox(dx) outf.write("%15.10f %15.10f %15.10f\n" % tuple(r)) t=0.0 while t<=tmax and dist(r,cent)<=MaxR: F= -GradF(Vat, r) if Quantum: F-= GradF(Vq, r) rnew= 2.*r - rprev + (F/m)*dt**2 rprev=r r=rnew outf.write("%15.10f %15.10f %15.10f\n" % tuple(r)) t+=dt outf.close() exit() 


我们将只讨论几点。
牛顿第二定律是使用Verlet算法集成

xt+ Deltat=2xtxt Deltat+ fracFtm Deltat2


通过随机选择一个质子来生成初始位置,并在其周围随机选择方向(使用球坐标)。 要设置初始速度,您需要设置另一个先前的位置。 使用另一个小的随机向量选择它。

打开/关闭量子势,我们切换到量子/经典运动模式。

好了,那么您可以使用Gnuplot为氢原子生成精美的图片

对于分子H 2 +


如您所见,经典轨迹(上部,蓝色)要么非常局限,要么,如果电子被迫太快地移动,则其逃离原子核。 在量子情况下(较低的粉红色),量子势能使电子显着离开原子核,而在H2 +分子的情况下,它使您可以从一个质子移动到另一个质子,这是化学键的间接可视化。

关于构建图片的几句话:要创建霓虹灯效果,每条路径都要经过多次绘制,从稀薄的白色到浓密的黑色,穿过感兴趣的颜色的阴影。 为了方便选择这样的调色板,您可以例如使用网站https://www.color-hex.com/
下面给出了一个示例脚本。
Gnuplot的脚本
unset key
set xyplane relative 0

unset box

set view map

set size ratio -1

unset border
unset xtics
unset ytics

set terminal pngcairo size 2160,4096 backgr rgb "black"
set output "tmp.png"

yshift=-5.0
maxiC=29
maxiQ=29
splot \
for [i=0:maxiC] sprintf("cmd_%05i.trj", i) wl lw 30.0 lc rgb "#030d19" not,\
for [i=0:maxiC] sprintf("cmd_%05i.trj", i) wl lw 18.0 lc rgb "#071b33" not,\
for [i=0:maxiC] sprintf("cmd_%05i.trj", i) wl lw 17.0 lc rgb "#0a294c" not,\
for [i=0:maxiC] sprintf("cmd_%05i.trj", i) wl lw 16.0 lc rgb "#0e3766" not,\
for [i=0:maxiC] sprintf("cmd_%05i.trj", i) wl lw 15.0 lc rgb "#11457f" not,\
for [i=0:maxiC] sprintf("cmd_%05i.trj", i) wl lw 14.0 lc rgb "#155399" not,\
for [i=0:maxiC] sprintf("cmd_%05i.trj", i) wl lw 13.0 lc rgb "#1861b2" not,\
for [i=0:maxiC] sprintf("cmd_%05i.trj", i) wl lw 12.0 lc rgb "#1c6fcc" not,\
for [i=0:maxiC] sprintf("cmd_%05i.trj", i) wl lw 11.0 lc rgb "#1f7de5" not,\
for [i=0:maxiC] sprintf("cmd_%05i.trj", i) wl lw 10.0 lc rgb "#238bff" not,\
for [i=0:maxiC] sprintf("cmd_%05i.trj", i) wl lw 9.0 lc rgb "#3896ff" not,\
for [i=0:maxiC] sprintf("cmd_%05i.trj", i) wl lw 8. lc rgb "#4ea2ff" not,\
for [i=0:maxiC] sprintf("cmd_%05i.trj", i) wl lw 7. lc rgb "#65adff" not,\
for [i=0:maxiC] sprintf("cmd_%05i.trj", i) wl lw 6. lc rgb "#7bb9ff" not,\
for [i=0:maxiC] sprintf("cmd_%05i.trj", i) wl lw 5. lc rgb "#91c5ff" not,\
for [i=0:maxiC] sprintf("cmd_%05i.trj", i) wl lw 4. lc rgb "#a7d0ff" not,\
for [i=0:maxiC] sprintf("cmd_%05i.trj", i) wl lw 3. lc rgb "#bddcff" not,\
for [i=0:maxiC] sprintf("cmd_%05i.trj", i) wl lw 2. lc rgb "#d3e7ff" not,\
for [i=0:maxiC] sprintf("cmd_%05i.trj", i) wl lw 1. lc rgb "#e9f3ff" not,\
for [i=0:maxiC] sprintf("cmd_%05i.trj", i) wl lw 0.5 lc rgb "#ffffff" not,\
for [i=0:maxiQ] sprintf("bmd_%05i.trj", i) u 1:($2+yshift):3 wl lw 30.0 lc rgb "#190613" not,\
for [i=0:maxiQ] sprintf("bmd_%05i.trj", i) u 1:($2+yshift):3 wl lw 18.0 lc rgb "#330c27" not,\
for [i=0:maxiQ] sprintf("bmd_%05i.trj", i) u 1:($2+yshift):3 wl lw 17.0 lc rgb "#4c123b" not,\
for [i=0:maxiQ] sprintf("bmd_%05i.trj", i) u 1:($2+yshift):3 wl lw 16.0 lc rgb "#66184f" not,\
for [i=0:maxiQ] sprintf("bmd_%05i.trj", i) u 1:($2+yshift):3 wl lw 15.0 lc rgb "#7f1e63" not,\
for [i=0:maxiQ] sprintf("bmd_%05i.trj", i) u 1:($2+yshift):3 wl lw 14.0 lc rgb "#992476" not,\
for [i=0:maxiQ] sprintf("bmd_%05i.trj", i) u 1:($2+yshift):3 wl lw 13.0 lc rgb "#b22a8a" not,\
for [i=0:maxiQ] sprintf("bmd_%05i.trj", i) u 1:($2+yshift):3 wl lw 12.0 lc rgb "#cc309e" not,\
for [i=0:maxiQ] sprintf("bmd_%05i.trj", i) u 1:($2+yshift):3 wl lw 11.0 lc rgb "#e536b2" not,\
for [i=0:maxiQ] sprintf("bmd_%05i.trj", i) u 1:($2+yshift):3 wl lw 10.0 lc rgb "#ff3dc6" not,\
for [i=0:maxiQ] sprintf("bmd_%05i.trj", i) u 1:($2+yshift):3 wl lw 9.0 lc rgb "#ff50cb" not,\
for [i=0:maxiQ] sprintf("bmd_%05i.trj", i) u 1:($2+yshift):3 wl lw 8. lc rgb "#ff63d1" not,\
for [i=0:maxiQ] sprintf("bmd_%05i.trj", i) u 1:($2+yshift):3 wl lw 7. lc rgb "#ff77d7" not,\
for [i=0:maxiQ] sprintf("bmd_%05i.trj", i) u 1:($2+yshift):3 wl lw 6. lc rgb "#ff8adc" not,\
for [i=0:maxiQ] sprintf("bmd_%05i.trj", i) u 1:($2+yshift):3 wl lw 5. lc rgb "#ff9ee2" not,\
for [i=0:maxiQ] sprintf("bmd_%05i.trj", i) u 1:($2+yshift):3 wl lw 4. lc rgb "#ffb1e8" not,\
for [i=0:maxiQ] sprintf("bmd_%05i.trj", i) u 1:($2+yshift):3 wl lw 3. lc rgb "#ffc4ed" not,\
for [i=0:maxiQ] sprintf("bmd_%05i.trj", i) u 1:($2+yshift):3 wl lw 2. lc rgb "#ffd8f3" not,\
for [i=0:maxiQ] sprintf("bmd_%05i.trj", i) u 1:($2+yshift):3 wl lw 1. lc rgb "#ffebf9" not,\
for [i=0:maxiQ] sprintf("bmd_%05i.trj", i) u 1:($2+yshift):3 wl lw 0.5 lc rgb "#ffffff" not



结论


Bomov轨迹虽然难以理解和计算,但您可以绘制出精美的图片,这些图片显示出比经典力学更有趣,更丰富的东西。

如果您有意见,问题或建议:请写。 :)

Source: https://habr.com/ru/post/zh-CN476948/


All Articles