How to Choose and Configure Regularization
The MRE inverse problem is ill-posed, so a reconstruction needs regularization to be stable. This page helps you pick and configure it. For every regularizer's fields, constructor, and penalty functional, see Regularization in the API reference.
The three kinds
Sentinel's regularizers act at three different points in the iteration, and you will normally combine them:
Penalty methods add a term to the objective, so they change what is being minimized:
TikhonovReg,TotalVariationReg,SoftPriorReg,ExteriorConstraintReg,ForceBalanceReg.Hessian modifiers change the update direction rather than the objective:
JoachimowiczReg,MarquardtReg.Post-processing is applied to the property map after each iteration:
VanHoutenReg,SpatialFilterReg,BoundsReg.
Choosing a penalty
| You want | Use |
|---|---|
| General smoothing, a sane default | TikhonovReg |
| To preserve edges between regions of different stiffness | TotalVariationReg |
| To use known anatomical regions as prior information | SoftPriorReg |
| To keep properties inside a physical range | ExteriorConstraintReg |
| To penalize violation of the momentum equation | ForceBalanceReg |
Tikhonov smooths across everything, including real boundaries. Total variation is the one to reach for when you expect genuine stiffness contrast and Tikhonov is blurring it away.
ForceBalanceReg has its own calibration guidance, including how relative and absolute weights differ — see its section in Regularization before enabling it.
The defaults
If you do not specify regularization, InversionProblem applies default_regularization(), which is:
[SpatialFilter(), CGResidualScaling(), VanHouten(), McGarryBounds()]a spatial filter, CG residual scaling, Van Houten clipping, and McGarry bounds. That combination is what the bundled examples and the test suite run, so it is the best-supported starting point.
Scheduling the weight
A strong penalty early keeps the first iterations stable; a weaker penalty later lets the data pull the reconstruction into detail. Ramp the weight with WeightSchedule rather than picking one compromise value:
ws = WeightSchedule(start_weight = 1e-2, end_weight = 1e-4,
max_iter = 20, delay = 0)
tikhonov = TikhonovReg(1, ws, ws, material)The weight interpolates linearly from start_weight to end_weight over max_iter iterations, after delay iterations at the starting value.
Not every regularizer takes a schedule
TikhonovReg and TotalVariationReg take WeightSchedule values for their real and imaginary weights. ExteriorConstraintReg takes a plain Float64 weight instead. Check the constructor in Regularization before passing a schedule.
CG residual scaling
CG residual scaling is configured alongside the regularizers but is not a penalty — it is a solver parameter carried by the solve configuration, and it materializes no regularization object. See cg_update_scale in Regularization.
Next
Regularization — every regularizer, its fields, and its functional.
How to Choose an Optimizer — Marquardt damping pairs with Gauss-Newton.
Mathematical Reference — where the penalty enters the objective.