This project simulates Chladni figures (the vibrational modes of plates and membranes) using finite differences in Python.
Clone the repository:
git clone https://github.com/DC-Creatives-Club/vibrational-modes-plates.gitCreate and activate a Python virtual environment called math:
python3 -m venv ~/.virtualenvs/math
source ~/.virtualenvs/math/bin/activateThen simply run the script to produce plots with default parameters (skip the first 10 modes):
python3 chlandi.pyTo run with different parameters:
python3 chladni.py --bc neumann --N 100 --modes 9 --skip 10 --savewhere
bcare boundary conditions, eitherneumannordirichletNis mesh sizemodesis number of modesskipis the number of initial modes to skip--saveflag saves the modes separately to a folderplots
This project simulates Chladni figures (the vibrational modes of plates) using finite differences in Python.
A thin elastic plate obeys the Kirchhoff–Love equation:
with
-
$h$ = plate thickness -
$D = \frac{E h^{3}}{12(1-\nu^{2})}$ = bending stiffness
Modes satisfy the biharmonic eigenproblem:
On a 1-D grid with spacing
On a 2-D square grid:
This matrix approximates
-
Dirichlet (clamped edge): enforce
$\phi = 0$ on the boundary. -
Neumann (free edge): enforce
$\partial_n \phi = 0$ (zero normal derivative).
-
Plate:
$(L_{2D})^2 v = \mu v \implies \omega = \sqrt{\frac{D}{\rho h}\mu}$ .
Nodal lines are given by the zero set of
Numerically: plot contour lines at level = 0 to simulate where sand would accumulate.
- Use
scipy.sparseandeigshfor efficiency. - For realistic clamped edges, enforce Dirichlet BCs (interior points only).
- Plot zero contours (
plt.contour(..., levels=[0])) to visualize Chladni patterns. - Increase grid resolution for finer patterns.
- Skip the first few lowest modes to see higher-order “flower” and circular patterns.
