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.

In [1]:
from tabella import *; ddc()
Out[1]:
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$
In [3]:
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)
Out[3]:
$\displaystyle P w$

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¶

In [1]:
from tabella import *; ddk()
Out[1]:
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¶

In [10]:
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)
In [ ]: