Esistono modi semplici per risolvere numericamente l'equazione di Schrödinger dipendente dal tempo?


34

Vorrei eseguire alcune semplici simulazioni di scattering di pacchetti d'onda su potenziali semplici in una dimensione.

Esistono modi semplici per risolvere numericamente il TDSE monodimensionale per una singola particella? So che, in generale, cercare di usare approcci ingenui per integrare equazioni differenziali parziali può rapidamente finire in un disastro. Sto quindi cercando algoritmi che

  • sono numericamente stabili,
  • sono semplici da implementare o hanno implementazioni di librerie di codici facilmente accessibili,
  • correre ragionevolmente veloce, e si spera
  • sono relativamente semplici da capire.

Vorrei anche evitare relativamente i metodi spettrali, e in particolare i metodi che sono poco più che risolvere l'equazione di Schrödinger indipendente dal tempo come al solito. Tuttavia, sarei interessato a metodi pseudo-spettrali che usano B-spline o quant'altro. Se il metodo può assumere un potenziale dipendente dal tempo, questo è sicuramente un bonus.

Naturalmente, qualsiasi metodo di questo tipo presenterà sempre una serie di svantaggi, quindi vorrei sentirli. Quando non funziona? Quali sono le insidie ​​comuni? In quali modi può essere spinto e in quali modi non può?



@EmilioPisanty Ho aggiunto una discussione sugli errori nel mio articolo su SSFM: noto (dopo aver scritto la mia risposta, scusa) non sei appassionato di metodi spettrali, ma nel caso ...

Filo pulito; rimuovendo la discussione sull'attualità dalla fisica.
Geoff Oxberry,

1
Consiglio di iniziare qui, anche se ci sono molti lavori più recenti: un confronto tra diversi schemi di propagazione per l'equazione di Schrödinger dipendente dal tempo .
David Ketcheson,

3
@GeoffOxberry potresti rendere disponibile uno screenshot di quei commenti?
Emilio Pisanty,

Risposte:


24

Schroedinger è effettivamente una reazione-diffusione equazione (tutte le costanti sono 1). Quando si tratta di un'equazione differenziale parziale, ci sono due modi per risolverlo:

(1)iψt=2ψ+Vψ
  1. Metodo implicito (adv: grandi passi temporali e incondizionatamente stabile, disadv: richiede il risolutore di matrici che può fornire dati errati)
  2. Metodo esplicito (adv: facile da implementare, disadv: richiede piccoli timestep per la stabilità)

Per equazioni paraboliche (lineare e 2 ° ordine in ), il metodo implicito è spesso la scelta migliore. Il motivo è la condizione per la stabilità del metodo esplicito richiede , che sarà molto piccolo. Puoi evitare questo problema usando il metodo implicito, che non ha tale limitazione nella fase temporale (anche se in pratica non lo rendi follemente grande perché potresti perdere un po 'di fisica). Quello che descriverò dopo è il metodo Crank-Nicolson , uno schema implicito accurato (spazio e tempo) del secondo ordine.x d t d x 2txdtdx2

antipasti

Per risolvere computazionalmente un PDE, è necessario discretizzarlo (adattare le variabili a una griglia). Il più diretto è una griglia cartesiana rettangolare. Qui su, rappresenta l'indice temporale (ed è sempre un super-script) e l'indice di posizione (sempre un indice). Utilizzando un'espansione di Taylor per la variabile dipendente dalla posizione, l'equazione (1) diventa Dove abbiamo assunto chej i ψ n + 1 j - ψ jnjV=V(x) 1

iψjn+1ψjdt=12(ψj+1n+12ψjn+1+ψj1n+1dx2+ψj+1n2ψjn+ψj1ndx2)+12(Vjψjn+1+Vjψjn)
V=V(x). Quello che succede dopo è un raggruppamento di indici spaziali e temporali simili (potresti voler ricontrollare la matematica): Questa equazione ha la forma (A0A-00A+A0A-00A+A0A-)(ψ n + 1 0 ψ n + 1 1ψ n + 1 J - 1 )=(ψ n 0
(2)12dtdx2ψj+1n+1+(idtdx212Vj)ψjn+1+12dtdx2ψj1n+1=iψjn12dtdx2(ψj+1n2ψjn+ψj1n)+12Vjψjn
iψ n + 1 j
(A0A00A+A0A00A+A0A)(ψ0n+1ψ1n+1ψJ1n+1)=(ψ0nψ1nψJ1n)
Che si chiama matrice tri-diagonale e ha una soluzione nota (oltre a esempi funzionanti, tra cui uno scritto da me!). Il metodo esplicito graffia l'intero lato sinistro (o dovrei dire la linea superiore?) Dell'equazione (2) ad eccezione del termine .iψjn+1

Problemi

Il problema più grande che ho riscontrato con metodi impliciti è che sono fortemente dipendenti dalle condizioni al contorno. Se hai condizioni al contorno scarsamente definite / implementate, puoi ottenere oscillazioni spurie nelle tue cellule che possono portare a risultati cattivi (vedi il mio post SciComp su un argomento simile). Questo porta ad avere effettivamente la precisione del 1 ° ordine nello spazio, piuttosto che il 2 ° che il tuo schema dovrebbe dare.

Anche i metodi impliciti sono presumibilmente difficili da parallelizzare, ma li ho usati solo per equazioni di calore 1D e non avevo bisogno di supporto parallelo, quindi non posso né verificare né smentire l'affermazione.

Non sono inoltre sicuro di come la natura complessa della funzione d'onda influenzerà i calcoli. Il lavoro che ho fatto utilizza le equazioni fluidodinamiche di Eulero e sono quindi del tutto reali con magnitudini non negative.

Potenziale dipendente dal tempo

Se hai un potenziale analitico dipendente dal tempo (ad es. ), allora useresti semplicemente l'ora corrente, , per sull'RHS di (2) e l'ora futura, , sull'LHS. Non credo che ciò creerebbe problemi, ma non l'ho provato, quindi non posso verificare o negare anche questo aspetto.t V j t + d tVcos(ωt)tVjt+dt

alternative

Ci sono anche alcune interessanti alternative al metodo Crank-Nicolson. Il primo è il cosiddetto metodo "super-time-stepping". In questo metodo esplicito, prendi la fase temporale ( ) e usi le radici dei polinomi di Chebyshev per ottenere una serie ottimizzata di fasi temporali che si sommano rapidamente a più velocemente di fare passi volte (efficacemente ottieni modo che ogni passaggio ti avanzare d t d t / N N Δ T = N 2 d t N N d tdtdx2dtdt/NNΔT=N2dtNNdtin tempo). (Uso questo metodo nella mia ricerca perché hai un "flusso" ben definito da una cella all'altra che viene utilizzato per unire i dati da un processore a un altro, usando lo schema Crank-Nicolson non sono stato in grado di farlo).

EDIT Una cosa da notare è che questo metodo è preciso nel primo ordine nel tempo, ma se si utilizza un metodo Runge-Kutta 2 insieme, ti darà uno schema preciso del 2 ° ordine nel tempo.

L'altro è chiamato esplicito in direzione alternata . Questo metodo richiede di avere condizioni al contorno note e ben definite. Quindi procede alla risoluzione dell'equazione utilizzando il limite direttamente nel calcolo (non è necessario applicarlo dopo ogni passaggio). Ciò che accade in questo metodo è risolvere il PDE due volte, una volta in una scansione verso l'alto e una volta in una scansione verso il basso. Lo sweep verso l'alto utilizza mentre lo sweep verso il basso usa per l'equazione di diffusione mentre gli altri termini rimarrebbero gli stessi. Il passo temporale

2ψx2ψj1n+1ψjn+1ψjn+ψj+1ndx2
2ψx2ψj+1n+1ψjn+1ψjn+ψj1ndx2
n+1 viene quindi risolto calcolando la media delle due curve direzionali.

1
Ottima risposta, unica lamentela è che mi hai battuto!
Kyle

@ChrisWhite: Stavo pensando a come ciò possa essere fatto all'inizio di questa mattina e l'unica cosa che mi è venuta è essere farlo una volta per e una volta per . Dò un'occhiata a quel documento (e, soprattutto, al codice gratuito che distribuiscono) e vedrò come suggeriscono di farlo. RI
Kyle Kanos

@ChrisWhite Forse l'astuzia è per il calcolo delle autofunzioni, che ho visto calcolato con il timestamp immaginario: disponi la direzione del passo in modo che l'autofunzione a energia più bassa abbia il valore meno negativo di e quindi il decadimento più lento. Su iterando su un input casuale, molto rapidamente rimane solo la forma dell'autofunzione di energia più bassa. Quindi sottrai questo dall'input casuale e ripeti il ​​processo: ora la successiva autofunzione energetica più bassa è quella dominante. E così via. Sembra un po 'complicato (specialmente aumentando di eigenfuncs) ma funziona! hνhν

1
@DavidKetcheson: un'equazione reazione-diffusione assume la forma . Nel caso dell'equazione di Schrodinger, ; posso allora chiedere come che è non è un'equazione RD-tipo? E, curiosamente, l'equazione di Schrodinger appare effettivamente nell'articolo wiki di reazione-diffusione a cui ho fatto riferimento. Questo equivoco che ho fatto appare anche in molte riviste e testi pubblicati (vai avanti e cercalo). Forse sarebbe stato meglio per me consigliarmi di usare librerie standard (come è il MO comune qui), come PETSc, deal.ii o pyCLAW? tu=Dx2u+R(u)R(u)=Vu
Kyle Kanos,

1
@KyleKanos: il tuo post è buono. Infatti, nell'articolo pubblicato da DavidKetcheson, Crank-Nicolson è sostenuto dal primo riferimento. Il confronto con la reazione-diffusione va bene; come notate, il confronto con la reazione-diffusione appare in molte fonti pubblicate. Penso che David Ketcheson stesse cercando qualcosa come "equazione dell'onda dispersiva" menzionata in precedenza.
Geoff Oxberry,

22

All'inizio degli anni '90 stavamo cercando un metodo per risolvere il TDSE abbastanza velocemente da realizzare animazioni in tempo reale su un PC e ci siamo imbattuti in un metodo sorprendentemente semplice, stabile ed esplicito descritto da PB Visscher in Computer in fisica : " Un algoritmo veloce esplicito per l'equazione di Schrödinger dipendente dal tempo ". Visscher nota che se si divide la funzione d'onda in parti reali e immaginarie, , la SE diventa il sistema:ψ=R+iI

dRdt=HIdIdt=HRH=12m2+V

Se poi calcoli e in tempi sfalsati ( a e a , ottieni la discretizzazione:RIR0,Δt,2Δt,...I0.5Δt,1.5Δt,...)

R(t+12Δt)=R(t12Δt)+ΔtHI(t)

I(t+12Δt)=I(t12Δt)ΔtHR(t)

con (Laplaciano standard a tre punti).

2ψ(r,t)=ψ(r+Δr,t)2ψ(r,t)+ψ(rΔr,t)Δr2

Questo è esplicito, molto veloce da calcolare e accurato del secondo ordine in .Δt

Definire la densità di probabilità come

P(x,t)=R2(x,t)+I(x,t+12Δt)I(x,t12Δt)
a intervalli di tempo interi e,

P(x,t)=R(x,t+12Δt)R(x,t12Δt)+I2(x,t)
a intervalli temporali di mezzo numero intero

rende l'algoritmo unitario, preservando così la probabilità.

Con una sufficiente ottimizzazione del codice, siamo stati in grado di ottenere animazioni molto belle calcolate in tempo reale su macchine 80486. Gli studenti possono "attingere" qualsiasi potenziale, scegliere un'energia totale e osservare l'evoluzione temporale di un pacchetto gaussiano.


Questo è un trucco molto accurato per risolvere i componenti reali e immaginari! Nota anche che puoi ottenere grandi equazioni centrate usando $$ ... $$. Mi sono preso la libertà di farlo per te, spero che non ti dispiaccia!
Kyle Kanos,

Siamo stati lieti di trovare l'algoritmo: era facile da programmare e funzionava velocemente. La parte più difficile è stata quella di ottenere le condizioni iniziali giuste, R a t = 0 e io a 0.5dt ... Non mi dispiace la modifica, ero felice di ottenere equazioni.

1
@ user40172 Stavamo facendo la stessa cosa per le guide d'onda all'incirca nello stesso momento, e abbiamo optato per il BPM descritto nella mia risposta. Il motivo era che al momento potevamo far funzionare gli FFT separatamente dalla CPU principale usando una scheda DSP. Pensavamo di essere stati così intelligenti, ma devo dire che trovare una soluzione hardware a un problema software sembra piuttosto strano nel 2014! L'ultima versione di Visual Studio C ++ vettorializza automaticamente il codice sulle CPU e fa un ottimo lavoro con FFT.

1
@ user40172 Come hai finalmente ottenuto le condizioni iniziali a ? Basta propagare la soluzione a quel tempo usando un altro metodo? 0.5dt

1
@Rusian Dato che stavamo facendo scattering, abbiamo usato un pacchetto standard di onde gaussiane a particelle libere, ma ci siamo assicurati di avviarlo "abbastanza lontano" da qualsiasi regione in cui il potenziale era diverso da zero. Vedi, ad esempio: dimostrations.wolfram.com/EvolutionOfAGaussianWavePacket

10

xt

Quello che faresti è una versione mascherata del metodo di propagazione del raggio per la propagazione ottica attraverso una guida d'onda di sezione trasversale variabile (analoga a potenziali variabili nel tempo), quindi sarebbe utile cercare anche questo.

Il modo in cui guardo SSFM / BPM è il seguente. Il suo fondamento è la formula del prodotto Trotter della teoria di Lie:

(1)limm(exp(Dtm)exp(Vtm))m=exp((D+V)t)

che a volte viene chiamato equazione di divisione dell'operatore in questo contesto. Il set di dati è una griglia discretizzata o di valori complessi che rappresentano in un determinato momento . Quindi immagini questo (non devi farlo ; sto ancora parlando concettualmente) enorme griglia scritta come vettore colonna -elemento (per una griglia abbiamo ) e quindi la tua equazione di Schrödinger è nella forma:xyxyzψ(x,y,z)tNΨ1024×1024N=10242=1048576

(2)dtΨ=KΨ=(D+V(t))Ψ

dove è una matrice inclinata eremita, un elemento di e verrà mappato con tempo crescente da un elemento di uno gruppo di parametri . (Ho risucchiato il fattore in su RHS in modo da poter parlare più prontamente in termini teorici di Lie). Date le dimensioni di , l'habitat naturale degli operatori è un gruppo di Lie completamente colossale, quindi PHEW! sì, sto ancora parlando in termini totalmente teorici !. Ora, cosa significaK=D+VN×Nu(N)Ψexp(Kt)iK=D+VNU(N)D+VAssomiglia a? Ancora immaginando per ora, potrebbe essere considerata una versione a differenza finita di , dove rappresenta un potenziale "medio" conveniente per il problema in questione.i2/(2m)i1V0+i1(V0V(x,y,z,t0))V0

Lasciamo:

(3)D=i2m2i1V0V=i1(V0V(x,y,z,t))

Perché li ho divisi in questo modo diventerà chiaro di seguito.

Il punto su è che può essere elaborato analiticamente per un'onda piana: è un semplice operatore di moltiplicazione in coordinate di momento. Quindi, per elaborare , ecco i primi tre passaggi di un ciclo SSFM / BPM:DΨexp(ΔtD)Ψ

  1. Assegna FFT al set di dati per trasformarlo in un set di pesi di sovrapposizione di onde piane: ora le coordinate della griglia sono state modificate da in ;ΨΨ~x,y,zkx,ky,kz
  2. Impart semplicemente moltiplicando ciascun punto della griglia per ;Ψ~exp(ΔtD)Ψ~exp(iΔt(V0kx2+ky2+kz2)/)
  3. Inoltra FFT inversa per mappare la nostra griglia suexp(ΔtD)Ψ

    Ora siamo di nuovo nel dominio di posizione. Questo è il dominio migliore per impartire ovviamente all'operatore : qui è un semplice operatore di moltiplicazione. Quindi ecco il tuo ultimo passo del tuo ciclo algoritmico:VV

  4. Assegnare all'operatore semplicemente moltiplicando ciascun punto sulla griglia per il fattore di faseΨexp(ΔtV)Ψexp(iΔt(V0V(x,y,z,t))/)

.... e poi inizi il tuo prossimo passo e ciclicamente più volte. Chiaramente è molto facile inserire nel codice potenziali che variano nel tempo .ΔtV(x,y,z,t)

Quindi vedi semplicemente abbastanza piccolo da far entrare la formula Trotter (1): stai semplicemente approssimando l'azione dell'operatore e svolgi avanti e indietro con la tua FFT tra coordinate di posizione e momento, cioè i domini in cui e sono semplici operatori di moltiplicazione.Δtexp(D+VΔt)exp(DΔt)exp(VΔt)VD

Nota che stai impartendo solo, anche nel mondo discretizzato, operatori unitari: FFT e fattori di fase puri.

Un punto di cui devi fare attenzione è che quando il tuo diventa piccolo, devi assicurarti che anche la spaziatura della griglia spaziale si riduca. Altrimenti, supponiamo che la spaziatura della griglia spaziale sia . Quindi il significato fisico di un passo discreto è che gli effetti di diffrazione viaggiano a una velocità ; quando si simulano le equazioni e le guide d'onda di Maxwell, è necessario assicurarsi che questa velocità sia molto più piccola di . Oserei dire che i limiti si applicano all'equazione di Schrödinger: non ho esperienza diretta qui, ma suona divertente e forse potresti pubblicare i tuoi risultati qualche volta!ΔtΔxΔx/Δtc

Una seconda "esperienza" punto con questo genere di cose - sarei quasi disposto a scommettere che è così che finirai per seguire le tue idee. Spesso abbiamo idee che vogliamo fare simulazioni semplici, veloci e sporche, ma non funziona mai così! Comincerei con SSFM come ho descritto sopra in quanto è molto facile iniziare e vedrai rapidamente se i suoi risultati sono fisici o meno. Successivamente puoi usare il tuo, diciamo il codice SSFM di Mathematica, controlla i risultati di un codice più sofisticato che potresti finire per costruire, diciamo, un codice Crank Nicolson lungo le linee della risposta di Kyle Kanos .


Limiti di errore

La realizzazione della formula Dynkin del teorema Baker-Campbell-Hausdorff:

exp(DΔt)exp(V)Δt)=exp((D+V)Δt+12[D,V]Δt2+)
convergenti per alcuni mostra che il metodo è accurato al secondo ordine e può mostrare che:Δt>0

exp(DΔt)exp(V)Δt)exp(12[D,V]Δt2)=exp((D+V)Δt+O(Δt3))

In teoria, quindi, puoi usare il termine per stimare l'errore e impostare di conseguenza . Questo non è così semplice come sembra e in pratica i limiti finiscono per essere piuttosto stime approssimative dell'errore. Il problema è che:exp(V)Δt)exp(12[D,V]Δt2)Δt

