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 [ ]: