simpeg.utils.eigenvalue_by_power_iteration#

simpeg.utils.eigenvalue_by_power_iteration(combo_objfct, model, n_pw_iter=4, fields_list=None, seed=None)[source]#

Estimate largest eigenvalue in absolute value using power iteration.

Uses the power iteration approach to estimate the largest eigenvalue in absolute value for a single simpeg.BaseObjectiveFunction or a combination of objective functions stored in a simpeg.ComboObjectiveFunction.

Parameters:
combo_objfctsimpeg.BaseObjectiveFunction

Objective function or a combo objective function

modelnumpy.ndarray

Current model

n_pw_iterint

Number of power iterations used to estimate the highest eigenvalue

fields_listlist (optional)

list of fields objects for each data misfit term in combo_objfct. If none given, they will be evaluated within the function. If combo_objfct mixs data misfit and regularization terms, the list should contains simpeg.fields for the data misfit terms and None for the regularization term.

seedNone or RandomSeed, optional

Random seed for the initial random guess of eigenvector. It can either be an int, a predefined Numpy random number generator, or any valid input to numpy.random.default_rng.

Returns:
float

Estimated value of the highest eigenvalue in absolute value

Notes

After k power iterations, the largest eigenvalue in absolute value is approximated by the Rayleigh quotient:

\[\lambda_k = \frac{\mathbf{x_k^T A x_k}}{\mathbf{x_k^T x_k}}\]

where \(\mathfb{A}\) is our matrix and \(\mathfb{x_k}\) is computed recursively according to:

\[\mathbf{x_{k+1}} = \frac{\mathbf{A x_k}}{\| \mathbf{Ax_k} \|}\]

The elements of the initial vector \(\mathbf{x_0}\) are randomly selected from a uniform distribution.