Δt22[D,V]=iΔt22m(x2V(x,t)+2xV(x,t)x)

e non ci sono prontamente trasformati in coordinate in cui è un semplice operatore di moltiplicazione. Quindi devi accontentarti di e usalo per stimare il tuo errore, lavorando per il tuo soluzione attualmente in evoluzione e utilizzo questa per impostare il[D,V]exp(12[D,V]Δt2)eiφΔt2(id(12[D,V]iφ(t))Δt2)(id(12[D,V]iφ(t))Δt2)ψψ(x,t)Δtal volo dopo ogni ciclo dell'algoritmo. Ovviamente puoi fare di queste idee la base per un controller adattivo per la tua simulazione. Qui è una fase globale estratta dal set di dati per ridurre al minimo la norma di ; ovviamente puoi spesso eliminare una fase così globale: a seconda di ciò che stai facendo con i risultati della simulazione spesso non siamo disturbati da una fase costante globale .φ(12[D,V]iφ(t))Δt2exp(φdt)

Un documento pertinente sugli errori nell'SSFM / BPM è:

Lars Thylén. "Il metodo di propagazione del raggio: un'analisi della sua applicabilità", ottica e Quantum Electronics 15 (1983) pp433-439 .

Lars Thylén pensa agli errori in termini teorici non di Lie (i gruppi di Lie sono la mia inclinazione, quindi mi piace cercarne interpretazioni) ma le sue idee sono essenzialmente le stesse di quelle sopra.


