Lagrangian Desity for Fields¶
da PowerShell -- jupyter nbconvert --to html notebook.ipynb
Tabella di traduzione indici → forma esplicita¶
| Derivate | Forma estesa | Denominazione |
|---|---|---|
| $\partial_\mu \phi$ | $\left(\dfrac{\partial \phi}{\partial t},\nabla\phi\right)$ | variazione del campo |
| $\partial^\mu \phi$ | $\left(\dfrac{\partial \phi}{\partial t},-\nabla\phi\right)$ | cambia segno nello spazio |
| $\partial_\mu \partial^\mu \phi$ | $\dfrac{\partial^2 \phi}{\partial t^2}-\nabla^2\phi$ | operatore d’onda |
| $\nabla^2\phi$ | $\dfrac{\partial^2\phi}{\partial x^2}+\dfrac{\partial^2\phi}{\partial y^2}+\dfrac{\partial^2\phi}{\partial z^2}$ | langrangiana |
Termini tipici di Lagrangiana¶
| Con indici | Forma esplicita |
|---|---|
| $\partial_\mu\phi,\partial^\mu\phi$ | $\left(\dfrac{\partial\phi}{\partial t}\right)^2$ |
| $\frac{1}{2}\partial_\mu\phi,\partial_\mu\phi$ | energia cinetica del campo |
| $V(\phi)$ | potenziale del campo |
Equazioni del moto (campo scalare)¶
| Con indici | Forma esplicita |
|---|---|
| $\partial_\mu\partial^\mu\phi=0$ | $\dfrac{\partial^2\phi}{\partial t^2}-\nabla^2\phi=0$ |
| $\partial_\mu\partial^\mu\phi+m^2\phi=0$ | equazione di Klein–Gordon |
Tensore elettromagnetico¶
| Con indici | Forma esplicita |
|---|---|
| $F_{\mu\nu}$ | contiene $\mathbf{E}$ e $\mathbf{B}$ |
| $F_{0i}$ | $E_i$ |
| $F_{ij}$ | $\epsilon_{ijk}B_k$ |
Lagrangiana EM¶
| Con indici | Forma esplicita |
|---|---|
| $-\frac{1}{4}F_{\mu\nu}F^{\mu\nu}$ | $\frac{1}{2}(E^2-B^2)$ |
Equazioni di Maxwell¶
| Con indici | Forma esplicita |
|---|---|
| $\partial_\mu F^{\mu\nu}=J^\nu$ | Maxwell con sorgenti |
| $\partial_\mu J^\mu=0$ | conservazione della carica |
Campo scalare discretizzato a 100 punti - risoluzione con $Descent\; Solver$¶
Non ci sono sorgenti, non vincoli al contorno, non ci sono termini non lineari $\rightarrow$ soluzione circa zero, a prescindere dai valori iniziali¶
In [27]:
import numpy as np
def laplacian(phi, dx):
'''
:param phi: Field value.
:param dx: Discretization step size - default = 0.1
'''
return np.gradient(np.gradient(phi, dx), dx)
def euler_lagrange(phi, dx, m):
'''
Calculate the Euler-Lagrange residual for the field.
:param phi: Field value.
:param dx: Discretization step size - default = 0.1
:param m: Mass parameter.
:return:
Euler-Lagrange residual.
'''
return -laplacian(phi, dx) + m**2 * phi
def gradient_descent_solver(initial_phi, m, dx=0.1, dt=0.01, tol=1e-6):
'''
Solve the field equations using gradient descent.
:param initial_phi: Initial field configuration.
:param m: Mass parameter.
:param dx: Discretization step size.
:param tol: Threshold for convergence.
:return:
phi value minimizing the action.
'''
phi = initial_phi.copy()
while True:
el_residual = euler_lagrange(phi, dx, m)
norm = np.linalg.norm(el_residual)
if norm < tol:
break
phi -= dt * el_residual # dt ≠ dx !!!
return phi
# Solve the field equations
initial_phi = np.random.rand(100)*10 # Strong initial random field configuration
m = 1.0 # Mass parameter
phi_solution = gradient_descent_solver(initial_phi, m)
# No source, no boundary, no non linear terms --> solution = 0 - numerically epsilon
print("Field configuration minimizing the action:", phi_solution[0:12])
Field configuration minimizing the action: [-2.39656618e-07 -2.33356001e-07 -2.27280406e-07 -2.21199243e-07 -2.15342890e-07 -2.09475411e-07 -2.03832315e-07 -1.98172551e-07 -1.92736530e-07 -1.87278324e-07 -1.82043008e-07 -1.76780022e-07]
In [ ]: