dubfi.inversion.inversion_other

Inversion for arbitrary single-variant a priori probability distributions.

Mathematical construction

Consider an arbitrary probability density function (PDF) P(x) of a scalar variable x with mean 0 and variance 1. This can be used as a priori PDF for the state vector s with (positive definite, real- symmetric) error covariance matrix B using the transformation s = Q x + s0 where Q Q^T = B. The PDF of s is P’(s) = P(Q^-1 (s - s0)).

Similarly, we can consider a PDF P(x) with mean x0 and standard deviation xstd. Then one can define s = O x where B = O D O^T is the (orthogonal) eigenvalue decomposition of B and D is a diagonal matrix with entries xstd^2. The prior of the state vector is s0 = O x0.

This module implements two helper classes for using almost arbitrary P(x) to construct P’(s) for these two transformations.

Added in version 0.1.5.

Classes

InvertorOptimizerTransformedPrior

Abstract solver for flux inversion problem with prior cost computed in transformed coordinates.

InvertorOptimizerTransformedPriorNonnormalized

Abstract solver for flux inversion problem with prior cost computed in transformed coordinates.

InvertorOptimizerLaplace

Numerical solver for flux inversion problem with Laplacian prior PDF.

InvertorOptimizerLorentz

Numerical solver for flux inversion problem with Lorentz/Cauchy/Breit-Wigner prior PDF.

InvertorOptimizerSparseReconstruction

Numerical solver for flux inversion problem for sparse reconstruction with zero prior.

Module Contents

class dubfi.inversion.inversion_other.InvertorOptimizerTransformedPrior(y: dubfi.linalg.types.AbstractVector, prior: numpy.ndarray, h: dubfi.linalg.generic.ParametrizedVector, b: numpy.ndarray, r: dubfi.linalg.generic.ParametrizedOperator, norm_prefactor: float = 0.0)

Bases: dubfi.inversion.inversion.InvertorOptimizer

Abstract solver for flux inversion problem with prior cost computed in transformed coordinates.

Helper for arbitrary prior probability density functions P(x) that are applied to the uncertainty-normalized deviation from the prior. Implement cost_prior_transformed() as -log(P(x)) and its derivatives in cost_prior_grad_transformed() and cost_prior_hess_transformed().

Added in version 0.1.5.

Solve inverse problem using full ensemble-estimated model uncertainty.

Parameters:
  • y (AbstractVector) – vector of observations (usually minus model far-field or background)

  • prior (np.ndarray) – a priori estimate for scaling factors

  • h (ParametrizedVector) – model equivalents depending on scaling factors

  • b (np.ndarray) – error covariance matrix of prior scaling factors

  • r (ParametrizedOperator) – error covariance matrix of model-observation comparison, depends on scaling factors

  • norm_prefactor (float, default=0.0) –

    prefactor of normalization term in cost function.

    prefactor of normalization term in cost function.

property b: numpy.ndarray

Prior error covariance matrix of scaling factors.

_check_before_solving() → None

Overwrite in inheriting classes to assert properties before solving.

cost_prior(s: numpy.ndarray) → numpy.float64

Prior contribution to cost function.

cost_prior_grad(s: numpy.ndarray) → numpy.ndarray

Prior contribution to gradient of cost function.

cost_prior_hess(s: numpy.ndarray) → numpy.ndarray

Prior contribution to hessian of cost function.

abstractmethod cost_prior_transformed(x: numpy.ndarray) → numpy.ndarray

Prior contribution to cost function in transformed coordinates.

abstractmethod cost_prior_grad_transformed(x: numpy.ndarray) → numpy.ndarray

Gradient of prior cost function in transformed coordinates.

abstractmethod cost_prior_hess_transformed(x: numpy.ndarray) → numpy.ndarray

Diagonal of Hessian of prior cost function in transformed coordinates.

class dubfi.inversion.inversion_other.InvertorOptimizerTransformedPriorNonnormalized(y: dubfi.linalg.types.AbstractVector, prior: numpy.ndarray, h: dubfi.linalg.generic.ParametrizedVector, b: numpy.ndarray, r: dubfi.linalg.generic.ParametrizedOperator, norm_prefactor: float = 0.0)

Bases: dubfi.inversion.inversion.InvertorOptimizer

Abstract solver for flux inversion problem with prior cost computed in transformed coordinates.

Helper for arbitrary prior probability density functions P(x). In this case, x is the full prior and not normalized to uncertainty. Implement cost_prior_transformed() as -log(P(x)) and its derivatives in cost_prior_grad_transformed() and cost_prior_hess_transformed().

Added in version 0.1.5.

Solve inverse problem using full ensemble-estimated model uncertainty.

Parameters:
  • y (AbstractVector) – vector of observations (usually minus model far-field or background)

  • prior (np.ndarray) – a priori estimate for scaling factors

  • h (ParametrizedVector) – model equivalents depending on scaling factors

  • b (np.ndarray) – error covariance matrix of prior scaling factors

  • r (ParametrizedOperator) – error covariance matrix of model-observation comparison, depends on scaling factors

  • norm_prefactor (float, default=0.0) –

    prefactor of normalization term in cost function.

    prefactor of normalization term in cost function.

property b: numpy.ndarray

Prior error covariance matrix of scaling factors.

property x_stdev: numpy.ndarray

Element-wise standard deviation of x.

property x_prior: numpy.ndarray

Prior of x.

_check_before_solving() → None

