La réponse de Kyle Kanos semble être très complète, mais je pensais ajouter ma propre expérience. La méthode de Fourier en plusieurs étapes (SSFM) est extrêmement facile à exécuter et à manipuler; vous pouvez le prototyper dans quelques lignes de Mathematica et il est extrêmement stable numériquement. Cela implique de ne communiquer que des opérateurs unitaires sur votre jeu de données, de sorte qu'il conserve automatiquement la probabilité / puissance (ce dernier si vous résolvez les équations de Maxwell avec elle, c'est là que réside mon expérience). Pour une équation de Schrödinger unidimensionnelle ( variation et uniquement), elle est extrêmement rapide, même en code Mathematica. Et si vous avez besoin d’accélérer les choses, vous n’avez vraiment besoin que d’un bon code FFT dans votre langue cible (mon expérience se situe en C ++).txt
Ce que vous feriez est une version déguisée de la méthode de propagation de faisceau pour la propagation optique à travers un guide d'onde de section transversale variable (analogue aux potentiels variant dans le temps), il serait donc utile de l'examiner également.
La façon dont je regarde le SSFM / BPM est la suivante. Son fondement est la formule du produit Trotter de la théorie de Lie:
limm→∞(exp(Dtm)exp(Vtm))m=exp((D+V)t)(1)
qui est parfois appelé l'équation de fractionnement d'opérateur dans ce contexte. Votre ensemble de données est une grille discrétisée ou de valeurs complexes représentant à un instant donné . Donc, vous imaginez ceci (vous n’avez pas à le faire ; je parle toujours conceptuellement), une énorme grille écrite en tant que vecteur de colonne élément (pour une grille , nous avons ) et votre équation de Schrödinger est donc de la forme:x−yx−y−zψ(x,y,z)tNΨ1024×1024N=10242=1048576
dtΨ=KΨ=(D+V(t))Ψ(2)
où est une matrice - parallèle-hermitienne, un élément de , et va être mappé avec le temps croissant par un élément de celui-ci groupe de paramètres . (J'ai ajouté le facteur dans le de la RHS pour pouvoir parler plus facilement en termes théoriques de Lie). Etant donné la taille de , l'habitat naturel des opérateurs est un groupe de Lie tout à fait colossal, alors PHEW! oui je parle toujours en termes totalement théoriques! Maintenant, qu'est-ce queK=D+VN×Nu(N)Ψexp(Kt)iℏK=D+VNU(N)D+Vressembler? Imaginant encore pour l’instant, il pourrait être considéré comme une version de différences finies de , où représente un potentiel "moyen" commode pour le problème à résoudre.iℏ∇2/(2m)−iℏ−1V0+iℏ−1(V0−V(x,y,z,t0))V0
Nous laissons:
DV==iℏ2m∇2−iℏ−1V0iℏ−1(V0−V(x,y,z,t))(3)
Pourquoi je les ai séparés comme ceci deviendra clair ci-dessous.
Le point à propos de est qu'il peut être élaboré analytiquement pour une onde plane: c'est un simple opérateur de multiplication en coordonnées de moment. Donc, pour , voici les trois premières étapes d’un cycle SSFM / BPM:DΨ↦exp(ΔtD)Ψ
- Transmettez FFT à l'ensemble de données pour le transformer en un ensemble de pondérations de superposition d'ondes planes: les coordonnées de la grille ont été modifiées de à ;ΨΨ~x,y,zkx,ky,kz
- Donnez en multipliant simplement chaque point de la grille par ;Ψ~↦exp(ΔtD)Ψ~exp(iΔt(V0−k2x+k2y+k2z)/ℏ)
Donner une FFT inverse pour mapper notre grille versexp(ΔtD)Ψ
Maintenant, nous sommes de retour dans le domaine de la position. C'est le meilleur domaine à donner à l'opérateur bien sûr: ici, est un opérateur de multiplication simple. Alors voici votre dernière étape de votre cycle algorithmique:VV
Indiquez l'opérateur en multipliant simplement chaque point de la grille par le facteur de phaseΨ↦exp(ΔtV)Ψexp(iΔt(V0−V(x,y,z,t))/ℏ)
.... et alors vous commencez votre prochaine étape et recommencez encore et encore. Il est clair qu'il est très facile de mettre dans le code des potentiels variant dans le temps.ΔtV(x,y,z,t)
Donc, vous voyez que vous choisissez simplement suffisamment petit pour que la formule de Trotter (1) entre en action: vous ne faites que approximer l'action de l'opérateur et vous faites des va-et-vient avec votre FFT entre les coordonnées de position et de moment, c'est-à-dire les domaines où et sont des opérateurs de multiplication simples.Δtexp(D+VΔt)≈exp(DΔt)exp(VΔt)VD
Notez que vous ne communiquez jamais, même dans le monde discrétisé, que des opérateurs unitaires: FFT et facteurs de phase purs.
Vous devez faire attention, par exemple, au fait que votre devient petit, vous devez vous assurer que l’espacement spatial de la grille se réduit également. Sinon, supposons que l'espacement spatial de la grille est . Alors la signification physique de la première étape discrète est que les effets de diffraction se propagent à une vitesse ; lors de la simulation des équations et des guides d'ondes de Maxwell, vous devez vous assurer que cette vitesse est bien inférieure à . Je pense que les limites s’appliquent à l’équation de Schrödinger: je n’ai pas d’expérience directe ici, mais cela semble amusant et vous pourriez peut-être publier vos résultats un jour!ΔtΔxΔx/Δtc
Un deuxième point "d'expérience" avec ce genre de chose - je serais presque prêt à parier que c'est ainsi que vous finirez par suivre vos idées. Nous avons souvent des idées que nous voulons faire des simulations simples, rapides et sales, mais cela ne marche jamais comme ça! Je commencerais par le SSFM comme je l'ai décrit ci-dessus, car il est très facile de fonctionner et vous verrez rapidement si ses résultats sont physiques ou non. Par la suite, vous pourrez utiliser, par exemple, le code Mathematica SSFM pour vérifier les résultats d'un code plus sophistiqué que vous pourriez éventuellement créer, par exemple, un code Crank Nicolson inspiré de la réponse de Kyle Kanos .
Limites d'erreur
La réalisation de la formule de Dynkin du théorème de Baker-Campbell-Hausdorff:
exp(DΔt)exp(V)Δt)=exp((D+V)Δt+12[D,V]Δt2+⋯)
convergeant pour certains montre que la méthode est exacte à la deuxième commande et peut montrer que:
Δt>0
exp(DΔt)exp(V)Δt)exp(−12[D,V]Δt2)=exp((D+V)Δt+O(Δt3))
Vous pouvez donc théoriquement utiliser le terme pour estimer l'erreur et régler votre conséquence. Ce n’est pas aussi simple qu’il en a l’air et, dans la pratique, les limites finissent par être des estimations approximatives de l’erreur. Le problème est que:exp(V)Δt)exp(−12[D,V]Δt2)Δt
Δt22[D,V]=−iΔt22m(∂2xV(x,t)+2∂xV(x,t)∂x)
et il n'y a pas de transformation facile en coordonnées où est un simple opérateur de multiplication. Vous devez donc vous contenter de et utilisez-la pour estimer votre erreur en calculant pour votre en solution en constante évolution et d' utiliser cette option pour définir votre[D,V]exp(−12[D,V]Δt2)≈e−iφΔt2(id−(12[D,V]−iφ(t))Δt2)(id−(12[D,V]−iφ(t))Δt2)ψψ(x,t)Δtà la volée après chaque cycle de l'algorithme. Vous pouvez bien sûr faire de ces idées la base d’un contrôleur pas à pas adaptatif pour votre simulation. Ici est une phase globale tirée de l'ensemble de données afin de minimiser la norme de ; bien sûr, vous pouvez souvent lancer une telle suppression globale: selon ce que vous faites avec les résultats de la simulation, nous ne sommes souvent pas dérangés par une phase constante globale .φ(12[D,V]−iφ(t))Δt2exp(∫φdt)
Un article pertinent sur les erreurs dans le SSFM / BPM est:
Lars Thylén. "La méthode de propagation de faisceau: une analyse de son applicabilité", Optical and Quantum Electronics 15 (1983), pages 433-439 .
Lars Thylén réfléchit aux erreurs théoriques non liées à Lie (les groupes de Lie sont ma tendance, alors j'aime bien en chercher les interprétations), mais ses idées sont essentiellement les mêmes que ci-dessus.