simpeg.regularization.AmplitudeSmoothnessFirstOrder.update_weights#
- AmplitudeSmoothnessFirstOrder.update_weights(m)[source]#
Update the IRLS weights for sparse smoothness regularization.
- Parameters:
- m
numpy.ndarray
The model used to update the IRLS weights.
- m
Notes
Let us consider the IRLS weights for sparse smoothness along the x-direction. When the class property gradient_type`=’components’`, IRLS weights are computed using the regularization kernel function and we define:
where
is the model provided, is the partial cell gradient operator along x (i.e. x-derivative), and is a reference model (optional, activated using reference_model_in_smooth). SeeSmoothnessFirstOrder.f_m()
for a more comprehensive definition of the regularization kernel function.However, when the class property gradient_type`=’total’`, IRLS weights are computed using the magnitude of the total gradient and we define:
where
for averages the partial gradients from their respective faces to cell centers, and averages the sum of the absolute values back to the appropriate faces.Once
is obtained, the IRLS weights are computed via:where
represents elementwise division, is a small constant added for stability of the algorithm (set using the irls_threshold property), and defines the norm for each element (set using the norm property). applies optional scaling to the IRLS weights (when the irls_scaled property isTrue
). The scaling acts to preserve the balance between the data misfit and the components of the regularization based on the derivative of the l2-norm measure. And it assists the convergence by ensuring the model does not deviate aggressively from the global 2-norm solution during the first few IRLS iterations.To apply the scaling, let
and define a vector array
such that:The scaling vector
is: