Skip to content

RemoteSensingTools/OptimalEstimation

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OptimalEstimation.jl

Julian-style inverse-problem solvers with multiple dispatch: pick a problem, pick an algorithm, call solve.

  • Linear: plain LSQ, weighted LSQ, Tikhonov (L2 + smoothness), NNLS, bounded, L1 / LASSO.
  • Bayesian linear (Rodgers): QR-stable and normal-equation forms with full posterior diagnostics (averaging kernel, gain matrix, DOFs, Shannon info).
  • Nonlinear: Gauss–Newton and Levenberg–Marquardt iteration around user-supplied or AD-computed Jacobians.
  • Regularization-parameter selection: L-curve, GCV, discrepancy principle.

Designed for repeated solves with pre-allocated workspaces — minimal allocations in hot loops.

Installation

using Pkg
Pkg.add(url="https://github.com/cfranken/OptimalEstimation.jl")

Linear Bayesian example (10 lines)

using OptimalEstimation, LinearAlgebra
n, m = 200, 8
K, y, xₐ = randn(n, m), randn(n), zeros(m)
Sₐ, Sₑ   = Diagonal(fill(1.0, m)), Diagonal(fill(0.05^2, n))
prob = BayesianLinearProblem(K, y, xₐ, Sₐ, Sₑ)
sol  = solve(prob, RodgersQR())
@show sol.# state
@show degrees_of_freedom(sol)         # tr(A)
@show information_content(sol)        # bits

Nonlinear example

F!(out, x) = (@. out = x[1] * exp(-x[2] * t); out)
prob = NonlinearProblem(F!, y, xₐ, Sₐ, Sₑ; jacobian=FiniteDiffJacobian())
sol  = solve(prob, LevenbergMarquardt())

For full documentation and examples, see the docs.

About

Collection of inversion routines (from linear least squares to non-linear optimal estimation)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages