pymor.algorithms.samdp

Module Contents

pymor.algorithms.samdp.samdp(A, E, B, C, nwanted, init_shifts=None, which='NR', tol=1e-10, imagtol=1e-06, conjtol=1e-08, dorqitol=0.0001, rqitol=1e-10, maxrestart=100, krestart=20, rqi_maxiter=10)[source]

Compute the dominant pole triplets and residues of the transfer function of an LTI system.

This function uses the subspace accelerated dominant pole (SAMDP) algorithm as described in [RM06] in Algorithm 2 in order to compute dominant pole triplets and residues of the transfer function

\[H(s) = C (s E - A)^{-1} B\]

of an LTI system. It is possible to take advantage of prior knowledge about the poles by specifying shift parameters, which are injected after a new pole has been found.

Note

Pairs of complex conjugate eigenvalues are always returned together. Accordingly, the number of returned poles can be equal to nwanted + 1.

Parameters:
  • A – The Operator A.

  • E – The Operator E or None.

  • B – The operator B as a VectorArray from A.source.

  • C – The operator C as a VectorArray from A.source.

  • nwanted – The number of dominant poles that should be computed.

  • init_shifts – A NumPy array containing shifts which are injected after a new pole has been found.

  • which

    A string specifying the strategy by which the dominant poles and residues are selected. Possible values are:

    • 'NR': select poles with largest norm(residual) / abs(Re(pole))

    • 'NS': select poles with largest norm(residual) / abs(pole)

    • 'NM': select poles with largest norm(residual)

  • tol – Tolerance for the residual of the poles.

  • imagtol – Relative tolerance for imaginary parts of pairs of complex conjugate eigenvalues.

  • conjtol – Tolerance for the residual of the complex conjugate of a pole.

  • dorqitol – If the residual is smaller than dorqitol the two-sided Rayleigh quotient iteration is executed.

  • rqitol – Tolerance for the residual of a pole in the two-sided Rayleigh quotient iteration.

  • maxrestart – The maximum number of restarts.

  • krestart – Maximum dimension of search space before performing a restart.

  • rqi_maxiter – Maximum number of iterations for the two-sided Rayleigh quotient iteration.

Returns:

  • poles – A 1D NumPy array containing the computed dominant poles.

  • residues – A 3D NumPy array of shape (len(poles), len(C), len(B)) containing the computed residues.

  • rightev – A VectorArray containing the right eigenvectors of the computed poles.

  • leftev – A VectorArray containing the left eigenvectors of the computed poles.