inversion_ideas.create_sparse_inversion#

inversion_ideas.create_sparse_inversion(data_misfit, model_norm, *, starting_beta, initial_model, minimizer, beta_cooling_factor=2.0, data_misfit_rtol=0.1, chi_l2_target=1.0, model_norm_rtol=0.001, max_iterations=None, cache_models=True, preconditioner=None)#

Create sparse norm inversion of the form: \(\phi_d + \beta \phi_m\).

Build an inversion where \(\phi_m\) is a sparse norm regularization. An IRLS algorithm will be applied, split in two stages. The inversion will stop when the following inequality holds:

\[\frac{|\phi_m^{(k)} - \phi_m^{(k-1)}|}{|\phi_m^{(k-1)}|} < \eta_{\phi_m}\]

where \(\eta_{\phi_m}\) is the model_norm_rtol.

Parameters:
data_misfitObjective

Data misfit term \(\phi_d\).

model_normObjective

Model norm \(\phi_m\). It can be a single objective function term or a combo containing multiple ones. At least one of them should be a sparse regularization term.

starting_betafloat

Starting value for the trade-off parameter \(\beta\).

initial_model(n_params) array

Initial model to use in the inversion.

minimizerMinimizer

Instance of Minimizer used to minimize the objective function during the inversion.

beta_cooling_factorfloat, optional

Cooling factor for the trade-off parameter \(\beta\). Every beta_cooling_rate iterations, the \(\beta\) will be cooled down by dividing it by the beta_cooling_factor.

data_misfit_rtolfloat, optional

Tolerance for the data misfit. This value is used to determine whether to cool down the IRLS threshold or beta. See eq. 21 in Fournier and Oldenburg (2019).

chi_l2_targetfloat, optional

Chi factor target for the stage one (the L2 inversion). Once this chi target is reached, the second stage starts.

model_norm_rtolfloat, optional

Tolerance for the model norm. This value is used to determine if the inversion should stop. See eq. 22 in Fournier and Oldenburg (2019).

max_iterationsint, optional

Max amount of iterations that will be performed. If None, then there will be no limit on the total amount of iterations.

cache_modelsbool, optional

Whether to cache models after each iteration in the inversion.

preconditioner{“jacobi”} or 2d array or sparse array or LinearOperator or None, optional

Preconditioner that will be passed to the minimizer on every call during the inversion. If "bfgs", a default BFGS preconditioner will be used, where the initial estimate for it will be set as the Jacobi preconditioner of the model_norm times the starting_beta. If "jacobi", a default Jacobi preconditioner that will get updated on every iteration will be defined for the inversion. If None, no preconditioner will be passed.

Returns:
Inversion