Documentation

Eig3x3.Eigenvectors

Eig3x3.Eigenvectors — the Eberly eigenvector assembly #

Given the eigenvalues from Habera-Zilian's method (see Eig3x3.Eigenvalues, [HZ25]), this module performs Eberly's non-iterative method [Ebe14] to compute the eigenvectors.

Algorithm #

For an eigenvalue λ that is well-separated from its neighbors, the matrix A − λI has rank 2: its three rows lie in a plane, and the eigenvector is the one direction perpendicular to that plane computed directly as a cross product of two rows (eigvecIsolated). Cross products lose accuracy as eigenvalues cluster, so we first compare the gaps λ₂ − λ₁ and λ₃ − λ₂ and apply that construction only at the isolated end of the spectrum.

Symmetry then does the rest. Eigenvectors of distinct eigenvalues of a symmetric matrix are orthogonal, so the second eigenvector lies in the plane perpendicular to the first, and the problem reduces to solving a 2×2 system (eigvecInPlane).

Only one perpendicular direction remains, so it is automatically an eigenvector, unit-length, and right-handed. The third eigenvector is then just the cross product of the other two. When eigenvalues repeat, any perpendicular direction is valid, and the code falls back to the unit vector of the eigenbasis.

Provenance #

D. Eberly, "A Robust Eigensolver for 3×3 Symmetric Matrices", Geometric Tools, (2014). [Ebe14] (CC BY 4.0).

Specifically, the non-iterative algorithm (§5):

The gap comparison method replaces Eberly's sign method, which is equivalent in exact arithmetic but more direct.

Visibility #

This is an internal, package-private module and not intended to be used directly.