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 orNone
.- B
The operator B as a
VectorArray
fromA.source
.- C
The operator C as a
VectorArray
fromA.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.