Trayectorias cuánticas y con qué comen

Esta pequeña nota trata sobre cómo dibujar imágenes hermosas, bueno, un poco sobre física, de la que rara vez se habla, sobre la mecánica cuántica de Bomov.



Pequeña introducción


Como le gusta decirnos a cualquier ciencia ficción y sin sentido pseudocientífico, como la película El secreto, las leyes del micromundo son muy diferentes de las clásicas a las que estamos acostumbrados.
En el mundo de la mecánica cuántica, la probabilidad dada por la función de onda rige todo.  psi (los interesados ​​en los detalles pueden ver, por ejemplo, en la publicación "Catálisis de muones desde el punto de vista de la química cuántica. Parte I: hidrógeno ordinario versus hidrógeno de muones" ).
Las piernas de todo tipo de cosas divertidas, como los gatos Schrödinger , los principios de incertidumbre de Heisenberg y las desigualdades de Bell, surgen de las propiedades probabilísticas de un quantummech.

Pero todas estas imágenes con todo tipo de orbitales de electrones no respondieron a la pregunta "¿cómo vuela un electrón en el espacio". Para aclarar esta situación, los físicos pasaron mucho tiempo, pero no pudieron hacer frente. Pero David Bohm (conocido por muchos por el efecto Aaronov-Bohm ) finalmente creó uno de los formalismos de la mecánica cuántica (nombre de sí mismo) , en el que todavía hay trayectorias a lo largo de las cuales se mueve la partícula cuántica. Y, a diferencia de las integrales de la ruta de Feynman , esta ruta para cada partícula es exactamente una. Esta propiedad fundamentalmente le permite rastrear el movimiento de partículas y comparar el movimiento de partículas clásicas y cuánticas, que trataremos en este artículo.
no solo formalismo
En realidad, nadie está particularmente interesado en el formalismo en sí, pero a partir de este formalismo se puede construir una de las interpretaciones de la mecánica cuántica, que, debido a la aparente simplicidad de la mecánica clásica, algunos fanáticos adoran (no muchos, porque entrar en este negocio no es muy simple).
No discutiremos esta interpretación (así como otras).


Trayectorias clásicas y cuánticas.


Consideraremos un sistema bastante aburrido: un electrón en el campo de varios protones. Puede leer sobre este sistema, así como sobre la mecánica clásica y cuántica en la primera y segunda parte de las publicaciones "Catálisis de muones desde el punto de vista de la química cuántica".

El problema clásico del movimiento de partículas en cierto potencial viene dado por la segunda ley de Newton:

m ddotx=F


donde m es la masa de partículas, x es la coordenada, F es la fuerza que actúa sobre la partícula y  ddotx= fracd2xdt2 - la segunda derivada de la coordenada de la partícula en el tiempo, o aceleración. Si solo actúan fuerzas potenciales en el sistema, entonces la fuerza se puede expresar a través de una nueva entidad, la energía potencial V como

F= fracdVdx


En nuestro caso, un electrón en el campo de varios protones,

donde el electrón interactúa con cada uno de los protones de acuerdo con la ley de Coulomb

V(R)=ke2/R

, donde k es un coeficiente igual a 1 en unidades atómicas, e es la carga de electrones, y R es la distancia del electrón al protón.
En este caso, el potencial total que actúa sobre el electrón será igual a

V= sumNn=1Vn(Rn)= sumNn=1 fracke2Rn


donde el índice n numera los protones (protones totales N piezas), y R n es la distancia desde el electrón hasta el enésimo protón.

Resolver numéricamente la diferencia, que es la segunda ley de Newton, es una tarea trillada, lo principal es establecer la posición inicial y la velocidad. Si el electrón vuela demasiado rápido, saldrá de la atracción de los protones y volará al infinito, y si solo hay un poco de energía, revoloteará para siempre en el campo de uno de los núcleos, sin visitar nunca a los demás.
Fricción radiante
Si tomáramos en cuenta la fricción radiante , que ocurre debido al hecho de que al moverse con aceleración, el electrón daría parte de su energía al campo electromagnético, emitiéndolo en algún lugar, luego el electrón eventualmente rodaría sobre el núcleo en algún momento.

Entonces, lo que sucede en los clásicos, lo sabemos.

Pero, ¿qué pasará en la dinámica de Bomov?
En este caso, la partícula también se moverá de acuerdo con la segunda ley de Newton con potencial V=V mathrmC+V mathrmQ donde V mathrmC - el potencial clásico de la ley de Newton habitual, que en nuestro caso tiene la forma dada anteriormente.
Es decir Además del potencial clásico, otra entidad actuará sobre él: el potencial cuántico V mathrmQ tener (en el caso 1D) la forma

V mathrmQ= frac hbar22mA fracd2Adx2


donde A es la amplitud (módulo) de la función de onda A=| psi| (  psi=A exp(i varphi) donde  varphi - fase de la función de onda).
Entonces, para obtener la ecuación de movimiento de una partícula cuántica, aún necesitamos saber algo sobre la función de onda.
Sobre opciones ocultas
El formalismo de Bohm es una teoría con parámetros ocultos. Pero dado que el parámetro oculto (función de onda) no es local, los resultados del cálculo en este formalismo aún satisfacen las desigualdades mencionadas por Bell.


En el caso de un protón, sabemos (ver, por ejemplo, aquí ) la expresión exacta de la función de onda de electrones en el estado fundamental (1s) [ en unidades atómicas ]:

 psi(R)= exp(R)


Sobre normalización y unidades
En la fórmula para el potencial cuántico, la normalización del numerador se reducirá con el denominador, por lo que no nos preocuparemos.
El argumento del exponente, de hecho, no vale R y R/a0 donde a0 Es el radio de Bohr (0.529 Å). Pero, dado que usamos unidades atómicas, donde a0=1 , esta unidad de longitud nos podemos permitir no escribir. Puedes leer más sobre esto aquí .

En el caso de varios protones, en el marco del método de los orbitales moleculares como combinaciones de orbitales atómicos ( MO LKAO , ver aquí ), el estado fundamental con un grado suficiente de precisión estará dado por la suma de los orbitales 1s de cada uno de los átomos:

 psi approx sumNn=1 psin(Rn)= sumNn=1 exp(Rn)


Ahora, para descubrir el potencial cuántico, solo necesita usar esta expresión.
Bueno <s> d </s>
Función  psi como la suma de los orbitales 1s es real, por lo tanto A= psi .
Como un electrón puede moverse en tres dimensiones, se necesita una derivada unidimensional Axx= fracd2Adx2 reemplazar con su generalización tridimensional:  DeltaA=Axx+Aaa+Azz . Operador  Delta se puede representar como el cuadrado del operador nabla :  Delta= nabla2 . También puedes imaginar la distancia Rn como Rn= sqrt mathbfR2n donde  mathbfRn Es el vector de radio del electrón en relación con el enésimo protón.

Entonces

 DeltaA= nabla2 psi= sumNn=1 nabla2 psin(Rn)


La primera derivada se considera fácil:

 nabla psin(Rn)= nabla exp(Rn)= exp(Rn) cdot(1) cdot frac12 underbrace sqrt mathbfR2nRn cdot2 mathbfRn= exp(Rn) cdot frac mathbfRnRn


La segunda derivada ya es algo más complicada:

 nabla( nabla exp(Rn))= frac mathbfRnRn nabla exp(Rn) exp(Rn) nabla frac mathbfRnRn= exp(Rn) frac2 exp(Rn)Rn


donde  frac mathbfRnRn nabla exp(Rn)= exp(Rn) cdot underbrace left( frac mathbfRnRn right)21= exp(Rn) y
 exp(Rn) nabla frac mathbfRnRn= exp(Rn) cdot left( frac overbrace nabla mathbfRn3Rn frac2 mathbfR2n2R3n right)= frac2 exp(Rn)Rn .
El resultado sigue siendo:
 Delta psi= overbrace sumNn=1 exp(Rn) psi sumNn=1 frac2 exp(Rn)Rn
Dividiendo todo en  psi=A y multiplicando por  frac hbar22m
tenemos
V mathrmQ= frac hbar22m left(1 sumNn=1 frac2 exp(Rn)Rn right)
La unidad durante la diferenciación para obtener fuerza desaparecerá, por lo que solo puede salir con seguridad el segundo término.

Como resultado, podemos escribir nuestro potencial cuántico como

V mathrmQ approx frac hbar2m sumNn=1 frac exp(Rn)Rn


y con esta expresión ya podemos conducir la dinámica de Bohm de un electrón en el campo de muchos protones.

Implementación


Por toda esta desgracia, el código fue escrito en python, está disponible aquí:
Código de 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() 


Solo discutiremos algunos puntos.
La segunda ley de Newton se integra utilizando el algoritmo Verlet :

x(t+ Deltat)=2x(t)x(t Deltat)+ fracF(t)m Deltat2


La posición inicial se genera seleccionando aleatoriamente uno de los protones, se selecciona aleatoriamente una dirección a su alrededor (utilizando coordenadas esféricas). Para establecer la velocidad inicial, debe establecer otra posición anterior. Se selecciona usando otro pequeño vector aleatorio.

Al activar / desactivar el potencial cuántico, cambiamos a modos de movimiento cuántico / clásico.

Bueno, entonces, puedes construir bellas imágenes usando Gnuplot para el átomo de hidrógeno

y para la molécula H2 +


Como puede ver, las trayectorias clásicas (superior, azul) están muy localizadas o, si el electrón se ve obligado a moverse demasiado rápido, huyen de los núcleos. En el caso cuántico (inferior, rosa), el potencial cuántico permite que los electrones caminen significativamente más lejos del núcleo, y en el caso de la molécula H2 + , le permite correr de un protón a otro, que es una visualización indirecta de enlaces químicos.

Algunas palabras sobre la creación de imágenes: para crear un efecto de neón, cada trazado se dibuja muchas veces, desde el blanco delgado al negro grueso, a través de las sombras del color de interés. Para la conveniencia de elegir dicha paleta, puede, por ejemplo, usar el sitio https://www.color-hex.com/
Un script de ejemplo se da a continuación.
Guión para 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



Conclusión


Las trayectorias de Bomov, aunque difíciles de entender y calcular, le permiten dibujar imágenes hermosas que muestran cuánto más divertido y más rico que la mecánica clásica.

Si tiene comentarios, preguntas, sugerencias: escriba. :)

Source: https://habr.com/ru/post/476948/


All Articles