Nous allons résoudre cette fois l'équation de Schrödinger indépendante du temps:

Cette équation peut être discrétisée comme

Les équations obtenues pour i allant de 1 à N-1 peuvent alors se mettre sous la forme matricielle


Nous allons calculer les états liés du potentiel harmonique


Les niveaux d'énergie sont-ils en accord avec la formule

Comment expliquez-vous la différence avec le résultat précédent ?
Pour vous aider à répondre à cette question, vous allez
comparer la fonction d'onde associée avec le vingtième état lié,
telle qu'obtenue avec des frontières situées à 15 Å et 30 Å du centre.
Commentez l'impact des conditions frontières sur ce résultat.
Pour le rapport, vous représenterez les trois courbes d'erreur sur le même graphique.
L'équation de Schrödinger que nous cherchons à résoudre peut en effet se mettre sous la forme



En utilisant les relations données dans Abramowitz, on peut montrer que


En calculant AN-1(E) pour 10000 valeurs entre 0 et 10 eV, vous allez vérifier graphiquement que les racines de AN-1(E) correspondent effectivement aux énergies des états liés du potentiel harmonique. Vous représenterez |AN-1(E)| en échelle logarithmique. Travaillez ici avec N=150 et des x allant de x0=-15 Å à xN= 15 Å.
Pour calculer les valeurs et vecteurs propres d'une matrice symmétrique tridiagonale
réelle (double précision), vous pouvez utiliser la sous-routine
dstevd de la librairie
LAPACK.
Sa syntaxe est la suivante:
call dstevd( JOBZ, N, D, E, Z, LDZ, WORK, LWORK, IWORK, LIWORK, INFO )
où
JOBZ='V' pour obtenir les valeurs et vecteurs propres,
N et LDZ spécifient l'ordre de la matrice à diagonaliser,
D(1:N) est un vecteur qui contient les éléments diagonaux de cette matrice,
E(1:N) est un vecteur qui contient dans ses N-1 premières composantes les éléments sous-diagonaux de la matrice,
Z(1:N,1:N) est une matrice qui contient en sortie les vecteurs propres de la matrice
(ils sont rangés en colonnes),
WORK(1:LWORK) est un espace de travail (il s'agit d'un vecteur réel double précision),
LWORK=1+4*N+N**2,
IWORK(1:LIWORK) est un autre espace de travail (il s'agit d'un vecteur entier),
LIWORK=3+5*N et
INFO est un entier qui vaut 0 en sortie si tout s'est bien passé.
En sortie de la sous-routine, les valeurs propres de la matrice sont rangées par
ordre croissant dans le vecteur D(1:N).
Vous trouvez toutes ces explications au début du listing de
dstevd.
Vous pouvez utiliser dstevd directement, sans l'inclure dans
votre projet ni créer d'interface ! Il faut cependant compiler
votre projet en le liant à la librairie LAPACK. La manière de faire dépend de
votre compilateur. Vous trouverez les explications nécessaires sur
ma page consacrée à LAPACK.
On trouve facilement la routine à utiliser pour un problème
donné en parcourant le site de la librairie. La manière d'utiliser cette routine
est alors expliquée au début du listing.
Afin de représenter graphiquement vos résultats, vous pouvez utiliser
la routine Plot.
Celle-ci vous permet
de visualiser une ou plusieurs fonctions y=y(x) en faisant simplement
call Plot(list_x, list_y).
Vous devez pour cela inclure use PlotPack dans les parties de vos programmes
qui utilisent Plot. Vous trouverez plus de détails sur
son utilisation dans les commentaires préliminaires
du fichier.
Si vous connaissez le Python, vous pouvez également faire python Plot.py Plot.dat (Python 2.7). Vous trouverez
dans le fichier Plot.dat un exemple de format à respecter.
Afin de représenter graphiquement vos résultats et
produire des fichiers PostScript, vous pouvez utiliser
le programme GetPlot.exe.
Celui-ci vous permet de visualiser une ou plusieurs fonctions y=y(x), en
exécutant simplement ce programme dans le répertoire où se trouvent vos fichiers.
Le lien suivant décrit le
format des fichiers de données.