Runge-Lenz Vector¶

da PowerShell -- jupyter nbconvert --to html notebook.ipynb

Esercizio del libro¶

Vettore di Runge--Lenz¶

Nel problema dei due corpi con potenziale centrale di tipo kepleriano $$\large V(r) = -\frac{k}{r}, $$ oltre all'energia e al momento angolare, esiste una quantità conservata nota come $\textit{vettore di Runge--Lenz}$.

Per una particella di massa ridotta $\mu$, posizione $\mathbf{r}$ e momento $\mathbf{p}$, esso è definito come $$\large \mathbf{A} = \frac{1}{\mu},(\mathbf{p} \times \mathbf{L})k,\frac{\mathbf{r}}{r},\qquad \mathbf{L} = \mathbf{r} \times \mathbf{p}. $$

Il vettore $\mathbf{A}$ giace nel piano orbitale ed è diretto verso il perielio dell'orbita. Il suo modulo è proporzionale all'eccentricità $e$ dell'orbita: $$\large |\mathbf{A}| = k\, e. $$

In particolare:

  • $e = 0$ (orbita circolare) $\Rightarrow \mathbf{A} = \mathbf{0}$,
  • $0 < e < 1$ (orbita ellittica) $\Rightarrow \mathbf{A} \neq \mathbf{0}$,
  • $e = 1$ (orbita parabolica),
  • $e > 1$ (orbita iperbolica).

La conservazione del vettore di Runge--Lenz riflette una simmetria dinamica nascosta del potenziale $1/r$, non associata a una semplice invarianza geometrica nello spazio. Essa è responsabile della chiusura delle orbite kepleriane ed è legata alla degenerazione accidentale dello spettro dell'atomo di idrogeno nel caso quantistico.

In [6]:
import numpy as np 

def angular_momentum(r, p):
    '''
    Compute the angular momentum vector.
        :param r: Position vector.
        :param p: Momentum vector.
    :return: 
        Angular momentum vector.
    '''
    return np.cross(r, p)

def runge_lenz_vector(r, p, L, mu, k):
    '''
    Compute the Runge-Lenz vector.
        :param r: Position vector.
        :param p: Momentum vector.
        :param L: Angular momentum vector.
        :param mu: Reduced mass.
        :param k: Constant related to the potential strength.
    :return: 
        Runge-Lenz vector.
    '''
    r_magnitude = np.linalg.norm(r)
    return np.cross(p, L) - mu * k * r / r_magnitude

def hamiltonian(p, mu, r, k):
    '''
    Computes the Hamiltonian for the two-body central force problem.
        :param p: Momentum magnitude.
        :param mu: Reduced mass.
        :param r: Position magnitude.
        :param k: Constant related to the strength of the potential.
    :return: 
        Hamiltonian value.
    '''
    kinetic_energy = p ** 2 / (2 * mu)
    potential_energy = -k / r
    return kinetic_energy + potential_energy

# Example values for position, momentum, angular momentum, and constants
r = np.array([1.0, 0.0, 0.0])
p = np.array([0.2, 1.0, 0.1])
mu = 1.0 # Reduced mass
k = 1.0 # Strength of the potential

# Compute angular momentum
L = angular_momentum(r, p)
# Compute Runge-Lenz vector
A = runge_lenz_vector(r, p, L, mu, k)
# Compute Hamiltonian
H = hamiltonian(np.linalg.norm(p), mu, np.linalg.norm(r), k)

print("Angular Momentum:", L)
print("Runge-Lenz Vector:", A)
print("Hamiltonian:", H) 

a=1
Angular Momentum: [ 0.  -0.1  1. ]
Runge-Lenz Vector: [ 0.01 -0.2  -0.02]
Hamiltonian: -0.47499999999999987
In [ ]: