Continuum Mechanics¶

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

Corda vibrante fissata agli estremi¶

Si consideri una corda ideale di lunghezza $L$, tesa con tensione costante $T$ e con densità lineare uniforme $\rho$. La corda è vincolata agli estremi, imponendo le condizioni al contorno: $$\large \phi(0,t) = \phi(L,t) = 0 $$

dove $\phi(x,t)$ rappresenta lo spostamento trasversale della corda.

  • $\textbf{(a)}$ Scrivere la densità lagrangiana del sistema.
  • $\textbf{(b)}$ Determinare il momento coniugato al campo (\phi(x,t)).
  • $\textbf{(c)}$ Ricavare la densità hamiltoniana e le equazioni canoniche.
  • $\textbf{(d)}$ Mostrare che l’equazione del moto è l’equazione delle onde.
  • $\textbf{(e)}$ Considerare la configurazione iniziale:
$$\large \phi(x,0) = \sin\!\left(\frac{\pi x}{L}\right), \qquad \dot{\phi}(x,0) = 0 $$

e descriverne l’evoluzione temporale.

Svolgimento¶

La densità lagrangiana della corda vibrante è: $$\large \mathcal{L} = \frac{1}{2}\rho \dot{\phi}^2\frac{1}{2}T (\partial_x \phi)^2$$

Il momento coniugato associato al campo $\phi$ è: $$\large \pi(x,t) = \partial{\mathcal{L}}{\dot{\phi}} = \rho \dot{\phi} $$

La densità hamiltoniana si ottiene tramite trasformazione di Legendre: $$\large \mathcal{H} = \pi \dot{\phi} - \mathcal{L} = \frac{\pi^2}{2\rho}\frac{T}{2}(\partial_x \phi)^2$$

Le equazioni canoniche di Hamilton sono: $$\large \dot{\phi} = \partial{\mathcal{H}}{\pi} = \frac{\pi}{\rho}, \qquad \dot{\pi} = -\partial{\mathcal{H}}{\phi} = T,\partial_{xx}\phi $$

Combinando le due equazioni si ottiene l’equazione delle onde: $$\large \rho \ddot{\phi} = T \partial_{xx}\phi $$

La configurazione iniziale assegnata rappresenta il modo fondamentale di vibrazione della corda. La soluzione è: $$\large \phi(x,t) = \sin\!\left(\frac{\pi x}{L}\right) \cos\!\left(\frac{\pi}{L}\sqrt{\frac{T}{\rho}}\,t\right) $$

In [12]:
import numpy as np

# -----------------------------
# Parametri fisici
# -----------------------------
L = 1.0          # lunghezza corda
rho = 1.0        # densità lineare
T = 1.0          # tensione

# -----------------------------
# Dominio numerico
# -----------------------------
Nx = 200
x = np.linspace(0, L, Nx)
dx = x[1] - x[0]

dt = 0.001
time_steps = 3000

# -----------------------------
# Campi iniziali
# -----------------------------
phi = np.sin(np.pi * x / L)      # modo fondamentale
pi = np.zeros_like(phi)          # velocità iniziale nulla

# condizioni al contorno (incastri)
phi[0] = phi[-1] = 0.0
pi[0] = pi[-1] = 0.0

# -----------------------------
# Operatori differenziali
# -----------------------------
def laplacian(phi, dx):
    lap = np.zeros_like(phi)
    lap[1:-1] = (phi[2:] - 2*phi[1:-1] + phi[:-2]) / dx**2
    return lap

# -----------------------------
# Hamiltoniana totale
# -----------------------------
def total_hamiltonian(phi, pi, dx):
    phi_x = np.gradient(phi, dx)
    H_density = (pi**2)/(2*rho) + 0.5*T*phi_x**2
    return np.sum(H_density) * dx

# -----------------------------
# Integratore simplettico
# -----------------------------
def leapfrog_step(phi, pi, dx, dt):
    # mezzo passo sul momento
    pi_half = pi + 0.5 * dt * T * laplacian(phi, dx)

    # passo completo sul campo
    phi_new = phi + dt * pi_half / rho

    # condizioni al contorno
    phi_new[0] = phi_new[-1] = 0.0

    # mezzo passo finale sul momento
    pi_new = pi_half + 0.5 * dt * T * laplacian(phi_new, dx)

    pi_new[0] = pi_new[-1] = 0.0

    return phi_new, pi_new

# -----------------------------
# Integrazione temporale
# -----------------------------
energy = []

for _ in range(time_steps):
    phi, pi = leapfrog_step(phi, pi, dx, dt)
    energy.append(total_hamiltonian(phi, pi, dx))

print("Energia finale:", energy[-1])
#print("Campo finale:", phi)

import matplotlib.pyplot as plt
plt.figure(figsize=(8,3))
plt.plot(x,phi)
Energia finale: 2.4919920675541714
Out[12]:
[<matplotlib.lines.Line2D at 0x241e6e01850>]
No description has been provided for this image
In [ ]: