eigh_vectors

std.linalg.eigh_vectors · Level L3

The unit eigenvectors of a symmetric matrix, as columns in ascending order of eigenvalue, each signed so its largest component is positive.

A·vᵢ = λᵢ·vᵢ, ‖vᵢ‖ = 1

Signature

eigh_vectors(A: f64[k, k]) → f64[k, k]

Structure

The function as NOVA stores it: one box per input, operation and output, and arrows that carry values. A double border marks another library function this one runs — called once, or by Scan once per element; select it to open that function.

Af64[k, k]EighVectorsVVf64[k, k]
  • input
  • operation
  • constant
  • call
  • output

Verification

  • Signature proven by NOVA’s shape solver, for every size.
  • Agrees with the reference np.linalg.eigh(A)[1], signs fixed to 80 digits (100-digit arithmetic), on all 40 test cases.
  • All 596 float64 results inside the running error bound; the closest uses 9% of it.
  • Interpreter and NumPy backend return bit-identical results.
Accuracy in detail
correctly rounded (the float64 nearest the exact value)
12%
bit-equal to the NumPy formula in float64
100%
largest error, in units in the last place
1.3e+3

Large ulp counts appear where a result is zero or tiny next to the numbers it is computed from (after cancellation, for example), so one unit in the last place is tiny too; the absolute error is still inside the bound.

Note

An eigenvector is defined only up to sign, so NOVA fixes one. Its error bound grows as neighbouring eigenvalues approach each other, and a case where they are too close, or where the sign itself could flip, is refused rather than given a bound that would not hold.

Identity

Calls
—
Called by
—
sha256:759cc14b29b72c1037259d0c9af33e568201946cdb61ad5ccb6717633c5e9256

The semantic hash of the graph. It changes when the program changes, and never when only its documentation does.