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, seed=0)[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.

seed

Random seed which is used for computing the initial shift and random restarts.

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.