Simmetrie $\rightarrow$ Leggi di conservazione¶
da PowerShell -- jupyter nbconvert --to html notebook.ipynb
Le leggi di conservazione costituiscono uno dei pilastri fondamentali della fisica teorica. Esse esprimono la invarianza di determinate grandezze fisiche nel tempo o nello spazio durante l'evoluzione dinamica di un sistema.
Definizione generale¶
Una quantità fisica $Q(q,\dot{q},t)$ si dice $conservata$ se lungo il moto del sistema vale: $$ \frac{dQ}{dt} = 0. $$
In tal caso, $Q$ è una costante del moto.
Leggi di conservazione in meccanica classica¶
Conservazione della quantità di moto¶
Se la Lagrangiana di un sistema è invariante per traslazioni spaziali, allora la quantità di moto totale si conserva.
Per una particella: $$ \mathbf{p} = m \dot{\mathbf{r}}, \quad \frac{d\mathbf{p}}{dt} = 0. $$
Conservazione del momento angolare¶
Se la Lagrangiana è invariante per rotazioni spaziali, il momento angolare si conserva: $$ \mathbf{L} = \mathbf{r} \times \mathbf{p}, \quad \frac{d\mathbf{L}}{dt} = 0. $$
Conservazione dell'energia¶
Se la Lagrangiana non dipende esplicitamente dal tempo, la energia meccanica: $$ E = \sum_i \dot{q}^i \frac{\partial L}{\partial \dot{q}^i} - L $$ è una costante del moto.
Leggi di conservazione e simmetrie¶
Il legame fondamentale tra simmetrie e leggi di conservazione è formalizzato dal teorema di Noether.
Teorema di Noether¶
Ad ogni simmetria continua della azione $$ S = \int L(q,\dot{q},t)\,dt $$ corrisponde una quantità conservata.
In particolare:
- Simmetria -- Quantità conservata}
- Traslazione temporale -- Energia
- Traslazione spaziale -- Quantità di moto
- Rotazione spaziale -- Momento angolare
Conservazione in presenza di vincoli¶
In sistemi con vincoli ideali, le forze di vincolo non compiono lavoro virtuale e quindi non alterano le quantità conservate associate alle simmetrie del sistema.
Sistemi non conservativi¶
In presenza di forze dissipative, come lo attrito, le leggi di conservazione classiche non sono più valide. Ad esempio: $$ \frac{dE}{dt} < 0, $$ indicando una perdita irreversibile di energia meccanica.
Conservazione in campi continui¶
Nel caso di sistemi continui e campi, le leggi di conservazione assumono forma locale, espressa tramite equazioni di continuità: $$ \frac{\partial \rho}{\partial t}\nabla \cdot \mathbf{j}=0, $$
dove $\rho$ è una densità di grandezza conservata e $\mathbf{j}$ il flusso associato.
Significato fisico¶
Le leggi di conservazione permettono di:
- ridurre il numero di equazioni del moto;
- verificare la correttezza di modelli fisici;
- comprendere il ruolo delle simmetrie fondamentali;
- formulare principi universali indipendenti dal dettaglio delle interazioni.
Osservazioni finali¶
Le leggi di conservazione rappresentano una conseguenza diretta delle simmetrie della natura e costituiscono un ponte concettuale tra meccanica classica, teoria dei campi e fisica moderna.
Oscillatore armonico - Approccio simbolico¶
import sympy as sp
def lagrangian(q, dq, params):
"""
Example Lagrangian function for a mechanical system.
:param q: Generalized coordinates.
:param dq: Generalized velocities.
:param params: Additional parameters for the Lagrangian.
:retum:
Lagrangian value.
"""
# Oscillatore armonico
return 0.5 * params['m'] * dq**2 - params['k'] * q**2
def noether_conserved_quantity(L, q, dq, delta_q):
"""
Calculate the conserved quantity via Noether's theorem.
:param L: Lagrangian of the system.
:param q: Generalized coordinate.
:param dq: Generalized velocity.
:param delta_q: Variation in q from symmetry transformation.
:return:
Conserved quantity expression.
"""
p = sp.diff(L, dq)
return p * delta_q
# Define symbols
q, dq, epsilon = sp.symbols('q dq epsilon')
params = {'m': sp.symbols('m'), 'k': sp.symbols('k')}
# Define Lagrangian
L = lagrangian(q, dq, params)
# Example symmetry: translational (delta_q = epsilon)
delta_q = epsilon
# Compute the conserved quantity
conserved_quantity = noether_conserved_quantity(L, q, dq, delta_q)
simplified_conserved_quantity = sp.simplify(conserved_quantity)
# test variation delta_q = epsilon (constant shift)
delta_q = epsilon
delta_dq = 0
# compute δL
dL = sp.diff(L, q)*delta_q + sp.diff(L, dq)*delta_dq
if dL==0:
print("Q conservata, dL = 0")
print(simplified_conserved_quantity)
else:
print("Q NON conservata, dL!= 0")
print("Q :",simplified_conserved_quantity)
print("dL :",sp.simplify(dL))
# Algorithmic approach to identifying conserved quantities
"""
def identify_conserved_quantities(L, symmetries):
Identify conserved quantities for given symmetries of a Lagrangian.
:param L: Lagrangian of the system.
:param symmetries: List of symmetry transformations.
:retum:
List of conserved quantities.
conserved_quantities = []
q_sym, dq_sym = sp.symbols('q dq')
for delta_q in symmetries:
Q = noether_conserved_quantity(L, q_sym, dq_sym, delta_q)
simplified_Q = sp.simplify(Q)
conserved_quantities.append(simplified_Q)
return conserved_quantities
# List of example symmetries
symmetries = [epsilon] # Example: Add more symmetries as needed
# Call the algorithmic function
conserved_quantities = identify_conserved_quantities(L, symmetries)
# Display the results
print("Lagrangian:", L)
print("Conserved Quantities:")
for i, Q in enumerate(conserved_quantities, 1):
print(f"Q{i}:", Q)
"""
a=1
Q NON conservata, dL!= 0 Q : 1.0*dq*epsilon*m dL : -2*epsilon*k*q
Particella libera in movimento - Approccio simbolico¶
import sympy as sp
# symbols
x, dx, epsilon, m = sp.symbols('x dx epsilon m')
# Lagrangian of a free particle
L = 0.5 * m * dx**2
# transformation: spatial translation
delta_x = epsilon
delta_dx = 0
# Check symmetry: compute δL
dL = sp.diff(L, x)*delta_x + sp.diff(L, dx)*delta_dx
print("delta L:", sp.simplify(dL))
# Noether conserved quantity Q = p * δx
p = sp.diff(L, dx)
Q = p * delta_x
print("Conserved quantity:", sp.simplify(Q))
delta L: 0 Conserved quantity: 1.0*dx*epsilon*m
Moto rotatorio uniforme - Approccio simbolico¶
import sympy as sp
# symbols
x, y, dx, dy, epsilon, m = sp.symbols('x y dx dy epsilon m')
# Lagrangian of a free particle in 2D
L = 0.5 * m * (dx**2 + dy**2)
# infinitesimal rotation around origin
delta_x = -epsilon * y
delta_y = epsilon * x
delta_dx = -epsilon * dy
delta_dy = epsilon * dx
# Compute δL
dL = (sp.diff(L, x) * delta_x +
sp.diff(L, y) * delta_y +
sp.diff(L, dx) * delta_dx +
sp.diff(L, dy) * delta_dy)
print("delta L =", sp.simplify(dL))
# canonical momenta
p_x = sp.diff(L, dx)
p_y = sp.diff(L, dy)
# Noether charge Q = p·δq
Q = p_x * delta_x + p_y * delta_y
Q_simplified = sp.simplify(Q)
print("Noether conserved quantity (up to epsilon):", Q_simplified)
delta L = 0 Noether conserved quantity (up to epsilon): 1.0*epsilon*m*(-dx*y + dy*x)