Continuum Mechanics¶
da PowerShell -- jupyter nbconvert --to html notebook.ipynb
Trave elastica soggetta a peso proprio, isostatica¶
Entra in gioco la derivata quarta¶
# Entra in gioco la derivata quarta
import numpy as np
import matplotlib.pyplot as plt
# -----------------------------
# Parametri fisici
# -----------------------------
L = 1.0 # lunghezza trave
E = 210e9 # modulo di Young [Pa]
I = 1e-6 # momento d'inerzia [m^4]
q = 1000.0 # carico distribuito [N/m]
# -----------------------------
# Dominio numerico
# -----------------------------
Nx = 100
x = np.linspace(0, L, Nx)
dx = x[1] - x[0]
# -----------------------------
# Matrice operatore quarta derivata
# -----------------------------
A = np.zeros((Nx, Nx))
b = np.ones(Nx) * q / (E * I)
for i in range(2, Nx-2):
A[i, i-2] = 1
A[i, i-1] = -4
A[i, i] = 6
A[i, i+1] = -4
A[i, i+2] = 1
A /= dx**4
# -----------------------------
# Condizioni al contorno
# w(0)=0, w(L)=0
# M(0)=w''(0)=0, M(L)=0
# -----------------------------
# w(0)=0
A[0, :] = 0
A[0, 0] = 1
b[0] = 0
# w(L)=0
A[-1, :] = 0
A[-1, -1] = 1
b[-1] = 0
# w''(0)=0
A[1, :] = 0
A[1, 0] = 1
A[1, 1] = -2
A[1, 2] = 1
b[1] = 0
# w''(L)=0
A[-2, :] = 0
A[-2, -3] = 1
A[-2, -2] = -2
A[-2, -1] = 1
b[-2] = 0
# -----------------------------
# Risoluzione sistema
# -----------------------------
w = np.linalg.solve(A, b)
# -----------------------------
# Confronto con soluzione analitica
# -----------------------------
w_analytical = (q / (24 * E * I)) * x * (L**3 - 2*L*x**2 + x**3)
def sinusoid(x):
return -6.2e-5*np.sin(np.pi*x)
f = sinusoid(x)
# -----------------------------
# Plot
# -----------------------------
plt.figure()
plt.plot(x, (-w_analytical-f)*5, label="Scarto da Sinusode")
plt.plot(x, -w, label="Numerica")
plt.plot(x, -w_analytical, "--", label="Analitica")
plt.xlabel("x")
plt.ylabel("Freccia w(x)")
plt.legend()
plt.grid()
plt.show()
print("Freccia massima numerica:", np.min(w))
print("Freccia massima analitica:", np.min(w_analytical))
Freccia massima numerica: 0.0 Freccia massima analitica: 0.0
Spiegazione delle condizioni al contorno¶
Significato della matrice $A$ e del vettore $b$ nel problema della trave semplicemente appoggiata}¶
Idea di base¶
Un calcolatore non risolve direttamente equazioni differenziali. Ogni problema di meccanica del continuo, dopo la discretizzazione, viene ricondotto a un sistema algebrico del tipo: $$\large \boxed{ A\,\mathbf{w} = \mathbf{b} } $$
dove:
- $\mathbf{w}$ è il vettore delle incognite,
- $A$ è la matrice che rappresenta l'operatore differenziale e i vincoli,
- $\mathbf{b}$ è il vettore dei carichi applicati.
Il vettore delle incognite $\mathbf{w}$¶
La trave viene suddivisa in $N$ punti lungo la coordinata $x$. Ad ogni punto $x_i$ è associata una freccia: $$\large \mathbf{w} = \begin{bmatrix} w_0 \\ w_1 \\ w_2 \\ \vdots \\ w_{N-1} \end{bmatrix} $$
dove $w_i$ rappresenta l'abbassamento verticale della trave nel punto $x_i$.
L'obiettivo del problema è determinare tutte le componenti del vettore $\mathbf{w}$.
Significato fisico della matrice $A$¶
La matrice $A$ rappresenta:
- l'operatore di flessione della trave di Eulero--Bernoulli,
- le condizioni al contorno (vincoli).
In forma continua, l'equazione della trave è: $$\large EI\,\frac{d^4 w}{dx^4} = q $$
Dopo la discretizzazione mediante differenze finite, la derivata quarta in un punto interno $x_i$ diventa: $$\large \frac{w_{i-2} - 4w_{i-1} + 6w_i - 4w_{i+1} + w_{i+2}}{\Delta x^4} $$
I coefficienti: $$\large 1,\,-4,\,6,\,-4,\,1 $$
costituiscono una riga tipica della matrice $A$.
Essi descrivono come la freccia in un punto dipende dalle frecce nei punti vicini, cioè la $\textbf{rigidezza flessionale}$ della trave.
Righe di $A$ associate ai vincoli¶
Alcune righe della matrice $A$ non rappresentano l'equazione della trave, ma impongono condizioni al contorno.
Condizione di appoggio¶
La condizione: $$\large w(0) = 0 $$
viene imposta algebraicamente come: $$\large w_0 = 0 $$
Questa condizione sostituisce una riga della matrice con: $$\large A_{0,0} = 1, \qquad b_0 = 0 $$
Condizione di momento nullo¶
Un appoggio semplice non trasmette momento: $$\large M = EI\,w'' = 0 $$
La derivata seconda discreta è approssimata come: $$\large w''(0) \approx \frac{w_0 - 2w_1 + w_2}{\Delta x^2} $$
Imponendo $w''(0)=0$ si ottiene: $$\large w_0 - 2w_1 + w_2 = 0 $$
che corrisponde a un'altra riga speciale della matrice $A$.
Significato del vettore $b$¶
Il vettore $\mathbf{b}$ rappresenta la $\textbf{forzante esterna}$ del problema.
Per i punti interni della trave: $$\large b_i = \frac{q}{EI} $$
dove $q$ è il carico distribuito uniforme (peso proprio).
Per le righe associate ai vincoli: $$\large b_i = 0 $$
poiché i vincoli non applicano carichi noti, ma solo condizioni geometriche.
Interpretazione fisica complessiva¶
Il sistema algebrico: $$\large A\,\mathbf{w} = \mathbf{b} $$
può essere interpretato come:
- $A$: rigidezza della trave e dei vincoli,
- $\mathbf{w}$: deformata cercata,
- $\mathbf{b}$: carichi applicati.
Risolvere il sistema significa trovare la configurazione di equilibrio che minimizza l'energia elastica della trave.
Collegamento con la meccanica del continuo¶
$$\large \text{Continuo:} \qquad EI\,w''''(x) = q $$$$\large \text{Discreto:} \qquad A\,\mathbf{w} = \mathbf{b} $$La fisica del problema resta invariata: cambia solo la rappresentazione matematica utilizzata per risolverlo numericamente.