1
Rod, probabilmente sei consapevole che puoi fare di meglio se usi la cosiddetta approssimazione dell'operatore diviso, dove . In effetti è possibile effettuare ulteriori divisioni per portare l'errore a potenze elevate. Vedi ad esempio Bandrauk e Shen, Chem. Phys. Lett. 176, 428 (1991). Ovviamente il tuo termine cinetico non può dipendere dalle coordinate, cioè non funziona bene nelle coordinate curvilinee. Δ texp[Δt(D+V)]exp[ΔtV/2]exp[ΔtD]exp[ΔtV/2]Δt

1
Altrimenti, questa cosa dell'operatore diviso accoppiata alla valutazione FFT dell'operatore di energia cinetica è una delle procedure standard per risolvere il TDSE su una rappresentazione basata sulla griglia in Fisica molecolare.

@perplexity Mille grazie. È utile sapere quali campi diversi vengono utilizzati. La data del 1991 sul tuo riferimento è interessante: ero sempre abbastanza sicuro che l'idea del passo diviso fosse nata dalla simulazione della guida d'onda alla fine degli anni '70 - quindi forse mi sbaglio.

1
Non sbagli affatto. Questa è stata davvero l'ispirazione. Il primo lavoro che traduce queste idee in QM di cui sono a conoscenza è Feit, Fleck e Steiger, J. Comput. Phys. 47, 412 (1982) dove, se ricordo bene, usano essenzialmente gli stessi trucchi con il vantaggio che l'operatore qui è unitario per costruzione (diversamente dalle onde classiche). Credo che l'approccio basato su griglia FFT a questo tipo di simulazioni sia stato proposto per la prima volta da Ronnie Kosloff. Ha una bella recensione su questo argomento sulla sua pagina web.

Un altro buon riferimento nel mio campo è il libro di David Tannor sulla Meccanica Quantistica: una prospettiva dipendente dal tempo. Saluti.

5

Posso raccomandare di usare il metodo del dominio del tempo a differenza finita (FDTD). Ho anche scritto un tutorial qualche tempo fa che dovrebbe rispondere alla maggior parte delle tue domande:

JR Nagel, "Una revisione e applicazione dell'algoritmo del dominio del tempo a differenza finita applicato all'equazione di Schrödinger", ACES Journal, vol. 24, n. 1, febbraio 2009

Ho alcuni codici Matlab che funzionano bene per i sistemi 1D. Se hai esperienza con FDTD nel campo dell'elettromagnetismo, funziona benissimo anche per la meccanica quantistica. Posso pubblicare i miei codici se sei interessato.

Fondamentalmente, opera solo sulle funzioni d'onda direttamente suddividendo i derivati ​​in differenze finite. È un po 'simile allo schema di Crank-Nicholson, ma non esattamente. Se hai familiarità con FDTD dalla teoria delle onde elettromagnetiche, allora FDTD sarà molto intuitivo quando risolvi l'equazione di Schrodinger.


4

Il metodo della differenza finita più semplice è veloce e facile da capire, ma non è unitario nel tempo, quindi la probabilità non è conservata. Crank-Nicholson-Crout fa la media dei metodi di differenza finita avanti e indietro per produrre un metodo implicito / esplicito ibrido che è ancora abbastanza facile da capire e da implementare ed è unitario nel tempo. Questo sito spiega bene il metodo, fornisce pseudocodice e fornisce le proprietà pertinenti:

http://www.physics.utah.edu/~detar/phycs6730/handouts/crank_nicholson/crank_nicholson/ Nota: manca un segno - nell'LHS dell'equazione uno di questo link, che si propaga in tutta la pagina.

Da dove viene la non-unità?

In poche parole, risolvere il TDSE si riduce a capire come gestirlo

|ψ(x,t)=eiHt|ψ(x,0)

che contiene un operatore differenziale in un esponenziale.

L'applicazione di una differenza finita in avanti trasforma l'operatore differenziale in una matrice tridiagonale (convertendo i Reals in una griglia) e l'esponenziale nei primi due termini della sua serie di Taylor

eiHt1iHt

Questa discretizzazione e linearizzazione è ciò che dà origine alla non unità. (È possibile mostrare che la matrice tridiagonale non è unitaria per calcolo diretto.) La combinazione della differenza finita in avanti con la differenza finita all'indietro produce l'approssimazione

eiHt112iHt1+12iHt

che, gentilmente, sembra essere unitario (di nuovo puoi mostrarlo tramite calcolo diretto).


Grazie per la risposta rapida. Potresti fornire maggiori dettagli su entrambi questi metodi? Come funzionano e perché? Da dove viene la non-unità?
Emilio Pisanty,

Sarei felice di fornire maggiori dettagli, ma per evitare di perdere il mio pubblico di riferimento, sarebbe utile sapere quanta istruzione ed esperienza hai avuto in ciascuno dei seguenti campi di base: Calcolo, Equazioni differenziali, Algebra lineare, Meccanica quantistica e metodi numerici (in particolare metodi di differenza finita).

