mat_eigh — MATH linalg op

• Data kinds: matrix → table

• Call: import fullseye as fs; fs.ledger.mat_eigh(a) (implementation को सीधे call करना हो तो import mathops; mathops.mat_eigh(a), registry से लेना हो तो opsmath.get("mat_eigh"))

• Ledger के ज़रिए return value: fullseye.ledger.mat_eigh(...) केवल घोषित out type table का value लौटाता है (मूल function सहायक जानकारी भी लौटाता है)। जो हिस्सा छोड़ दिया गया है उसकी ज़रूरत हो तो fullseye.ledger.mat_eigh.raw(...) का उपयोग करें, या mathops.mat_eigh को सीधे call करें।

उपयोग

symmetric matrix का eigen-decomposition (LAPACK syevd)।

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

Returns (w, V): eigenvalues w in ascending order (all real — guaranteed by symmetry) and orthonormal eigenvectors as the columns of V (A @ V[:, i] == w[i] * V[:, i]).

Symmetric input only, verified: max|A - A.T| above 1e-10 of the matrix scale raises ValueError. This is deliberate fail-closing of two traps at once — a symmetric solver fed a non-symmetric matrix silently reads one triangle and returns a *plausible wrong* answer, and a general matrix has complex eigenvalues this real-valued API cannot even represent. For a covariance / Hessian / Gram matrix (the metrology cases) symmetry holds by construction; symmetrise explicitly ((A + A.T) / 2) if yours is symmetric-up-to-noise.

Sign trap (honest): each eigenvector is defined only up to sign, and eigenvectors of a *repeated* eigenvalue only up to rotation in that subspace. Compare |v·w| or subspaces, never raw columns.

HALCON: eigenvalues_symmetric_matrix.

पूरी 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

पृष्ठभूमि guides (इस op के पीछे की physics और conventions)

• blas_threads_and_memory — Matrix decompositions धीमे क्यों हैं — BLAS threads, caches, memory layout

संदर्भ (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 करते हैं)

• math_metrology — py -3.11 examples/math_metrology.py

• poc_thermal_radiometry — py -3.11 examples/poc_thermal_radiometry.py

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

dynsys_poincare_section · dwt_inverse · chebyshev_eval_nd

इसी category के (linalg)

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


*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.