Skip to content

GillesBareilles/EigenDerivatives.jl

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

EigenDerivatives.jl

https://img.shields.io/badge/docs-stable-blue.svg https://img.shields.io/badge/docs-dev-blue.svg https://github.com/GillesBareilles/EigenDerivatives.jl/actions/workflows/CI.yml/badge.svg?branch=master https://codecov.io/gh/GillesBareilles/EigenDerivatives.jl/branch/master/graph/badge.svg https://img.shields.io/badge/code%20style-blue-4495d1.svg

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!

Derivatives status

The following are working:

  • affine mapping
  • powercoord mapping
  • nonlinear mapping

Check by running the test scripts.

Principle

  • 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, λ) “`

These rely on intermediate objects:

  • smooth basis of coalescing eigenspace `U`
  • `Uᵢ(x)ᵀ g(x) Uⱼ(x)`

Exposed API

Features

  • 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

objects:

  • 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:

  • ϕᵢⱼ 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) “`

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages