simpeg.utils.eigenvalue_by_power_iteration#

simpeg.utils.eigenvalue_by_power_iteration(combo_objfct, model, n_pw_iter=4, fields_list=None, random_seed=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.

random_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.

seedNone or RandomSeed, optional

Deprecated since version 0.23.0: Argument seed is deprecated in favor of random_seed and will be removed in SimPEG v0.24.0.

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 \(\mathbf{A}\) is our matrix and \(\mathbf{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.