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.
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