Liouville Equations¶
da PowerShell -- jupyter nbconvert --to html notebook.ipynb
Teorema di Liouville (meccanica hamiltoniana).¶
Il teorema di Liouville afferma che l'evoluzione temporale di un sistema dinamico descritto da equazioni di Hamilton preserva il volume nello spazio delle fasi.
Più precisamente, se si considera un insieme di stati iniziali del sistema, rappresentati come una regione dello spazio delle fasi delle coordinate generalizzate e dei momenti coniugati, l'evoluzione hamiltoniana trasporta tale regione in un'altra regione che ha lo stesso volume.
In altre parole, il flusso generato dall'Hamiltoniana è incomprimibile: le traiettorie nello spazio delle fasi possono deformare, allungare o schiacciare localmente una regione, ma il volume totale rimane invariato nel tempo.
Questo risultato implica che la densità di probabilità nello spazio delle fasi, se trasportata lungo il moto hamiltoniano, rimane costante lungo le traiettorie del sistema.
Il teorema di Liouville è una conseguenza diretta della struttura simplettica della meccanica hamiltoniana e gioca un ruolo fondamentale nella meccanica statistica, in quanto giustifica la conservazione della densità microscopica e la definizione degli insiemi statistici all'equilibrio.
Spiegazione della funzione $liouville\_local$¶
Si consideri una funzione che intende verificare localmente il teorema di Liouville nello spazio delle fasi $(q,p)$ di un sistema hamiltoniano.
1. Firma della funzione}
La funzione dipende dalle variabili $q$ e $p$, che rappresentano rispettivamente la coordinata generalizzata e il momento coniugato, e da parametri fisici come la massa $m$ e una frequenza caratteristica $\omega$. L'obiettivo è analizzare il comportamento locale di una densità di probabilità nello spazio delle fasi.
2. Campo di velocità nello spazio delle fasi
Il calcolo $$\large (\dot q, \dot p) = \texttt{hamilton\_equations}(q,p,m,\omega) $$
introduce il campo di flusso hamiltoniano $$\large \mathbf{v}(q,p) = (\dot q, \dot p), $$
che descrive l'evoluzione delle traiettorie nello spazio delle fasi secondo le equazioni di Hamilton.
3. Derivate della densità di probabilità
Si assume implicitamente una densità della forma $$\large \rho(q,p) = e^{-\frac{1}{2}(q^2 + p^2)}. $$
Da questa scelta segue che le derivate parziali sono $$\large \frac{\partial \rho}{\partial q} = -q\,\rho, \qquad \frac{\partial \rho}{\partial p} = -p\,\rho. $$
Questa è un'ipotesi modellistica e non una conseguenza diretta del teorema di Liouville.
4. Termine convettivo dell'equazione di continuità
Il termine $$\large (\nabla \rho)\cdot \mathbf{v} = \frac{\partial \rho}{\partial q},\dot q\frac{\partial \rho}{\partial p},\dot p $$
rappresenta il contributo convettivo al trasporto della densità lungo il flusso hamiltoniano nello spazio delle fasi.
5. Equazione di Liouville
L'equazione di Liouville per una densità nello spazio delle fasi è $$\large \frac{\partial \rho}{\partial t}\nabla \cdot (\rho \mathbf{v}) = 0. $$
Sviluppando la divergenza si ottiene $$\large \frac{\partial \rho}{\partial t}\mathbf{v}\cdot\nabla\rho\rho,(\nabla\cdot\mathbf{v}) = 0. $$
Nel codice considerato viene calcolato soltanto il termine $\mathbf{v}\cdot\nabla\rho$, mentre il termine $\nabla\cdot\mathbf{v}$ non viene valutato esplicitamente.
6. Interpretazione del risultato
La funzione restituisce il termine convettivo del trasporto della densità. Nel caso di un flusso hamiltoniano vale $$\large \nabla\cdot\mathbf{v} = 0, $$
il che implica che la conservazione della densità nello spazio delle fasi è dovuta esclusivamente al trasporto lungo le traiettorie del sistema.
Conclusione
La funzione non costituisce una dimostrazione generale del teorema di Liouville, ma fornisce una verifica locale del comportamento della densità lungo il flusso hamiltoniano, sotto ipotesi specifiche sulla forma della distribuzione.
Divergenza non locale del flusso hamiltoniano¶
Si consideri un sistema hamiltoniano con una coordinata generalizzata $q$ e il momento coniugato $p$, descritto da un'Hamiltoniana $H(q,p)$.
1. Flusso hamiltoniano nello spazio delle fasi
Le equazioni di Hamilton definiscono il campo di velocità nello spazio delle fasi: $$\large \dot q = \frac{\partial H}{\partial p}, \qquad \dot p = -\frac{\partial H}{\partial q}. $$
Questo campo vettoriale può essere scritto come $$\large \mathbf{v}(q,p) = \begin{pmatrix} \dot q \\ \dot p \end{pmatrix}. $$
Divergenza del flusso nello spazio delle fasi
Per definizione, la divergenza di un campo vettoriale nello spazio delle fasi è $$\large \nabla \cdot \mathbf{v} = \frac{\partial \dot q}{\partial q}\frac{\partial \dot p}{\partial p}. $$
Sostituendo le espressioni del flusso hamiltoniano si ottiene
$$\large \nabla \cdot \mathbf{v} = \frac{\partial}{\partial q} \left( \frac{\partial H}{\partial p} \right)\frac{\partial}{\partial p} \left( -\frac{\partial H}{\partial q} \right). $$3. Derivate seconde miste
La precedente espressione si può riscrivere come $$\large \nabla \cdot \mathbf{v} = \frac{\partial^2 H}{\partial q,\partial p}\frac{\partial^2 H}{\partial p,\partial q}. $$ Questa forma mostra che la divergenza dipende unicamente dalle derivate seconde dell'Hamiltoniana.
4. Carattere non locale
La quantità ottenuta non dipende dal valore puntuale di una singola traiettoria, ma dalla struttura differenziale dell'Hamiltoniana in un intorno dello spazio delle fasi. Per questo motivo il controllo della divergenza è detto $non\; locale$ o $strutturale$.
5. Teorema di Schwarz
Se l'Hamiltoniana è sufficientemente regolare ($H \in C^2$), vale il teorema di Schwarz sulle derivate miste:tributo $$\large \frac{\partial^2 H}{\partial q\,\partial p} = \frac{\partial^2 H}{\partial p\,\partial q}. $$
Di conseguenza, $$\large \nabla \cdot \mathbf{v} = 0. $$
6. Interpretazione geometrica
L'annullamento della divergenza implica che il flusso hamiltoniano è incomprimibile nello spazio delle fasi. Le regioni di spazio delle fasi possono deformarsi sotto l'evoluzione temporale, ma il loro volume rimane invariato.
7. Significato fisico
La condizione $$\large \nabla \cdot \mathbf{v} = 0 $$ esprime il contenuto del teorema di Liouville: la conservazione del volume nello spazio delle fasi è una proprietà geometrica del formalismo hamiltoniano, indipendente dalla forma specifica dell'Hamiltoniana, purché essa sia sufficientemente regolare.
import numpy as np
def simple_harmonic_oscillator(q, p, m, omega):
return p**2/(2*m) + 0.5*m*(omega**2)*q**2
def hamilton_equations(q, p, m, omega):
"""
Solve Hamilton's equations for a system.
:param q: Generalized coordinates.
:param p: Generalized momenta.
:param m: Mass.
:param omega: Angular velocity
:return:
Time derivatives of coordinates and momenta.
"""
dqdt = p/m
dpdt = -m*omega**2 * q
return dqdt, dpdt
def rho(q, p):
return np.exp(-0.5*(q**2 + p**2))
def liouville_local(q, p, m, omega):
"""
Validate Liouville's theorem by checking phase space
incompressibility.
:param q: Generalized coordinates.
:param p: Generalized momenta.
:param omega: Angular velocity
:return:
Result of the Liouville equation.
"""
dqdt, dpdt = hamilton_equations(q, p, m, omega)
# derivate parziali della densità
drho_dq = -q * rho(q,p)
drho_dp = -p * rho(q,p)
# diverg. del flusso nello spazio delle fasi
div = (drho_dq * dqdt) + (drho_dp * dpdt)
# Liouville: dρ/dt + div(ρv) = 0
return div
m = 1.0
omega = 2.0
q = 0.0
p = 1.0
H = simple_harmonic_oscillator(q, p, m, omega)
L = liouville_local(q, p, m, omega)
print("Hamiltoniano:", H)
print("Liouville local:", L)
m = 1.0
omega = 2.0
q = np.array([0.0])
p = np.array([1.0])
H = simple_harmonic_oscillator(q, p, m, omega)
def phase_space_divergence(q, p, m, omega):
"""
Compute the divergence of the Hamiltonian phase space flow.
:param q: Generalized coordinates.
:param p: Generalized momenta.
:param H: Hamiltonian function.
:return:
Divergence of the phase space.
"""
# ∂q̇/∂q = ∂(p/m)/∂q = 0
term1 = 0.0
# ∂(ṗ)/∂p = ∂(-m ω² q)/∂p = 0
term2 = 0.0
return term1 + term2
print("Phase space divergence:", phase_space_divergence(q, p, 1.0, 2.0) )
# --------------------------------------------------------------------------- CASO NON LOCALE ----------
import numpy as np
# Hamiltoniano: oscillatore armonico
def H(q, p, m=1.0, omega=2.0):
return p**2/(2*m) + 0.5*m*(omega**2)*q**2
# Derivate prime
def H_q(q, p, m=1.0, omega=2.0):
return m * omega**2 * q
def H_p(q, p, m=1.0, omega=2.0):
return p / m
# Derivate miste seconde (entrambe = 0 per l'oscillatore armonico)
def H_qp(q, p, m=1.0, omega=2.0):
return np.zeros_like(q) # forma dell'array di q
def H_pq(q, p, m=1.0, omega=2.0):
return np.zeros_like(q)
# Pacchetto di derivate
H_qp_dict = {
'H_q': H_q,
'H_p': H_p,
'H_qp': H_qp,
'H_pq': H_pq
}
def phase_space_divergence_no_local(H_qp, q, p):
"""
Divergence of Hamiltonian flow on arrays q, p.
"""
H_q_val = H_qp['H_q'](q, p)
H_p_val = H_qp['H_p'](q, p)
H_qp_sec = H_qp['H_qp'](q, p)
H_pq_sec = H_qp['H_pq'](q, p)
return H_qp_sec - H_pq_sec
# ===== ESECUZIONE =====
q = np.linspace(-0.1, 0.1, 10)
p = np.linspace(0.9, 1.1, 10)
div = phase_space_divergence_no_local(H_qp_dict, q, p)
print("Divergenza del flusso nello spazio delle fasi:")
print(div)
Hamiltoniano: 0.5 Liouville local: 0.0 Phase space divergence: 0.0 Divergenza del flusso nello spazio delle fasi: [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
Calcolo numerico della divergenza del flusso hamiltoniano¶
Valutazione numerica di $\nabla \cdot (\dot{q}, \dot{p}) = \frac{\partial \dot{q}}{\partial q} + \frac{\partial \dot{p}}{\partial p}$ per sistemi Hamiltoniani¶
Verifica incompressibilità del flusso Hamiltoniano (teorema di Liouville)¶
import numpy as np
def phase_space_divergence(q, p, H):
divergence = 0
for i in range(len(q)):
divergence += np.gradient( np.gradient(H, axis=1), axis=0) \
+ np.gradient(-np.gradient(H, axis=0), axis=1)
return divergence
# --- Setup oscillatore armonico ---
q = np.linspace(-0.1, 0.1, 50)
p = np.linspace(0.9, 1.1, 50)
Q, P = np.meshgrid(q, p, indexing='ij')
m = 1.0
omega = 2.0
def H_func(Q, P):
return P**2/(2*m) + 0.5*m*(omega**2)*Q**2
H = H_func(Q, P)
div = phase_space_divergence(q, p, H)
print(div)
[[0. 0. 0. ... 0. 0. 0.] [0. 0. 0. ... 0. 0. 0.] [0. 0. 0. ... 0. 0. 0.] ... [0. 0. 0. ... 0. 0. 0.] [0. 0. 0. ... 0. 0. 0.] [0. 0. 0. ... 0. 0. 0.]]