harmonic1.c
(versione C) o
harmonic1.f
(versione Fortran 77)
costituisce una versione migliorata di harmonic0, che evita
il problema della divergenza a grandi .
Il trucco utilizzato per evitare la divergenza è quello di
effettuare due integrazioni: una in avanti partendo da ,
e una all'indietro partendo da
. L'autovalore
viene fissato dalla condizione che il raccordo fra le due
parti sia continuo con derivata prima continua.
Il punto di raccordo scelto coincide col punto di inversione
classica , tale che
. Tale punto
dunque varia man mano che diversi
vengono provati, ed è ovviamente
determinato entro la precisione che può fornire la griglia.
In pratica viene
identificato l'indice icl del primo punto della griglia
tale che
.
Possiamo quindi solo dire che il punto di inversione classico
è situato fra
e
.
L'integrazione verso destra viene portata avanti fino a
icl, ottenendo così una funzione definita
in
, contando ancora il numero di cambiamenti di segno
come in harmonic0. Se
non è quello
corretto l'energia è abbastanza distante dal valore richiesto,
e si procede ad un aggiustamento per bisezione come descritto
in precedenza (senza che sia necessario integrare
al di là di
, regione in cui si sa a priori che non
vi possono essere nodi).
Se invece il numero di nodi è quello giusto, il programma
procede con l'integrazione da destra verso sinistra2.1, fermandosi allo stesso indice icl corrispondente a
e ottenendo così una funzione
definita
in
.
A quel punto vi sono due valori della funzione d'onda in :
e
. La prima operazione effettuata
è quella di riscalare
di un fattore
, in modo che via sia un raccordo
continuo fra le due funzioni in
.
Fatto questo, l'intera
viene rinormalizzata in modo
che sia
.
Ora inizia la parte nuova e cruciale: il calcolo
della discontinuità della derivata prima alla giunzione,
. Questa differenza dovrebbe
pure essere nulla per una buona soluzione, ma questo non
sarà vero se non (all'interno di una precisione specificata)
quando
. Il segno della differenza ci permette di
capire se
è troppo alta o troppo bassa, e quindi di
applicare nuovamente il metodo di bisezione per migliorarne
la stima.
Per calcolare la discontinuità, utilizziamo (indicando
per brevità con l'indice corrispondente al punto
di griglia
):
![]() |
(2.45) |
![]() |
(2.46) |
![]() |
(2.47) |
![]() |
(2.48) |
Oltre alla funzione d'onda finale scritta sul file di output
in modo analogo ad harmonic0 (ma ora è normalizzata!),
il programma emette una linea sullo standard output per ogni
iterazione, contenente quattro numeri: il numero dell'iterazione,
il numero di nodi trovati (sul solo semiasse degli positivi),
la discontinuità nella derivata
(solo
quando è stata calcolata, ossia se il numero di nodi era
quello giusto--negli altri casi viene riportato zero)
e la stima corrente dell'autovalore dell'energia.