krypy.deflation - Linear Systems Solvers with Deflation

The deflation module provides functions for deflated Krylov subspace methods. With deflation, a linear system is multiplied with a suitable projection with the goal of accelerating the overall solution process for the linear system. This module provides tools that are needed in deflated Krylov subspace methods such as involved projections and computations of Ritz or harmonic Ritz pairs from a deflated Krylov subspace.

class krypy.deflation.DeflatedCg(*args, **kwargs)

Bases: krypy.deflation._DeflationMixin, krypy.linsys.Cg

Deflated preconditioned CG method.

See _DeflationMixin and Cg for the documentation of the available parameters.


Computes \(\langle C,M_lAM_rV_n\rangle\) efficiently with a three-term recurrence.

class krypy.deflation.DeflatedMinres(linear_system, U=None, projection_kwargs=None, *args, **kwargs)

Bases: krypy.deflation._DeflationMixin, krypy.linsys.Minres

Deflated preconditioned MINRES method.

See _DeflationMixin and Minres for the documentation of the available parameters.

class krypy.deflation.DeflatedGmres(linear_system, U=None, projection_kwargs=None, *args, **kwargs)

Bases: krypy.deflation._DeflationMixin, krypy.linsys.Gmres

Deflated preconditioned GMRES method.

See _DeflationMixin and Gmres for the documentation of the available parameters.

class krypy.deflation._DeflationMixin(linear_system, U=None, projection_kwargs=None, *args, **kwargs)

Bases: object

Mixin class for deflation in Krylov subspace methods.

Can be used to add deflation functionality to any solver from linsys.

  • linear_system – the LinearSystem that should be solved.
  • U – a basis of the deflation space with U.shape == (N, k).

All other parameters are passed through to the underlying solver from linsys.


\(\underline{B}=\langle V_{n+1},M_lAM_rU\rangle\).

This property is obtained from \(C\) if the operator is self-adjoint. Otherwise, the inner products have to be formed explicitly.

C = None

\(C=\langle U,M_lAM_rV_n\rangle\).

This attribute is updated while the Arnoldi/Lanczos method proceeds. See also _apply_projection().

E = None

\(E=\langle U,M_lAM_rU\rangle\).


Apply the projection and store inner product.

Parameters:v – the vector resulting from an application of \(M_lAM_r\) to the current Arnoldi vector. (CG needs special treatment, here).

Return the projected initial residual.

Returns \(MPM_l(b-Ax_0)\).

estimate_time(nsteps, ndefl, deflweight=1.0)

Estimate time needed to run nsteps iterations with deflation

Uses timings from linear_system if it is an instance of TimedLinearSystem. Otherwise, an OtherError is raised.

  • nsteps – number of iterations.
  • ndefl – number of deflation vectors.
  • deflweight – (optional) the time for the setup and application of the projection for deflation is multiplied by this factor. This can be used as a counter measure for the evaluation of Ritz vectors. Defaults to 1.
projection = None

Projection that is used for deflation.

class krypy.deflation.ObliqueProjection(linear_system, U, qr_reorthos=0, **kwargs)

Bases: krypy.deflation._Projection

Oblique projection for left deflation.

AU = None

Result of application of operator to deflation space, i.e., \(M_lAM_rU\).


Result of preconditioned operator to deflation space, i.e., \(MM_lAM_rU\).

U = None

An orthonormalized basis of the deflation space U with respect to provided inner product.


Correct the given approximate solution z with respect to the linear system linear_system and the deflation space defined by U.

class krypy.deflation._Projection(linear_system, U, **kwargs)

Bases: krypy.utils.Projection

Abstract base class of a projection for deflation.

  • A – the LinearSystem.
  • U – basis of the deflation space with U.shape == (N, d).

All parameters of Projection are valid except X and Y.

class krypy.deflation.Ritz(deflated_solver, mode='ritz')

Bases: object

Compute Ritz pairs from a deflated Krylov subspace method.

  • deflated_solver – an instance of a deflated solver.
  • mode


    • ritz (default): compute Ritz pairs.
    • harmonic: compute harmonic Ritz pairs.
