Trasformazioni canoniche¶
da PowerShell -- jupyter nbconvert --to html notebook.ipynb
Esempio didattico di trasformazione canonica¶
Oscillatore armonico e variabili azione--angolo¶
Sistema di partenza
Consideriamo l’oscillatore armonico unidimensionale con Hamiltoniana
$$\large H(q,p) = \frac{p^2}{2m} + \frac{1}{2} m \omega^2 q^2 $$Le equazioni di Hamilton sono
$$\large \dot q = \frac{\partial H}{\partial p} = \frac{p}{m}, \qquad \dot p = -\frac{\partial H}{\partial q} = -m\omega^2 q $$Il moto è periodico, ma la dinamica è descritta da equazioni accoppiate.
Obiettivo della trasformazione canonica
Cerchiamo una trasformazione canonica $$\large (q,p) \longrightarrow (Q,P) $$ tale che:
- una variabile sia costante del moto;
- l’Hamiltoniana dipenda da una sola variabile;
- le equazioni del moto siano immediatamente integrabili.
Per sistemi periodici la scelta naturale è passare alle $variabili azione--angolo$.
Trasformazione canonica
Definiamo la trasformazione
$$\large \begin{aligned} q &= \sqrt{\frac{2P}{m\omega}} \, \sin Q \\ p &= \sqrt{2m\omega P} \, \cos Q \end{aligned} $$Essa è una trasformazione canonica (preserva le parentesi di Poisson).
Hamiltoniana trasformata
Sostituendo nella Hamiltoniana originale:
$$\large \begin{aligned} H &= \frac{p^2}{2m} + \frac{1}{2} m\omega^2 q^2 \\ &= \frac{1}{2m} (2m\omega P \cos^2 Q) + \frac{1}{2} m\omega^2 \left( \frac{2P}{m\omega} \sin^2 Q \right) \\ &= \omega P (\cos^2 Q + \sin^2 Q) \\ &= \omega P \end{aligned} $$Quindi l’Hamiltoniana trasformata è
$$\large H(P) = \omega P $$e non dipende dalla coordinata (Q).
Nuove equazioni di Hamilton
Le equazioni del moto diventano
$$\large \dot P = -\frac{\partial H}{\partial Q} = 0 $$$$\large \dot Q = \frac{\partial H}{\partial P} = \omega $$da cui
$$\large P = \text{costante}, \qquad Q(t) = \omega t + Q_0 $$Interpretazione fisica
- (P) è l’azione, proporzionale all’energia del sistema;
- (Q) è l’angolo, che cresce linearmente nel tempo;
- la dinamica è completamente esplicitata.
Vantaggio della trasformazione canonica
Conclusione: la trasformazione canonica non è un semplice cambio di coordinate, ma uno strumento per rendere manifesta la struttura della dinamica.
from tabella import *; ddc()
| Coordinate originali | Coordinate trasformate | |
|---|---|---|
| 0 | Equazioni accoppiate | Equazioni disaccoppiate |
| 1 | Soluzione trigonometrica | Soluzione immediata |
| 2 | Energia implicita | $H = \omega P$ |
| 3 | Moto poco trasparente | Moto lineare in $Q$ |
import sympy as sp
P, Q, m, w = sp.symbols('P Q m w', positive=True)
q = sp.sqrt(2*P/(m*w)) * sp.sin(Q)
p = sp.sqrt(2*m*w*P) * sp.cos(Q)
H = p**2/(2*m) + m*w**2*q**2/2
sp.simplify(H)
Hamiltoniana del problema di Keplero¶
Consideriamo il moto di una particella di massa $m$ soggetta a un potenziale centrale attrattivo di tipo newtoniano:
$$\large V(r) = -\frac{k}{r}, \qquad k > 0 $$In coordinate polari piane $(r,\varphi)$, l’Hamiltoniana è
$$\large H(r,p_r,p_\varphi) = \frac{p_r^2}{2m} + \frac{p_\varphi^2}{2mr^2} - \frac{k}{r} $$Poiché $\varphi$ è coordinata ciclica, il momento angolare
$$\large p_\varphi = L $$è una costante del moto.
Riduzione a un problema unidimensionale¶
Fissato $L$, il moto radiale è governato da un’Hamiltoniana efficace:
$$\large H_{\text{eff}}(r,p_r) = \frac{p_r^2}{2m} + \frac{L^2}{2mr^2} - \frac{k}{r} $$Il moto è limitato per energie negative $E < 0$, con orbite ellittiche.
Azioni del sistema¶
Il problema di Keplero è completamente integrabile. Introduciamo le variabili azione:
- Azione angolare:
$$\large J_\varphi = \frac{1}{2\pi} \oint p_\varphi \, d\varphi = L $$
- Azione radiale:
$$\large J_r = \frac{1}{2\pi} \oint p_r \, dr $$
Per il problema di Keplero si ottiene il risultato notevole:
$$\large J_r = \frac{mk}{\sqrt{-2mE}} - L $$Hamiltoniana in funzione delle azioni¶
Definiamo l’azione totale
$$\large J = J_r + J_\varphi $$L’energia può essere espressa esclusivamente in funzione di $J$:
$$\large H(J) = -\frac{m k^2}{2 J^2} $$Osservazione cruciale: l’Hamiltoniana dipende da una sola combinazione delle azioni. Questo riflette la $degenerazione del problema di Keplero$.
Variabili angolo e equazioni del moto¶
Le variabili angolo coniugate $(\theta_r, \theta_\varphi)$ soddisfano
$$\large \dot{\theta}_i = \frac{\partial H}{\partial J_i} $$Poiché
$$\large H = H(J_r + J_\varphi), $$segue che
$$\large \dot{\theta}_r = \dot{\theta}_\varphi = \frac{\partial H}{\partial J} = \frac{m k^2}{J^3} $$Significato dinamico¶
- Le due frequenze sono uguali:
$$\large \omega_r = \omega_\varphi $$
Il moto è periodico e chiuso (orbite ellittiche).
Non vi è precessione del perielio.
Questa proprietà è specifica del potenziale $1/r$ ed è legata all’esistenza di una costante del moto nascosta (vettore di Runge--Lenz).
Conclusione¶
Nel problema di Keplero la trasformazione canonica verso le variabili azione--angolo:
- risolve completamente il problema;
- rende evidente la simmetria dinamica;
- spiega la chiusura delle orbite;
- mostra perché il sistema è massimamente integrabile.
Essa rappresenta uno degli esempi più profondi e istruttivi dell’uso delle trasformazioni canoniche in meccanica analitica.
Vantaggio della trasformazione canonica¶
from tabella import *; ddk()
| Coordinate originali | Variabili azione--angolo | |
|---|---|---|
| 0 | Equazioni non lineari | Moto lineare sugli angoli |
| 1 | Costanti del moto implicite | Costanti del moto esplicite |
| 2 | Orbita da ricostruire | Frequenze immediatamente note |
| 3 | Simmetria nascosta | Degenerazione manifesta |
Esercizio del libro¶
import sympy as sp
# Define symbolic variables
q, p, Q, P, t = sp.symbols('q p Q P t', real=True)
F1, F2, F3, F4 = sp.Function('Fl')(q, Q, t), sp.Function('F2')(q, P, t), sp.Function('F3')(p, Q, t), sp.Function('F4')(p, P, t)
# Relations for generating functions
def generating_functions():
"""
Calculate the relations for four types of generating functions.
:return:
List of transformation relations.
"""
relations = [
(sp.diff(F1, q), -sp.diff(F1, Q)),
(sp.diff(F2, q), sp.diff(F2, Q)),
(-sp.diff(F3, q), sp.diff(F3, P)),
(-sp.diff(F4, p), sp.diff(F4, P))
]
return relations
# Check if a transformation is canonical by symplectic condition
def is_canonical_transformation(J):
"""
Verify if a transformation is canonical using the symplectic
condition.
:param J: Jacobian matrix of the transformation.
:retum:
True if the transformation is canonical, False otherwise.
"""
dim = J.shape[0] // 2
Omega = sp.BlockMatrix([
[sp.zeros(dim), sp.eye(dim)],
[-sp.eye(dim), sp.zeros(dim)]
])
return (J.T * Omega * J).equals(Omega)
# Example of checking a canonical transformation
def check_example_transformation():
"""
Test an example canonical transformation matrix.
:return:
Boolean result of whether the example matrix is canonical.
"""
J = sp.Matrix([
[0, 1],
[-1, 0]
])
return is_canonical_transformation(J)
#Hamilton's Principal Function for Hamilton-Jacobi Equation
def hamilton_jacobi():
"""
Solve a basic example of the Hamilton-Jacobi equation.
:return:
Hamilton's principal function expressed in terms of its arguments.
"""
S, H = sp.Function('S')(q, t), sp.Function('H')(q, p, t)
return sp.expand(H.subs(p, sp.diff(S, q)) + sp.diff(S, t))
# Execute the functions and print results
relations = generating_functions()
canonical_result = check_example_transformation()
jacobi_solution = hamilton_jacobi()
print("Generative Function Relations:", relations)
print("Is Example Transformation Canonical?:", "Yes" if canonical_result else "No")
print("Hamilton-Jacobi Solution Example:", jacobi_solution)
Generative Function Relations: [(Derivative(Fl(q, Q, t), q), -Derivative(Fl(q, Q, t), Q)), (Derivative(F2(q, P, t), q), 0), (0, 0), (-Derivative(F4(p, P, t), p), Derivative(F4(p, P, t), P))] Is Example Transformation Canonical?: Yes Hamilton-Jacobi Solution Example: H(q, Derivative(S(q, t), q), t) + Derivative(S(q, t), t)