Si prega di assumere quanto è necessario dalla fisica e dalla matematica standard (anche se probabilmente i riferimenti alle parti più complicate potrebbero aiutare). I miei metodi numerici sono un po 'arrugginiti, però.
Emilio Pisanty,

Ci sono differenze tra questa e la risposta di Kyle Kanos ? Voglio dire, non è ovvio come implementare la tua ultima equazione - come hai scritto implica invertire un operatore completo - stai semplicemente dicendo che il metodo CN sta semplicemente, attraverso la soluzione della sua equazione tridiagonale, risolvendo ? O c'è una sottigliezza che mi è sfuggita? In realtà la tua ultima equazione è un buon rendering in quanto rende esplicita l'unità per CN, un fatto che non è chiaro in molte descrizioni di CN. (1+i2Ht)1(1+i2Ht)ψ

No, è lo stesso algoritmo di Kyle Kanos. L'ho appena scritto in questo modo per dare un modo diverso di vederlo. Speravo che fosse più facile concettualizzare, mentre il suo è più facile da implementare. Sì, alla fine stai solo risolvendo un'equazione tridiagonale. C'era un vecchio documento (1967) in AJP che non riuscivo a trovare prima che lo descrive molto bene: ergodic.ugr.es/cphys/lecciones/SCHROEDINGER/ajp.pdf Hanno usato CN per produrre loop di film 8mm di pacchetti di onde gaussiane disperdere vari potenziali. Puoi ancora trovare quei film in molte librerie dimostrative di fisica universitaria.

3

Alcune risposte e commenti qui confondono in modo confuso il TDSE con un'equazione d'onda; forse un problema di semantica, in una certa misura. Il TDSE è la versione quantizzata del classico hamiltoniano non relativistico Con le regole (come discusso nel capitolo 1 di d'Espagnat, Fondamenti concettuali della meccanica quantistica, https://philpapers.org/rec/ESPCFO ), si legge quindi quindi è chiaramente un'equazione simile alla diffusione. Se si utilizzava l'energia relativistica, che contiene un termine E , un'equazione simile a un'onda come

H=p22m+V(x)=E.
pix,  Eit,  xx,
[22mxx+V(x)]ψ=itψ,
2
xxψ=ttψ+
otterrebbero (per V = 0 per semplicità), come le equazioni di Pauli o Klein-Gordon. Ma questa è, ovviamente, una questione completamente diversa.

Ora, tornando al TDSE, il metodo ovvio è Crank-Nicolson, come è stato menzionato, perché è una piccola espansione che conserva l'unitarietà dell'evoluzione (FTCS, ad esempio, non lo fa). Nel caso 1-spazio-D, può essere trattato come un'iterazione della matrice, leggendo con la matrice identità e (Dettagli ad esempio in Metodi numerici per la fisica, http://algarcia.org/nummeth/nummeth.html , di AL Garcia). Come più chiaramente visto in condizioni al contorno periodiche, uno spazio localizzato

ψn+1=(I+iτ2H~)1(Iiτ2H~)ψn
Iψψψs=eikx/
Hjk=(H~)jk=22m[δj+1,k+δj1,k2δjkh2]+Vjδjk.
ψ diffonde nel tempo: questo è previsto, poiché la localizzata iniziale non è un eigenstate dell'equazione di Schroedinger stazionaria, ma una sua sovrapposizione. L' (particella libera massiccia classica) a momento fisso (per l'operatore cinetico non relativistico) è semplicemente , cioè completamente delocalizzata secondo il principio di Heisenberg, con densità di probabilità costante 1 / L ovunque (nota che sto evitando problemi di normalizzazione con stati continui facendo vivere la mia particella su una linea finita, periodicamente ripetuta). Usando CN, la norma ψ| ψ | 2dxcp=Ecicx=itψs=eikx/L
|ψ|2dx
è conservato, grazie all'unità (questo non è il caso in altri schemi, come FTCS, ad esempio). Per inciso, nota che partendo da un'espressione energetica come con fissa, otterrai cioè l'equazione di avanzamento, che non ha dispersione (se integrata correttamente con Lax-Wendroff metodi) e in tal caso il pacchetto wave non si diffonderà nel tempo. L'analogo quantico è l'equazione di Dirac a particelle prive di massa.
cp=E
c
icx=it
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.