coeffs = None

Coefficients for Ritz vectors in the basis \([V_n,U]\).


Explicitly computes the Ritz residual.


Explicitly computes the Ritz residual norms.


Compute Ritz vectors.

resnorms = None

Residual norms of Ritz pairs.

values = None

Ritz values.

class krypy.deflation.Arnoldifyer(deflated_solver)

Bases: object

Obtain Arnoldi relations for approximate deflated Krylov subspaces.

Parameters:deflated_solver – an instance of a deflated solver.
get(Wt, full=False)

Get Arnoldi relation for a deflation subspace choice.

  • Wt – the coefficients \(\tilde{W}\) of the deflation vectors in the basis \([V_n,U]\) with Wt.shape == (n+d, k), i.e., the deflation vectors are \(W=[V_n,U]\tilde{W}\). Must fulfill \(\tilde{W}^*\tilde{W}=I_k\).
  • full – (optional) should the full Arnoldi basis and the full perturbation be returned? Defaults to False.

  • Hh: the Hessenberg matrix with Hh.shape == (n+d-k, n+d-k).
  • Rh: the perturbation core matrix with Rh.shape == (l, n+d-k).
  • q_norm: norm \(\|q\|_2\).
  • vdiff_norm: the norm of the difference of the initial vectors \(\tilde{v}-\hat{v}\).
  • PWAW_norm: norm of the projection \(P_{\mathcal{W}^\perp,A\mathcal{W}}\).
  • Vh: (if full == True) the Arnoldi basis with Vh.shape == (N, n+d-k).
  • F: (if full == True) the perturbation matrix \(F=-Z\hat{R}\hat{V}_n^* - \hat{V}_n\hat{R}^*Z^*\).

krypy.deflation.bound_pseudo(arnoldifyer, Wt, g_norm=0.0, G_norm=0.0, GW_norm=0.0, WGW_norm=0.0, tol=1e-06, pseudo_type='auto', pseudo_kwargs=None, delta_n=20, terminate_factor=1.0)

Bound residual norms of next deflated system.

  • arnoldifyer – an instance of Arnoldifyer.
  • Wt – coefficients \(\tilde{W}\in\mathbb{C}^{n+d,k}\) of the considered deflation vectors \(W\) for the basis \([V,U]\) where V=last_solver.V and U=last_P.U, i.e., \(W=[V,U]\tilde{W}\) and \(\mathcal{W}=\operatorname{colspan}(W)\). Must fulfill \(\tilde{W}^*\tilde{W}=I_k\).
  • g_norm – norm \(\|g\|\) of difference \(g=c-b\) of right hand sides. Has to fulfill \(\|g\|<\|b\|\).
  • G_norm – norm \(\|G\|\) of difference \(G=B-A\) of operators.
  • GW_norm – Norm \(\|G|_{\mathcal{W}}\|\) of difference \(G=B-A\) of operators restricted to \(\mathcal{W}\).
  • WGW_norm – Norm \(\|\langle W,GW\rangle\|_2\).
  • pseudo_type

    One of

    • 'auto': determines if \(\hat{H}\) is non-normal, normal or Hermitian and uses the corresponding mode (see other options below).
    • 'nonnormal': the pseudospectrum of the Hessenberg matrix \(\hat{H}\) is used (involves one computation of a pseudospectrum)
    • 'normal': the pseudospectrum of \(\hat{H}\) is computed efficiently by the union of circles around the eigenvalues.
    • 'hermitian': the pseudospectrum of \(\hat{H}\) is computed efficiently by the union of intervals around the eigenvalues.
    • 'contain': the pseudospectrum of the extended Hessenberg matrix \(\begin{bmatrix}\hat{H}\\S_i\end{bmatrix}\) is used (pseudospectrum has to be re computed for each iteration).
    • 'omit': do not compute the pseudospectrum at all and just use the residual bounds from the approximate Krylov subspace.
  • pseudo_kwargs – (optional) arguments that are passed to the method that computes the pseudospectrum.
  • terminate_factor – (optional) terminate the computation if the ratio of two subsequent residual norms is larger than the provided factor. Defaults to 1.