Constraints and Dirac Brackets¶
da PowerShell -- jupyter nbconvert --to html notebook.ipynb
Poisson Bracket¶
$$\large \{f,g\}_{PB}$$- Fisicamente misura quanto $f$ cambia sotto la trasformazione canonica generata da $g$
- oppure misura la non-commutatività classica delle osservabili
- nel nostro caso, in forma simbolica :
- ma noi lo valutiamo in un punto ben specifico $\rightarrow$ otteniamo un numero
Dirac bracket: perché è diverso¶
- Poisson brackets non rispettano automaticamente i vincoli
- possono generare evoluzioni che escono dalla superficie vincolata
Dirac bracket¶
$$\large \{f,g\}_D$$- è costruito per eliminare i gradi di libertà non fisici
- per garantire che i vincoli valgano sempre
- per proiettare la dinamica sulla superficie dei vincoli
- matematicamente :
Interpretazione fisica finale¶
- I vincoli eliminano gradi di libertà
- Le osservabili non commutano più come prima
- Il Dirac bracket è la struttura corretta per:
- sistemi con vincoli di seconda classe
- quantizzazione consistente
“Quando un sistema hamiltoniano è fortemente vincolato, la struttura canonica dello spazio delle fasi cambia, e il Dirac bracket sostituisce il Poisson bracket come misura fisica delle variazioni osservabili.”
L'esercizio implementa un sistema hamiltoniano con vincoli di seconda classe in Python, e mostra come calcolare sia i Poisson bracket sia i Dirac bracket.
Definizione del sistema¶
Il sistema è definito da:
- Un insieme di \textbf{vincoli} $\phi_i(q,p)=0$, che limitano lo spazio delle fasi.
- Una \textbf{Hamiltoniana} $H(q,p)$, funzione delle coordinate $q$ e dei momenti $p$, che determina l'evoluzione dinamica.
In questo esercizio, i vincoli sono rappresentati come funzioni numeriche di $(q,p)$, e la Hamiltoniana come funzione di esempio:
$$\large \phi_1(q,p) = q^2 + p^2 - 1, \quad \phi_2(q,p) = q \, p - \frac{1}{2}, \quad H(q,p) = \frac{p^2}{2} + \frac{q^2}{2}. $$Calcolo della matrice dei vincoli¶
La $\textbf{matrice dei vincoli}$ $C_{ij}$ è definita tramite i Poisson bracket dei vincoli stessi:
$$\large C_{ij} = \{ \phi_i, \phi_j \}. $$In codice, questa matrice viene calcolata dalla funzione $\texttt{compute\_constraint\_matrix}$.
Poisson bracket¶
Il $\textbf{Poisson bracket}$ tra due osservabili $f(q,p)$ e $g(q,p)$ è definito come:
$$\large \{ f, g \} = \frac{\partial f}{\partial q} \frac{\partial g}{\partial p} - \frac{\partial f}{\partial p} \frac{\partial g}{\partial q}. $$In questo esercizio, il calcolo del Poisson bracket è implementato come placeholder numerico, ma concettualmente rappresenta la struttura fondamentale della dinamica hamiltoniana.
Dirac bracket¶
Quando il sistema è vincolato, i Poisson bracket non rispettano i vincoli durante l'evoluzione.
Il $\textbf{Dirac bracket}$ corregge questa situazione:
dove $C^{-1}$ è l'inversa della matrice dei vincoli.
Il Dirac bracket garantisce che:
cioè i vincoli sono preservati esattamente durante l’evoluzione.
In codice, questa operazione è realizzata dalla funzione £\texttt{dirac_bracket}$.
Esecuzione dell'esercizio¶
- Si definiscono vincoli e Hamiltoniana.
- Si calcola la matrice dei vincoli.
- Si calcola un esempio di Poisson bracket tra due funzioni $f$ e $g$.
- Si calcola un esempio di Dirac bracket tra le stesse funzioni.
- In questo esercizio, i due bracket risultano numericamente differenti, evidenziando l'effetto dei vincoli sulla dinamica del sistema.
Osservazioni didattiche¶
- Il Poisson bracket descrive la dinamica nello spazio delle fasi “esteso”, senza vincoli.
- Il Dirac bracket riduce la dinamica allo \textbf{spazio delle fasi fisicamente permesso}, eliminando direzioni non ammissibili.
- L'esercizio mostra in modo concreto come implementare questo formalismo in Python, anche se il calcolo effettivo dei bracket è qui rappresentato come valori numerici fittizi.
Punto vincolato sulla sfera di raggio $R$¶
Significato fisico¶
- La differenza tra i due bracket rappresenta quanto la dinamica “viene corretta” dai vincoli.
- In altre parole, il Dirac bracket mostra l’evoluzione effettiva della particella sulla sfera, mentre il Poisson bracket ignora che non può muoversi radialmente.
import numpy as np
# =========================
# 1. Poisson bracket
# =========================
def poisson_bracket(f, g, q, p, eps=1e-6):
"""
Poisson bracket numerico {f, g}
"""
pb = 0.0
n = len(q)
for i in range(n):
dq = np.zeros(n)
dp = np.zeros(n)
dq[i] = eps
dp[i] = eps
df_dq = (f(q + dq, p) - f(q - dq, p)) / (2 * eps)
df_dp = (f(q, p + dp) - f(q, p - dp)) / (2 * eps)
dg_dq = (g(q + dq, p) - g(q - dq, p)) / (2 * eps)
dg_dp = (g(q, p + dp) - g(q, p - dp)) / (2 * eps)
pb += df_dq * dg_dp - df_dp * dg_dq
return pb
# =========================
# 2. Vincoli della sfera
# =========================
def f(q, p):
return np.dot(q, p) # funzione radiale
def g(q, p):
return p[0] # componente x del momento
# =========================
# 3. Matrice dei vincoli
# =========================
def constraint_matrix(q, p, R):
C = np.zeros((2, 2))
def f1(q, p): return phi1(q, p, R)
def f2(q, p): return phi2(q, p)
C[0, 0] = poisson_bracket(f1, f1, q, p)
C[0, 1] = poisson_bracket(f1, f2, q, p)
C[1, 0] = poisson_bracket(f2, f1, q, p)
C[1, 1] = poisson_bracket(f2, f2, q, p)
return C
# =========================
# 4. Dirac bracket
# =========================
def dirac_bracket(f, g, q, p, R):
def f1(q, p): return phi1(q, p, R)
def f2(q, p): return phi2(q, p)
phi = [f1, f2]
C = constraint_matrix(q, p, R)
C_inv = np.linalg.inv(C)
correction = 0.0
for a in range(2):
for b in range(2):
correction += (
poisson_bracket(f, phi[a], q, p)
* C_inv[a, b]
* poisson_bracket(phi[b], g, q, p)
)
return poisson_bracket(f, g, q, p) - correction
# Parametri
R = 1.0
q = np.array([1.0, 0.0, 0.0])
p = np.array([0.5, 0.2, 0.0])
pb = poisson_bracket(f, g, q, p) # Poisson bracket
db = dirac_bracket(f, g, q, p, R) # Dirac bracket
print(f"Poisson Bracket = {pb:.2f}")
print(f"Dirac Bracket = {db:.2f}")
Poisson Bracket = 0.50 Dirac Bracket = 0.00