Action-Angle Variables¶
da PowerShell -- jupyter nbconvert --to html notebook.ipynb
Utilità¶
Le variabili azione--angolo costituiscono un sistema di coordinate canoniche particolarmente adatto allo studio dei sistemi hamiltoniani integrabili. In tali variabili la dinamica assume una forma estremamente semplice, rendendo trasparente la struttura del moto e la sua stabilità.
Sistemi integrabili¶
Un sistema hamiltoniano con $n$ gradi di libertà è detto integrabile se esistono $n$ integrali primi indipendenti e in involuzione: $$\large \{F_i,F_j\}=0, \qquad i,j=1,\dots,n . $$
In questo caso il moto è confinato su un toro $n$-dimensionale nello spazio delle fasi.
Definizione delle variabili azione}¶
Sia $(q_i,p_i)$ un sistema di coordinate canoniche. Le variabili azione sono definite come $$\large J_i = \frac{1}{2\pi} \oint_{\gamma_i} p_i \, dq_i , \qquad i=1,\dots,n , $$ dove $\gamma_i$ è un ciclo chiuso indipendente sul toro invariante.
Le azioni sono costanti del moto: $$\large \dot{J}_i = 0 . $$
Variabili angolo¶
Alle variabili azione sono coniugate le variabili angolo $\theta_i$, definite modulo $2\pi$: $$\large \theta_i \in [0,2\pi) . $$
Esse evolvono linearmente nel tempo: $$\large \dot{\theta}_i = \omega_i(J), $$ dove $$\large \omega_i(J) = \frac{\partial H(J)}{\partial J_i} $$ sono le frequenze fondamentali del sistema.
Forma dell'Hamiltoniana¶
In coordinate azione--angolo l'Hamiltoniana dipende solo dalle azioni: $$\large H = H(J_1,\dots,J_n) . $$
Le equazioni di Hamilton diventano $$\large \dot{J}_i = -\dfrac{\partial H}{\partial \theta_i} = 0, $$ $$\large \dot{\theta}_i = \dfrac{\partial H}{\partial J_i} = \omega_i(J). $$
Soluzione del moto¶
La soluzione generale è $$\large \theta_i(t) = \omega_i t + \theta_{i0}, \qquad J_i(t) = J_{i0}. $$
Il moto è quindi quasi-periodico sul toro invariante.
Collegamento con Hamilton--Jacobi¶
Le variabili azione--angolo emergono naturalmente dalla teoria di Hamilton--Jacobi.
Se $S(q,\alpha,t)$ è una soluzione completa dell'equazione di Hamilton--Jacobi, le costanti $\alpha_i$ possono essere identificate con le azioni $J_i$.
La funzione generatrice canonica è $$\large S(q,J,t) = W(q,J) - H(J)t . $$
Le variabili angolo sono ottenute come $$\large \theta_i = \frac{\partial S}{\partial J_i} = \frac{\partial W}{\partial J_i} - \omega_i t . $$
Esempio: oscillatore armonico 1D¶
Per l'oscillatore armonico $$\large H = \frac{p^2}{2m} + \frac{1}{2}m\omega^2 q^2 , $$ l'azione vale $$\large J = \frac{1}{2\pi} \oint p\,dq = \frac{E}{\omega}. $$
L'Hamiltoniana in termini di $J$ è $$\large H(J) = \omega J , $$ e la variabile angolo evolve come $$\large \theta(t) = \omega t + \theta_0 . $$
Il moto è $$\large q(t) = \sqrt{\frac{2J}{m\omega}} \sin\theta(t). $$
Significato geometrico¶
Le traiettorie di un sistema integrabile giacciono su tori invarianti nello spazio delle fasi. Le variabili azione parametrizzano i tori, mentre le variabili angolo descrivono il moto uniforme su di essi.
Variabili azione--angolo e caos¶
Le variabili azione--angolo esistono globalmente solo per sistemi integrabili. In presenza di perturbazioni non integrabili, i tori invarianti possono rompersi, dando origine a dinamiche caotiche.
Questo fenomeno è descritto dal teorema KAM, che garantisce la persistenza di parte dei tori per perturbazioni sufficientemente piccole.
import numpy as np
from scipy.integrate import quad
def hamiltonian(J):
"""
Hamiltonian expressed in terms of action variables.
:param J: Array of action variables.
:return:
Value of the Hamiltonian.
"""
# Example for harmonic oscillator inhere H is quadratic in J
return J[0] # For a simple harmonic oscillator, H = J
def frequency(J):
"""
Calculate frequencies from the Hamiltonian.
:param J: Array of action variables.
:retum:
Array of frequencies (omega).
"""
return np.array([hamiltonian(J)])
def action_integral(E, m, omega):
"""
Calculate the action variable J for a harmonic oscillator.
"""
# turning point
qmax = np.sqrt(2 * E / (m * omega**2))
# integrand p(q)
integrand = lambda q: np.sqrt(2 * m * (E - 0.5 * m * omega**2 * q**2))
# integral from 0 to qmax; multiply by 2 for the full cycle
J = 2 * quad(integrand, 0, qmax)[0]
return J / (2 * np.pi)
def generate_action_angle(q0, p0, m, omega):
"""
Generate action-angle variables.
:param qO: Initial position.
:param pO: Initial momentum.
:param m: Mass.
:param omega: Angular frequency.
:retum:
Action and angle variables.
"""
E = (p0**2 / (2 * m)) +0.5*m* omega**2 * q0**2
J = action_integral(E, m, omega)
theta = np.arctan2(q0, p0 / (m * omega))
return J, theta
def transform_to_action_angle(init_conditions, m, omega):
"""
Wrapper function to transform set of initial conditions.
:param init_conditions: List of tuples (q0, p0).
:param m: Mass.
:param omega: Angular frequency.
:return:
List of action-angle pairs.
"""
action_angle_pairs = []
for q0, p0 in init_conditions:
action_angle_pairs.append(generate_action_angle(q0, p0, m, omega))
return action_angle_pairs
# Example transformation process with initial conditions for a ID
# harmonic oscillator
initial_conditions = [(1.0, 0.0), (0.0, 1.0), (0.5, 0.5)]
mass =1.0 # Mass of the oscillator
angular_freq =1.0 # Natural frequency of the oscillator
action_angle_vars = transform_to_action_angle(initial_conditions, mass, angular_freq)
# Print the results
print("Action-Angle Variables:")
for (J, theta) in action_angle_vars:
print(f"Action: {J}, Angle: {theta}")
Action-Angle Variables: Action: 0.24999999999999992, Angle: 1.5707963267948966 Action: 0.24999999999999992, Angle: 0.0 Action: 0.12499999999999999, Angle: 0.7853981633974483
Approfondimento : Calcolo azione per l’oscillatore armonico¶
Consideriamo l’oscillatore armonico unidimensionale con Hamiltoniana $$\large H(q,p)=\frac{p^2}{2m}+\frac{1}{2}m\omega^2 q^2 = E . $$
Momento come funzione della coordinata
Dalla conservazione dell’energia si ricava: $$\large p^2 = 2mE - m^2\omega^2 q^2 , $$ da cui $$\large p(q)=\sqrt{2mE - m^2\omega^2 q^2}. $$
Definizione della variabile azione
La variabile azione è definita come $$\large J = \frac{1}{2\pi}\oint p\,dq , $$ dove l’integrale è esteso a un’orbita chiusa nello spazio delle fasi.
Limiti di integrazione
I punti di inversione del moto sono dati da $$\large q_{\max} = A = \sqrt{\frac{2E}{m\omega^2}} . $$
Per simmetria dell’orbita: $$\large \oint p\,dq = 4\int_0^A \sqrt{2mE - m^2\omega^2 q^2}\,dq . $$
Calcolo dell’integrale
Introduciamo la sostituzione trigonometrica $$\large q = A\sin\theta, \qquad dq = A\cos\theta\, d\theta , $$ con $$\large A=\sqrt{\frac{2E}{m\omega^2}} . $$
Allora $$\large \sqrt{2mE - m^2\omega^2 q^2} = m\omega A\cos\theta . $$
L’integrale diventa: $$\large \int_0^A \sqrt{2mE - m^2\omega^2 q^2}\,dq = \int_0^{\pi/2} m\omega A^2 \cos^2\theta\, d\theta . $$
Poiché $$\large \int_0^{\pi/2} \cos^2\theta\, d\theta = \frac{\pi}{4}, $$ si ottiene: $$\large \int_0^A \sqrt{2mE - m^2\omega^2 q^2}\,dq = \frac{\pi}{4} m\omega A^2 . $$
Integrale sull’orbita completa
Moltiplicando per 4: $$\large \oint p\,dq = 4 \times \frac{\pi}{4} m\omega A^2 = \pi m\omega A^2 . $$
Sostituendo $$\large A^2 = \frac{2E}{m\omega^2}, $$ segue: $$\large \oint p\,dq = \pi m\omega \frac{2E}{m\omega^2} = \frac{2\pi E}{\omega}. $$
Risultato finale
La variabile azione vale quindi: $$\large J = \frac{1}{2\pi}\oint p\,dq = \frac{1}{2\pi}\frac{2\pi E}{\omega} = \frac{E}{\omega}. $$
$$\large \boxed{J=\frac{E}{\omega}} $$Nota sulle convenzioni
In alcuni testi la variabile azione è definita senza il fattore $2\pi$: $$\large \tilde{J} = \oint p\,dq . $$
In tal caso: $$\large \tilde{J} = \frac{2\pi E}{\omega}, \qquad E = \omega \frac{\tilde{J}}{2\pi}. $$
Le due definizioni differiscono solo per una normalizzazione e corrispondono a una diversa scelta del periodo della variabile angolo.