wave_membrane_mode — MATH wave op

• Data kinds: कोई नहीं → matrix (केवल arguments से तय होने वाला op — यह कोई image या data input नहीं लेता)

• Call: import fullseye as fs; fs.ledger.wave_membrane_mode(kind='rectangular', m=2, n=3, shape=(256, 256), aspect=1.0, free_edge=True) (implementation को सीधे call करना हो तो import mathops; mathops.wave_membrane_mode(kind='rectangular', m=2, n=3, shape=(256, 256), aspect=1.0, free_edge=True), registry से लेना हो तो opsmath.get("wave_membrane_mode"))

उपयोग

vibrating membrane का एक eigenmode — वह shape जो रेत बनाती है।

> नीचे का विस्तृत विवरण मूल text में है — सारांश और headings का अनुवाद हो चुका है।

★This is a membrane, not a plate. The familiar Chladni pattern cos(m pi x) cos(n pi y) - cos(n pi x) cos(m pi y) solves the Helmholtz equation with free (Neumann) edges; a real Chladni *plate* obeys the biharmonic equation and has a different frequency ladder. The pictures look alike, the frequencies do not — so this op says membrane and is checked against membrane truth only.

kind="rectangular" returns the (possibly combined) cosine mode over a rectangle of the given *aspect*; kind="circular" returns J_m(k r) cos(m theta) with k from the Bessel zero, zero outside the disc.

★Why this earns its place: the nodal lines of a rectangular mode are known by count — a simple (m, n) mode has m-1 interior vertical and n-1 horizontal nodal lines — and the circular mode's nodal circles are at the ratios of successive Bessel zeros. The drawing can therefore be graded.

Returns a matrix (signed displacement, peak scaled to 1). Use wave_nodal_lines for the zero set.

Raises ValueError: unknown kind; m/n below the valid range; a grid over the cap; non-positive aspect; free_edge=False combined with m == n for the combined mode (the difference vanishes identically).

HALCON: no operator.

पूरी family का input contract (fail-closed)

mathops के सभी ops गणना से पहले input की जाँच करते हैं (कुछ भी चुपचाप पास नहीं होता):

• complex input से ValueError — float64 में ज़बरदस्ती बदलने पर imaginary part चुपचाप छूट जाता है (numpy केवल ComplexWarning देता है और "सही दिखने वाला पर गलत" real number लौटाता है)। .real/.imag/abs() स्पष्ट रूप से लिखें, या complex data संभालने वाले complexops का उपयोग करें।

• masked array (masked elements वाला) से ValueError — mask हटाकर नीचे के raw values इस्तेमाल करने वाला implicit conversion अस्वीकार है। भरना है या हटाना है, यह स्पष्ट रूप से बताएँ।

• हर input पर NaN/Inf से ValueError (गिनती बताकर अस्वीकार — क्योंकि यह पूरे परिणाम में फैल जाता है)।

• Shape सख़्त है: 1-D और 2-D को implicit रूप से promote या broadcast नहीं किया जाता (vector slot में matrix या matrix slot में vector देने पर ValueError; reshape स्पष्ट रूप से करें)।

• Size की सीमा: matrix लेने वाले ops और stat_histogram के bins, mathops.MAX_ELEMENTS (2^26 ≈ 6.7 करोड़ elements) से अधिक होने पर ValueError देते हैं।

उपयोग की विस्तृत guide

• math_metrology family guide

संदर्भ (sample data, साहित्य)

• Sample data catalog (DL URL / license) — 2-D के लिए skimage.data (BSD/public) + synthetic, 3-D के लिए real data sources (Stanford/PDS आदि) के DL URL।

• Operators का स्रोत और संदर्भ — इस op family के मूल research/methods के स्रोत।

• Algorithm का मानक स्रोत (लेखक, वर्ष) और उपयोग ऊपर की family usage guide में दिए गए हैं।

चलाए जा सकने वाले उदाहरण (verified samples जो सच में यह op call करते हैं)

• poc_beats_fringes_and_screens — py -3.11 examples/poc_beats_fringes_and_screens.py

वे अगले ops जिनसे type जुड़ता है (matrix को input के रूप में लेते हैं)

mat_solve · mat_lstsq · mat_svd · mat_eigh · mat_pinv · mat_cond · mat_lu · mat_qr

इसी category के (wave)

wave_mode_frequencies · wave_nodal_lines · wave_two_slit · wave_fringe_period · wave_grating_orders


*Provenance: mathops.py — MATH operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.