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:
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) $$
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
[<matplotlib.lines.Line2D at 0x241e6e01850>]