pymor.solvers.matrix_equations.lradi

Module Contents

class pymor.solvers.matrix_equations.lradi.LRADILyapunovSolverLRCF(lradi_tol=1e-10, lradi_maxiter=500, lradi_shifts='projection_shifts', shifted_system_solver=None, projection_shifts_init_maxiter=20, projection_shifts_subspace_columns=6, wachspress_large_ritz_num=50, wachspress_small_ritz_num=25, wachspress_tol=1e-10)[source]

Bases: pymor.solvers.matrix_equations.interface.LyapunovSolverLRCF

Compute a LR Cholesky factor of the solution of a LyapunovEquation using ADI iteration.

Uses the low-rank ADI iteration as described in Algorithm 4.3 in [Kurschner16].

Parameters:
  • lradi_tol – Convergence tolerance for the ADI iteration.

  • lradi_maxiter – Maximum number of ADI steps. A real shift counts as one step, a complex-conjugate shift pair as two.

  • lradi_shifts – Strategy for computing the ADI shift parameters, either 'projection_shifts' or 'wachspress_shifts'.

  • shifted_system_solver – The Solver for the shifted systems.

  • projection_shifts_init_maxiter – Maximum number of attempts to generate stable initial shifts before an error is raised. See projection_shifts_init.

  • projection_shifts_subspace_columns – Number of trailing iterate blocks of the current low-rank factor used to span the Galerkin subspace for the subsequent shifts. See projection_shifts.

  • wachspress_large_ritz_num – Number of Arnoldi iterations for approximating the largest-modulus eigenvalues of \(E^{-1} A\). See wachspress_shifts_init.

  • wachspress_small_ritz_num – Number of Arnoldi iterations (applied to \(A^{-1} E\)) for approximating the smallest-modulus eigenvalues of \(E^{-1} A\). See wachspress_shifts_init.

  • wachspress_tol – Tolerance determining how many Wachspress shifts are generated. See wachspress_shifts_init.

Methods

cycle_shifts

Return previously computed shifts.

projection_shifts

Find further projection shifts.

projection_shifts_init

Find starting projection shifts.

wachspress_shifts_init

Compute optimal shifts for symmetric matrices.

cycle_shifts(A, E, V, Z, prev_shifts)[source]

Return previously computed shifts.

projection_shifts(A, E, V, Z, prev_shifts)[source]

Find further projection shifts.

Uses Galerkin projection on spaces spanned by LR-ADI iterates. See [Kurschner16], pp. 92-95.

Parameters:
  • A – The Operator A from the corresponding Lyapunov equation.

  • E – The Operator E from the corresponding Lyapunov equation.

  • V – A VectorArray representing the currently computed iterate.

  • Z – A VectorArray representing the current approximate solution.

  • prev_shifts – A NumPy array containing the set of all previously used shift parameters.

Returns:

shifts – A NumPy array containing a set of stable shift parameters.

projection_shifts_init(A, E, B)[source]

Find starting projection shifts.

Uses Galerkin projection on the space spanned by the right-hand side if it produces stable shifts. Otherwise, uses a randomly generated subspace. See [Kurschner16], pp. 92-95.

Parameters:
  • A – The Operator A from the corresponding Lyapunov equation.

  • E – The Operator E from the corresponding Lyapunov equation.

  • B – The VectorArray B from the corresponding Lyapunov equation.

Returns:

shifts – A NumPy array containing a set of stable shift parameters.

wachspress_shifts_init(A, E, B)[source]

Compute optimal shifts for symmetric matrices.

This method computes optimal shift parameters for the LR-ADI iteration based on Wachspress’ method which is discussed in [LW02]. This implementation assumes that \(A\) and \(E\) are both real and symmetric.

Parameters:
  • A – The Operator A from the corresponding Lyapunov equation.

  • E – The Operator E from the corresponding Lyapunov equation.

  • B – The VectorArray B from the corresponding Lyapunov equation.

Returns:

shifts – A NumPy array containing a set of stable shift parameters.