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)[source]#

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_misfitbase.Objective

Data misfit term \(\phi_d\).

model_normbase.Objective

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.

minimizerbase.Minimizer or callable()

Instance of Minimizer or callable used to minimize the objective function during the inversion. It must take the objective function and a model as arguments.

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