Salut et merci d'avoir donné le temps de regarder ma question. Ceci est une version mise à jour de ma question que j'ai publiée plus tôt dans physics.stackexchange.com
J'étudie actuellement un condensateur à excitons 2D Bose-Einstein Condensate et je suis curieux de connaître l'état fondamental de ce système. La méthode mathématique pour atteindre l'état fondamental est appelée la méthode du temps imaginaire .
La méthode est très simple où le temps en mécanique quantique est remplacé par un temps imaginaire Cette substitution fait que les particules de haute énergie de mon système se désintègrent plus rapidement que celles de basse énergie. En re-normalisant le nombre de particules à chaque étape du calcul, nous nous retrouvons avec un système de particules de plus faible énergie, alias. l'état fondamental.
La ou les équations en question sont non linéaires, appelées équations de Schrödinger non linéaires , parfois équation de Gross-Pitaevskii . Pour résoudre le problème, j'utilise Matlabs ode45 qui fait évoluer le système vers l'avant dans le temps et atteint finalement l'état fondamental.
- Remarque! L'équation de Schrödinger non linéaire inclut le laplacien et quelques autres termes différentiels dans l'espace. Tout cela est résolu en utilisant une transformée de Fourier rapide. Au final nous n'avons qu'un temps ODE. *
Mon problème et ma question: les calculs vont de à . L'ode45 est placé dans une boucle for afin qu'il ne calcule pas un vecteur géant en même temps. Le premier tour commencerait par ode45 (odefun, ) et continuerait la prochaine fois à partir de . Ici, le pas de temps est mon problème. Différents choix dans les pas de temps me donnent différentes solutions d'état fondamental et je n'ai aucune idée comment déterminer quel pas de temps me donne l'état fondamental "le plus" correct!t f [ t 0 , … , t f ] [ t 0 , t 0 + Δ / 2 , t 0 + Δ ] , y , … t 0 + Δ Δ
Ma tentative: je me rends compte que dans ce schéma, de grands pas de temps entraîneront la décomposition d'un grand nombre de particules avant d'être re-normalisé au nombre de particules d'origine tandis que de petits pas de temps entraîneront une plus petite quantité de particules à se désintégrer avant de se normaliser. Ma pensée initiale est que de petits pas de temps devraient donner une solution plus précise, mais il semble que ce soit le contraire.
Je ne suis pas un expert en numérique, le choix de l'ode45 était donc tout simplement arbitraire. ode113 me donne la même chose. :(
Quelqu'un a-t-il des réflexions à ce sujet? Faites-moi savoir si des détails supplémentaires sont nécessaires.
Je vous remercie.
Mise à jour 1: j'ai fait des recherches sur la méthode du temps imaginaire et les ODE. Il semblerait que si le pas de temps n'est pas assez petit, le tout devient instable. Cela me fait me demander si mes équations non linéaires sont rigides, ce qui rend les choses beaucoup plus difficiles d'après ce que je comprends. Je vous tiens au courant.
Mise à jour 2: FIXE: Le problème était en effet d'avoir la normalisation en dehors de l'ODE. Si la normalisation est conservée à l'intérieur d'odefun, l'ODE retourne le même résultat pour différents choix de pas de temps "extérieurs". Mon collègue m'a montré des codes plus anciens et j'ai simplement ajouté une ligne dans mon odefun.
function y_out = odefun(t,y_in,...variables...)
...
[ Nonlinear equations evaluated ]
...
y_out = y_out + 0.1*y_in*(N0-Ntemp) ;
end
La dernière ligne calcule la différence entre le nombre actuel de particules (Ntemp) et le nombre de particules que le système doit contenir (N0). Il ajoute une partie des particules à la sortie et crée ainsi une stabilité totale du nombre de particules dans le système au lieu de les éliminer toutes.
Je vais également poser une nouvelle question concernant la dimensionnalité du problème et certaines différences dans le travail avec des picosecondes ou des nanosecondes comme pas de temps dans l'ODE.
Merci à tous. :)
ode45()
qui vous permettrait de conserver des étapes supérieures à un certain seuil; vous voudrez peut-être examiner cela.
ode45()
pour prendre des étapes équidistantes. Pourquoi, précisément, évitez-vous la génération du "vecteur géant"? Si vous avez absolument besoin de points espacés,ode45()
procédez comme d'habitude, puis utilisez l'interpolation.