Oscillatore Armonico Quantistico dipendente dal tempo

Il sistema è descritto da un'hamiltoniana che dipende dal tempo, come mostrato nell'equazione $$ \widehat{H} = \frac{\widehat{p}^{\,2}}{2} + \frac{\left(\widehat{q} - q_0(t)\right)^2}{2},$$ dove $\widehat{p}$ e $\widehat{q}$ sono rispettivamente gli operatori di quantità di moto e di posizione, e $q_0(t) = t/T$ con $t \in [0, T]$.

Lo stato fondamentale $\ket{\psi_0}$ dell'oscillatore armonico indipendente dal tempo viene evoluto nel tempo utilizzando il metodo dell'ordine di divisione. Per un'hamiltoniana indipendente dal tempo, lo stato fondamentale $\ket{\psi(t)}$ può essere ottenuto applicando l'operatore di evoluzione temporale $e^{-i\widehat{H}t}$ allo stato iniziale $\ket{\psi_0}$, tal che: $$\ket{\psi(t)} = e^{-i\widehat{H}t} \ket{\psi_0}.$$ Per risolvere il problema posso usare il fatto che se prendo un passo temporale sufficientemente piccolo $dt$, discretizzando il sistema, posso far evolvere lo stato usando $$ \ket{\psi(t+dt)} \approx e^{-i\widehat{H}\dd t} \ket{\psi(t)}$$ Tuttavia, per un'hamiltoniana dipendente dal tempo, l'operatore di evoluzione temporale non può essere calcolato direttamente e si ricorre invece al metodo dello split order.

Il metodo dello split order consiste nell'approssimare l'operatore di evoluzione $e^{-i\widehat{H} dt}$ utilizzando la formula di Baker-Campbell-Hausdorff. Questa approssimazione può essere scritta come $$ e^{-i\widehat{H} dt} \simeq e^{-i\frac{\widehat{V}}{2} dt} e^{-i\frac{\widehat{T}}{2} dt} e^{-i\frac{\widehat{V}}{2} dt},$$ dove $\widehat{T}=\widehat{p}^{, 2}/2$ è l'operatore di energia cinetica e $\widehat{V}=(\widehat{q}-q_0(t))^2/2$ è l'operatore di energia potenziale. L'evoluzione temporale dello stato fondamentale può essere calcolata utilizzando l'equazione
$$ \psi(x,t+ dt) \simeq e^{-i\frac{\widehat{V}}{2} dt} \mathcal{F}^{-1} \left[ e^{-i\frac{p^2}{2} dt} \mathcal{F}\left[ e^{-i\frac{\widehat{V}}{2} dt} \psi(x,t)\right] \right], $$
che prevede una trasformata di Fourier per ottenere un autostato nella rappresentazione della quantità di moto, seguita da una trasformata di anti-Fourier per tornare alla rappresentazione della posizione. L'evoluzione temporale viene eseguita iterativamente con piccoli passi temporali $ dt$ fino a un tempo massimo $T$.

Per risolvere l'equazione di Schrödinger per questa hamiltoniana, si può discretizzare lo spazio $x$ e scrivere l'hamiltoniana come una matrice tridiagonale. La discretizzazione dello spazio avviene dividendo l'intervallo spaziale $[-L, L]$ in $N$ parti uguali di larghezza $dx$, dove $L$ è la dimensione del sistema e $N$ è il numero di punti della griglia.

La discretizzazione dello spazio $x$ implica che la posizione $x_i$ sia data da $x_i = i*dx$ dove $i = 0, 1, 2, ..., N$. In questa discretizzazione, ogni componente dell'Hamiltoniana può essere approssimata dalla seguente matrice tridiagonale:
$$ H_{ij} = \left[\left(-\frac{m}{2 dx^2}\right) + \frac{m}{2} w^2 x_i^2\right] \delta_{ij} - \frac{m}{2 dx^2} \delta_{i,j-1} - \frac{m}{2 dx^2} \delta_{i,j+1} $$
dove $$ è il delta di Kronecker, che è uguale a $1$ se $i = j$ e $0$ altrimenti.

Questo codice simula l'evoluzione temporale di un oscillatore armonico quantistico. La simulazione viene eseguita risolvendo numericamente l'equazione di Schrödinger dipendente dal tempo utilizzando il metodo dello split order e la discretizzazione.

Il codice utilizza la libreria 'NumPy' per lavorare con matrici e vettori, la libreria 'SciPy' per calcolare gli autovalori e gli autovettori di una matrice tridiagonale e la libreria 'Matplotlib' per creare grafici.

La funzione tridiagonal_and_eigenproblem crea la matrice Hamiltoniana tridiagonale e ne calcola gli autovalori e gli autovettori utilizzando la funzione 'eigh_tridiagonal' del modulo SciPy.

La funzione 'momentum_space' calcola la rappresentazione in spazio dei momenti della funzione d'onda ottenuta dall'autovettore dell'Hamiltoniana. La funzione normalizza la funzione d'onda e calcola i valori dei momenti k, che sono necessari per la rappresentazione in spazio dei momenti.

La funzione 'plot' genera un grafico della funzione d'onda in spazio e tempo. In particolare, la funzione plotta la funzione d'onda in spazio, la funzione d'onda in spazio dei momenti, e la densità di probabilità in spazio e tempo.

Il codice include diverse funzioni per calcolare il tempo previsto per completare un determinato numero di iterazioni, visualizzare una barra di avanzamento con una stima del tempo rimanente, normalizzare un vettore e tracciare l'evoluzione della funzione d'onda nel tempo e la posizione media della particella.
Oscillatore Armonico Quantistico dipendente dal tempo

Informazioni

  • Categoria: Fisica
  • Url progetto:
  • About: Questo codice è un esercizio assegnato durante la laurea magistrale in Physics of Matter nel corso di Quantum Computation.
Il sistema è descritto da un'hamiltoniana che dipende dal tempo, come mostrato nell'equazione $$ \widehat{H} = \frac{\widehat{p}^{\,2}}{2} + \frac{\left(\widehat{q} - q_0(t)\right)^2}{2},$$ dove $\widehat{p}$ e $\widehat{q}$ sono rispettivamente gli operatori di quantità di moto e di posizione, e $q_0(t) = t/T$ con $t \in [0, T]$.

Lo stato fondamentale $\ket{\psi_0}$ dell'oscillatore armonico indipendente dal tempo viene evoluto nel tempo utilizzando il metodo dell'ordine di divisione. Per un'hamiltoniana indipendente dal tempo, lo stato fondamentale $\ket{\psi(t)}$ può essere ottenuto applicando l'operatore di evoluzione temporale $e^{-i\widehat{H}t}$ allo stato iniziale $\ket{\psi_0}$, tal che: $$\ket{\psi(t)} = e^{-i\widehat{H}t} \ket{\psi_0}.$$ Per risolvere il problema posso usare il fatto che se prendo un passo temporale sufficientemente piccolo $dt$, discretizzando il sistema, posso far evolvere lo stato usando $$ \ket{\psi(t+dt)} \approx e^{-i\widehat{H}\dd t} \ket{\psi(t)}$$ Tuttavia, per un'hamiltoniana dipendente dal tempo, l'operatore di evoluzione temporale non può essere calcolato direttamente e si ricorre invece al metodo dello split order.

Il metodo dello split order consiste nell'approssimare l'operatore di evoluzione $e^{-i\widehat{H} dt}$ utilizzando la formula di Baker-Campbell-Hausdorff. Questa approssimazione può essere scritta come $$ e^{-i\widehat{H} dt} \simeq e^{-i\frac{\widehat{V}}{2} dt} e^{-i\frac{\widehat{T}}{2} dt} e^{-i\frac{\widehat{V}}{2} dt},$$ dove $\widehat{T}=\widehat{p}^{, 2}/2$ è l'operatore di energia cinetica e $\widehat{V}=(\widehat{q}-q_0(t))^2/2$ è l'operatore di energia potenziale. L'evoluzione temporale dello stato fondamentale può essere calcolata utilizzando l'equazione
$$ \psi(x,t+ dt) \simeq e^{-i\frac{\widehat{V}}{2} dt} \mathcal{F}^{-1} \left[ e^{-i\frac{p^2}{2} dt} \mathcal{F}\left[ e^{-i\frac{\widehat{V}}{2} dt} \psi(x,t)\right] \right], $$
che prevede una trasformata di Fourier per ottenere un autostato nella rappresentazione della quantità di moto, seguita da una trasformata di anti-Fourier per tornare alla rappresentazione della posizione. L'evoluzione temporale viene eseguita iterativamente con piccoli passi temporali $ dt$ fino a un tempo massimo $T$.

Per risolvere l'equazione di Schrödinger per questa hamiltoniana, si può discretizzare lo spazio $x$ e scrivere l'hamiltoniana come una matrice tridiagonale. La discretizzazione dello spazio avviene dividendo l'intervallo spaziale $[-L, L]$ in $N$ parti uguali di larghezza $dx$, dove $L$ è la dimensione del sistema e $N$ è il numero di punti della griglia.

La discretizzazione dello spazio $x$ implica che la posizione $x_i$ sia data da $x_i = i*dx$ dove $i = 0, 1, 2, ..., N$. In questa discretizzazione, ogni componente dell'Hamiltoniana può essere approssimata dalla seguente matrice tridiagonale:
$$ H_{ij} = \left[\left(-\frac{m}{2 dx^2}\right) + \frac{m}{2} w^2 x_i^2\right] \delta_{ij} - \frac{m}{2 dx^2} \delta_{i,j-1} - \frac{m}{2 dx^2} \delta_{i,j+1} $$
dove $$ è il delta di Kronecker, che è uguale a $1$ se $i = j$ e $0$ altrimenti.

Questo codice simula l'evoluzione temporale di un oscillatore armonico quantistico. La simulazione viene eseguita risolvendo numericamente l'equazione di Schrödinger dipendente dal tempo utilizzando il metodo dello split order e la discretizzazione.

Il codice utilizza la libreria 'NumPy' per lavorare con matrici e vettori, la libreria 'SciPy' per calcolare gli autovalori e gli autovettori di una matrice tridiagonale e la libreria 'Matplotlib' per creare grafici.

La funzione tridiagonal_and_eigenproblem crea la matrice Hamiltoniana tridiagonale e ne calcola gli autovalori e gli autovettori utilizzando la funzione 'eigh_tridiagonal' del modulo SciPy.

La funzione 'momentum_space' calcola la rappresentazione in spazio dei momenti della funzione d'onda ottenuta dall'autovettore dell'Hamiltoniana. La funzione normalizza la funzione d'onda e calcola i valori dei momenti k, che sono necessari per la rappresentazione in spazio dei momenti.

La funzione 'plot' genera un grafico della funzione d'onda in spazio e tempo. In particolare, la funzione plotta la funzione d'onda in spazio, la funzione d'onda in spazio dei momenti, e la densità di probabilità in spazio e tempo.

Il codice include diverse funzioni per calcolare il tempo previsto per completare un determinato numero di iterazioni, visualizzare una barra di avanzamento con una stima del tempo rimanente, normalizzare un vettore e tracciare l'evoluzione della funzione d'onda nel tempo e la posizione media della particella.