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.