Derivatives of eigenvalues and eigenvectors, even when values coalesce, in arbitrary types.
Intended features:
- support arbitrary types;
- provide the theoretical formulas for derivatives, with references;
- for a symmetric matrix smoothly parametrized:
- compute first and second-order derivatives of eigenvalues;
- compute first-order derivative of eigenvectors;
- provide efficient computation of spectral functions of these objects:
- the lagrangian hessian;
Possible computations, given a map `g:ℝⁿ → Sₘ(ℝ)` and its derivatives: “`julia g(map, x) Dg(map, x, η) D²g(map, x, η) “` Check out the docs!
The following are working:
- affine mapping
- powercoord mapping
- nonlinear mapping
Check by running the test scripts.
- simple case:
-
$i$ -th eigenvalue `λₖ∘g`: “`julia“`
-
-
$i$ -th eigenvalue has multiplicity$r$ :- lagrangian derivatives: `L(x, λ) = ∑ₖ₌ᵢʳ λₖ∘g(x)/r + ⟨λ, h(x)⟩`
“`julia
eigm = EigMultiplicity(i, r)
L(eigm, x, λ) “`
- lagrangian derivatives: `L(x, λ) = ∑ₖ₌ᵢʳ λₖ∘g(x)/r + ⟨λ, h(x)⟩`
“`julia
eigm = EigMultiplicity(i, r)
These rely on intermediate objects:
- smooth basis of coalescing eigenspace `U`
- `Uᵢ(x)ᵀ g(x) Uⱼ(x)`
- variable type precision: `Float64` or `BigFloat`;
- allocation light oracles available, e.g. `∇ϕᵢⱼ!(res, eigmult, map, x, i, j)` instead of `∇ϕᵢⱼ(eigmult, map, x, i, j)`
- functor for hessian computation
AbstractMap
object, with oracles: “`julia g(map, x) Dg(map, x) Dgconj(map, X) D²g_ηl(map, x, η, l) “`EigMultiplicity
object, which carries the index and multiplicity of relevant eigenvalue and stores a point `x` and the eigendecomposition of `g(x)`. This storage allows to compute eigendecompositions only once per considered point.
ϕᵢⱼ
functions. They are the basic objects from which all other oracles are built. “`julia ϕᵢⱼ(eigmult, map, x, i, j) ∇ϕᵢⱼ(eigmult, map, x, i, j) ∇²ϕᵢⱼ(eigmult, map, x, d, i, j) “`h
function. The set of `x` such that `g(x)` has ith eigenvalue of multiplicity r is defined verifies `h(x) = 0`. “`julia h(eigmult, map, x) Dh(eigmult, map, x) Jacₕ(eigmult, map, x) “`λ
function. The average of eigenvalues i to i+r-1, a smooth function on the set of points such that `h(x) = 0`. “`julia λ(eigmult, map, x) ∇λ(eigmult, map, x) “`L
function. The lagrangian of the problem `min_x λ(x) s.t. h(x)=0`, defined as `L(x, λ) = - ⟨λ, h(x)⟩`. “`julia L(eigmult, map, x, λ) ∇L(eigmult, map, x, λ) ∇²L(eigmult, map, x, λ, d) “`