Overwrite in inheriting classes to assert properties before solving.

cost_prior(s: numpy.ndarray) → numpy.float64

Prior contribution to cost function.

cost_prior_grad(s: numpy.ndarray) → numpy.ndarray

Prior contribution to gradient of cost function.

cost_prior_hess(s: numpy.ndarray) → numpy.ndarray

Prior contribution to hessian of cost function.

abstractmethod cost_prior_transformed(x: numpy.ndarray) → numpy.ndarray

Prior contribution to cost function in transformed coordinates.

abstractmethod cost_prior_grad_transformed(x: numpy.ndarray) → numpy.ndarray

Gradient of prior cost function in transformed coordinates.

abstractmethod cost_prior_hess_transformed(x: numpy.ndarray) → numpy.ndarray

Diagonal of Hessian of prior cost function in transformed coordinates.

class dubfi.inversion.inversion_other.InvertorOptimizerLaplace(y: dubfi.linalg.types.AbstractVector, prior: numpy.ndarray, h: dubfi.linalg.generic.ParametrizedVector, b: numpy.ndarray, r: dubfi.linalg.generic.ParametrizedOperator, norm_prefactor: float = 0.0)

Bases: InvertorOptimizerTransformedPrior

Numerical solver for flux inversion problem with Laplacian prior PDF.

Added in version 0.1.5.

Solve inverse problem using full ensemble-estimated model uncertainty.

Parameters:
  • y (AbstractVector) – vector of observations (usually minus model far-field or background)

  • prior (np.ndarray) – a priori estimate for scaling factors

  • h (ParametrizedVector) – model equivalents depending on scaling factors

  • b (np.ndarray) – error covariance matrix of prior scaling factors

  • r (ParametrizedOperator) – error covariance matrix of model-observation comparison, depends on scaling factors

  • norm_prefactor (float, default=0.0) –

    prefactor of normalization term in cost function.

    prefactor of normalization term in cost function.

cost_prior_transformed(x: numpy.ndarray) → numpy.ndarray

Prior contribution to cost function in transformed coordinates.

cost_prior_grad_transformed(x: numpy.ndarray) → numpy.ndarray

Gradient of prior cost function in transformed coordinates.

cost_prior_hess_transformed(x: numpy.ndarray) → numpy.ndarray

Diagonal of Hessian of prior cost function in transformed coordinates.

class dubfi.inversion.inversion_other.InvertorOptimizerLorentz(y: dubfi.linalg.types.AbstractVector, prior: numpy.ndarray, h: dubfi.linalg.generic.ParametrizedVector, b: numpy.ndarray, r: dubfi.linalg.generic.ParametrizedOperator, norm_prefactor: float = 0.0)

Bases: InvertorOptimizerTransformedPrior

Numerical solver for flux inversion problem with Lorentz/Cauchy/Breit-Wigner prior PDF.

Added in version 0.1.5.

Solve inverse problem using full ensemble-estimated model uncertainty.

Parameters:
  • y (AbstractVector) – vector of observations (usually minus model far-field or background)

  • prior (np.ndarray) – a priori estimate for scaling factors

  • h (ParametrizedVector) – model equivalents depending on scaling factors

  • b (np.ndarray) – error covariance matrix of prior scaling factors

  • r (ParametrizedOperator) – error covariance matrix of model-observation comparison, depends on scaling factors

  • norm_prefactor (float, default=0.0) –

    prefactor of normalization term in cost function.

    prefactor of normalization term in cost function.

cost_prior_transformed(x: numpy.ndarray) → numpy.ndarray

Prior contribution to cost function in transformed coordinates.

cost_prior_grad_transformed(x: numpy.ndarray) → numpy.ndarray

Gradient of prior cost function in transformed coordinates.

cost_prior_hess_transformed(x: numpy.ndarray) → numpy.ndarray

Diagonal of Hessian of prior cost function in transformed coordinates.

class dubfi.inversion.inversion_other.InvertorOptimizerSparseReconstruction(y: dubfi.linalg.types.AbstractVector, prior: numpy.ndarray, h: dubfi.linalg.generic.ParametrizedVector, b: numpy.ndarray, r: dubfi.linalg.generic.ParametrizedOperator, norm_prefactor: float = 0.0)

Bases: InvertorOptimizerTransformedPriorNonnormalized

Numerical solver for flux inversion problem for sparse reconstruction with zero prior.

Added in version 0.1.5.

Solve inverse problem using full ensemble-estimated model uncertainty.

Parameters:
  • y (AbstractVector) – vector of observations (usually minus model far-field or background)

  • prior (np.ndarray) – a priori estimate for scaling factors

  • h (ParametrizedVector) – model equivalents depending on scaling factors

  • b (np.ndarray) – error covariance matrix of prior scaling factors

  • r (ParametrizedOperator) – error covariance matrix of model-observation comparison, depends on scaling factors

  • norm_prefactor (float, default=0.0) –

    prefactor of normalization term in cost function.

    prefactor of normalization term in cost function.

cost_prior_transformed(x: numpy.ndarray) → numpy.ndarray

Prior contribution to cost function in transformed coordinates.

cost_prior_grad_transformed(x: numpy.ndarray) → numpy.ndarray

Gradient of prior cost function in transformed coordinates.

cost_prior_hess_transformed(x: numpy.ndarray) → numpy.ndarray

Diagonal of Hessian of prior cost function in transformed coordinates.