La respuesta de Kyle Kanos parece ser muy completa, pero pensé en agregar mi propia experiencia. El método de Fourier de pasos divididos (SSFM) es extremadamente fácil de ejecutar y manipular; puede crear un prototipo en algunas líneas de Mathematica y es extremadamente estable numéricamente. Implica impartir solo operadores unitarios en su conjunto de datos, por lo que conserva automáticamente la probabilidad / potencia (esto último si está resolviendo las ecuaciones de Maxwell con él, que es donde radica mi experiencia). Para una ecuación de Schrödinger unidimensional (es decir, solo variación de y ), es extremadamente rápida incluso como código de Mathematica. Y si necesita acelerarlo, realmente solo necesita un buen código FFT en su idioma de destino (mi experiencia radica en C ++).tXt
Lo que estaría haciendo es una versión encubierta del Método de propagación del haz para la propagación óptica a través de una guía de onda de sección transversal variable (análoga a potenciales variables en el tiempo), por lo que sería útil buscar esto también.
La forma en que miro el SSFM / BPM es la siguiente. Su fundamento es la fórmula del producto Trotter de la teoría de Lie:
limm → ∞( exp( Dtmetro)exp( Vtmetro) )metro= exp( ( D + V) t )(1)
que a veces se llama la ecuación de división del operador en este contexto. Su conjunto de datos es una cuadrícula discreta o de valores complejos que representa en un momento dado . Entonces imaginas esto (no tienes que hacer esto; todavía estoy hablando conceptualmente) una cuadrícula enorme escrita como un vector de columna de elemento (para una cuadrícula tenemos ) y luego su ecuación de Schrödinger tiene la forma:x - yx - y- zψ ( x , y, z)tnorteΨ1024 × 1024norte= 10242= 1048576
retΨ = KΨ = ( D + V( t ) ) Ψ(2)
donde es una matriz oblicua-hermitiana , un elemento de , y va a ser mapeado con un tiempo creciente por un elemento grupo de parámetros . (He absorbido el factor en en el RHS para poder hablar más fácilmente en términos teóricos de Lie). Dado el tamaño de , el hábitat natural de los operadores es un grupo de Lie completamente colosal, ¡así que PHEW! Sí, todavía estoy hablando en términos totalmente teóricos. Ahora, ¿qué significaK= D + Vnorte× Nu (N)Ψexp( Kt )yo ℏK= D + VnorteU( N)D + V¿parece? Todavía imaginando por ahora, podría considerarse como una versión de diferencia finita de , donde es un potencial "medio" conveniente para el problema en cuestión.yoℏ∇2/ (2m ) - i ℏ- 1V0 0+ i ℏ- 1( V0 0- V( x , y, z, t0 0) )V0 0
Dejamos:
reV==yo ℏ2metro∇2- yo ℏ- 1V0 0yo ℏ- 1( V0 0- V( x , y, z, t ) )(3)
Por qué los he dividido así quedará claro a continuación.
El punto sobre es que puede calcularse analíticamente para una onda plana: es un simple operador de multiplicación en coordenadas de momento. Entonces, para resolver , estos son los primeros tres pasos de un ciclo SSFM / BPM:reΨ ↦ exp( Δ tD )Ψ
- Impartir FFT al conjunto de datos para transformarlo en un conjunto de pesos de superposición de ondas planas: ahora las coordenadas de la cuadrícula se han cambiado de a ;ΨΨ~x ,y,zkX,ky,kz
- Impartir simplemente multiplicando cada punto en la cuadrícula por ;Ψ~↦ exp( Δ tD ) Ψ~exp( iΔ t ( V0 0- k2X+ k2y+ k2z) / ℏ)
Impartir FFT inversa para asignar nuestra cuadrícula de nuevo aexp( Δ tD ) Ψ
. Ahora estamos de vuelta en el dominio de posición. Este es el mejor dominio para impartir el operador por supuesto: aquí es un simple operador de multiplicación. Así que aquí está tu último paso de tu ciclo algorítmico:VV
Impartir el operador simplemente multiplicando cada punto de la cuadrícula por el factor de faseΨ ↦ exp( Δ tV) Ψexp( iΔ t( V0 0- V( x , y, z, t ) ) / ℏ)
.... y luego comienza su próximo paso y realiza un ciclo una y otra vez. Claramente, es muy fácil poner potenciales de tiempo variable en el código.Δ tV( x , y, z, t )
Entonces verá que simplemente elige suficientemente pequeño como para que la fórmula Trotter (1) entre en acción: simplemente está aproximando la acción del operador y usted va y viene con su FFT entre las coordenadas de posición y momento, es decir, los dominios donde y son simples operadores de multiplicación.Δ texp( D + VΔ t ) ≈ exp( DΔ t )exp( VΔ t )Vre
Tenga en cuenta que solo está impartiendo, incluso en el mundo discreto, operadores unitarios: FFT y factores de fase pura.
Un punto que debe tener cuidado es que a medida que su vuelve pequeña, debe asegurarse de que el espaciado de la cuadrícula espacial también se reduzca. De lo contrario, suponga que el espaciado de la cuadrícula espacial es . Entonces, el significado físico del único paso discreto es que los efectos de difracción viajan a una velocidad ; Al simular las ecuaciones y guías de onda de Maxwell, debe asegurarse de que esta velocidad sea mucho menor que . Me atrevo a decir que los límites se aplican a la ecuación de Schrödinger: no tengo experiencia directa aquí, pero suena divertido y tal vez podrías publicar tus resultados en algún momento.Δ tΔ xΔ x / Δ tdo
Un segundo punto de "experiencia" con este tipo de cosas: estaría casi dispuesto a apostar que así es como terminará siguiendo sus ideas. A menudo tenemos ideas de que queremos hacer simulaciones simples, rápidas y sucias, ¡pero nunca funciona así! Comenzaría con el SSFM como describí anteriormente, ya que es muy fácil de ejecutar y verá rápidamente si sus resultados son físicos o no. Más adelante puede usar su código de Mathematica SSFM, verifique los resultados de un código más sofisticado que podría terminar construyendo, digamos, un código de Crank Nicolson en la línea de la respuesta de Kyle Kanos .
Límites de error
La realización de la fórmula Dynkin del teorema de Baker-Campbell-Hausdorff:
exp( D Δ t )exp(V) Δ t ) = exp( ( D +V) Δ t + 12[ D ,V]Δ t2+ ⋯ )
convergentes para algunos muestra que el método es exacto a segundo orden y puede mostrar que:
Δ t > 0
exp( D Δ t)exp( V) Δ t )exp( - 12[ D ,V]Δ t2) =exp( ( D + V) Δ t + O ( Δ t3) )
En teoría, puede usar el término para estimar el error y establecer su consecuencia. Esto no es tan fácil como parece y en la práctica los límites terminan siendo estimaciones aproximadas del error. El problema es ese:exp( V) Δ t )exp( - 12[ D ,V]Δ t2)Δ t
Δ t22[ D ,V] = - iΔ t22metro( ∂2XV( x,t ) + 2 ∂XV( x ,t )∂X)
y no se transforman fácilmente en coordenadas en las que es un simple operador de multiplicación. Por lo tanto, debe contentarse con y use esto para estimar su error, trabajando para su solución en evolución actual y usar esto para configurar su[ D ,V]exp( - 12[ D ,V]Δ t2) ≈ e- yoφΔ t2( i d - ( 12[ D ,V]- yoφ ( t ) )Δ t2)( i d - ( 12[ D ,V]- yoφ ( t ) )Δ t2)ψψ ( x ,t )Δ tsobre la marcha después de cada ciclo del algoritmo. Por supuesto, puede hacer que estas ideas sean la base de un controlador adaptativo de pasos para su simulación. Aquí es una fase global extraída del conjunto de datos para minimizar la norma de ; por supuesto, a menudo puede eliminar esa eliminación global: dependiendo de lo que esté haciendo con los resultados de la simulación, a menudo no nos molesta una fase constante global .φ( 12[ D ,V]- yoφ ( t ) )Δ t2exp( ∫φd t )
Un documento relevante sobre errores en el SSFM / BPM es:
Lars Thylén. "El método de propagación del haz: un análisis de su aplicabilidad", Optical and Quantum Electronics 15 (1983) pp433-439 .
Lars Thylén piensa en los errores en términos teóricos que no son de Lie (los grupos de Lie son mi inclinación, por lo que me gusta buscar interpretaciones de ellos) pero sus ideas son esencialmente las mismas que las anteriores.