Pseudospectra¶
C++ pseudospectra example driver
C++ ChunkedPseudospectra example driver
C++ TriangularPseudospectra example driver
C++ ChunkedTriangularPseudospectra example driver
The \(\epsilon\)-pseudospectrum of a square matrix \(A\) is the set of all shifts \(z\) such that \(\hat A - z\) is singular for some \(\hat A\) such that \(\| \hat A - A \|_2 < \epsilon\). In other words, \(z\) is in the \(\epsilon\)-pseudospectrum of \(A\) if the smallest singular value of \(A - z\) is less than \(\epsilon\).
Elemental currently supports two methods for computing pseudospectra: the first is a high-performance improvement of Shiu-Hong Lui’s triangularization followed by inverse iteration approach suggested in Computation of pseudospectra by continuation (please see Trefethen’s Computation of pseudospectra for a comprehensive review). In particular, Elemental begins by computing the Schur decomposition of the given matrix, which preserves the \(\epsilon\)-pseudospectrum, up to round-off error, and then simultaneously performs many Implicitly Restarted Arnoldi (IRA) iterations with the inverse normal matrix for each shift in a manner which communicates no more data than a standard triangular solve with many right-hand sides. Converged pseudospectral estimates are deflated after convergence.
The second approach is quite similar and, instead of reducing to triangular form, reduces to Hessenberg form and performs multi-shift triangular solves in a manner similar to Greg Henry’s The shifted Hessenberg system solve computation and Purkayastha et al.’s A parallel algorithm for the Sylvester-Observer Equation. This algorithm is not yet performance-tuned in Elemental, but should be preferred in massively-parallel situations where the Schur decomposition is considered infeasible.
Spectral portrait¶
The following routines return the norms of the shifted inverses over an
automatically-determined 2D window in the complex plane
(in the matrix invNormMap
) with the specified x and y resolutions.
The returned integer matrix corresponds to the number of iterations required
for convergence at each shift in the 2D grid.
C++ API¶
-
Matrix<int>
SpectralPortrait
(const Matrix<F> &A, Matrix<Base<F>> &invNormMap, Int realSize, Int imagSize, PseudospecCtrl<Base<F>> psCtrl = PseudospecCtrl<Base<F>>())¶
-
DistMatrix<int>
SpectralPortrait
(const AbstractDistMatrix<F> &A, AbstractDistMatrix<Base<F>> &invNormMap, Int realSize, Int imagSize, PseudospecCtrl<Base<F>> psCtrl = PseudospecCtrl<Base<F>>())¶
-
Matrix<int>
TriangularSpectralPortrait
(const Matrix<F> &U, Matrix<Base<F>> &invNormMap, Int realSize, Int imagSize, PseudospecCtrl<Base<F>> psCtrl = PseudospecCtrl<Base<F>>())¶
-
DistMatrix<int>
TriangularSpectralPortrait
(const AbstractDistMatrix<F> &U, AbstractDistMatrix<Base<F>> &invNormMap, Int realSize, Int imagSize, PseudospecCtrl<Base<F>> psCtrl = PseudospecCtrl<Base<F>>())¶
-
Matrix<int>
QuasiTriangularSpectralPortrait
(const Matrix<Real> &U, Matrix<Real> &invNormMap, Int realSize, Int imagSize, PseudospecCtrl<Real> psCtrl = PseudospecCtrl<Real>())¶
-
DistMatrix<int>
QuasiTriangularSpectralPortrait
(const AbstractDistMatrix<Real> &U, AbstractDistMatrix<Real> &invNormMap, Int realSize, Int imagSize, PseudospecCtrl<Real> psCtrl = PseudospecCtrl<Real>())¶
-
Matrix<int>
HessenbergSpectralPortrait
(const Matrix<F> &H, Matrix<Base<F>> &invNormMap, Int realSize, Int imagSize, PseudospecCtrl<Base<F>> psCtrl = PseudospecCtrl<Base<F>>())¶
-
DistMatrix<int>
HessenbergSpectralPortrait
(const AbstractDistMatrix<F> &H, AbstractDistMatrix<Base<F>> &invNormMap, Int realSize, Int imagSize, PseudospecCtrl<Base<F>> psCtrl = PseudospecCtrl<Base<F>>())¶
C API¶
-
ElError
ElSpectralPortrait_s
(ElConstMatrix_s A, ElMatrix_s invNormMap, ElInt realSize, ElInt imagSize)¶
-
ElError
ElSpectralPortrait_d
(ElConstMatrix_d A, ElMatrix_d invNormMap, ElInt realSize, ElInt imagSize)¶
-
ElError
ElSpectralPortrait_c
(ElConstMatrix_c A, ElMatrix_c invNormMap, ElInt realSize, ElInt imagSize)¶
-
ElError
ElSpectralPortrait_z
(ElConstMatrix_z A, ElMatrix_z invNormMap, ElInt realSize, ElInt imagSize)¶
-
ElError
ElSpectralPortraitDist_s
(ElConstDistMatrix_s A, ElDistMatrix_s invNormMap, ElInt realSize, ElInt imagSize)¶
-
ElError
ElSpectralPortraitDist_d
(ElConstDistMatrix_d A, ElDistMatrix_d invNormMap, ElInt realSize, ElInt imagSize)¶
-
ElError
ElSpectralPortraitDist_c
(ElConstDistMatrix_c A, ElDistMatrix_c invNormMap, ElInt realSize, ElInt imagSize)¶
-
ElError
ElSpectralPortraitDist_z
(ElConstDistMatrix_z A, ElDistMatrix_z invNormMap, ElInt realSize, ElInt imagSize)¶
-
ElError
ElSpectralPortraitX_s
(ElConstMatrix_s A, ElMatrix_s invNormMap, ElInt realSize, ElInt imagSize, ElPseudospecCtrl_s ctrl)¶
-
ElError
ElSpectralPortraitX_d
(ElConstMatrix_d A, ElMatrix_d invNormMap, ElInt realSize, ElInt imagSize, ElPseudospecCtrl_d ctrl)¶
-
ElError
ElSpectralPortraitX_c
(ElConstMatrix_c A, ElMatrix_c invNormMap, ElInt realSize, ElInt imagSize, ElPseudospecCtrl_s ctrl)¶
-
ElError
ElSpectralPortraitX_z
(ElConstMatrix_z A, ElMatrix_z invNormMap, ElInt realSize, ElInt imagSize, ElPseudospecCtrl_d ctrl)¶
-
ElError
ElSpectralPortraitXDist_s
(ElConstDistMatrix_s A, ElDistMatrix_s invNormMap, ElInt realSize, ElInt imagSize, ElPseudospecCtrl_s ctrl)¶
-
ElError
ElSpectralPortraitXDist_d
(ElConstDistMatrix_d A, ElDistMatrix_d invNormMap, ElInt realSize, ElInt imagSize, ElPseudospecCtrl_d ctrl)¶
-
ElError
ElSpectralPortraitXDist_c
(ElConstDistMatrix_c A, ElDistMatrix_c invNormMap, ElInt realSize, ElInt imagSize, ElPseudospecCtrl_s ctrl)¶
-
ElError
ElSpectralPortraitXDist_z
(ElConstDistMatrix_z A, ElDistMatrix_z invNormMap, ElInt realSize, ElInt imagSize, ElPseudospecCtrl_d ctrl)¶
Spectral window¶
The following routines return the norms of the shifted inverses over a
user-specified 2D window in the complex plane (in the matrix invNormMap
)
with the specified x and y resolutions.
The returned integer matrix corresponds to the number of iterations required
for convergence at each shift in the 2D grid.
C++ API¶
-
Matrix<int>
SpectralWindow
(const Matrix<F> &A, Matrix<Base<F>> &invNormMap, Complex<Base<F>> center, Base<F> realWidth, Base<F> imagWidth, Int realSize, Int imagSize, PseudospecCtrl<Base<F>> psCtrl = PseudospecCtrl<Base<F>>())¶
-
DistMatrix<int>
SpectralWindow
(const AbstractDistMatrix<F> &A, AbstractDistMatrix<Base<F>> &invNormMap, Complex<Base<F>> center, Base<F> realWidth, Base<F> imagWidth, Int realSize, Int imagSize, PseudospecCtrl<Base<F>> psCtrl = PseudospecCtrl<Base<F>>())¶
-
Matrix<int>
TriangularSpectralWindow
(const Matrix<F> &U, Matrix<Base<F>> &invNormMap, Complex<Base<F>> center, Base<F> realWidth, Base<F> imagWidth, Int realSize, Int imagSize, PseudospecCtrl<Base<F>> psCtrl = PseudospecCtrl<Base<F>>())¶
-
DistMatrix<int>
TriangularSpectralWindow
(const AbstractDistMatrix<F> &U, AbstractDistMatrix<Base<F>> &invNormMap, Complex<Base<F>> center, Base<F> realWidth, Base<F> imagWidth, Int realSize, Int imagSize, PseudospecCtrl<Base<F>> psCtrl = PseudospecCtrl<Base<F>>())¶
-
Matrix<int>
QuasiTriangularSpectralWindow
(const Matrix<Real> &U, Matrix<Real> &invNormMap, Complex<Real> center, Real realWidth, Real imagWidth, Int realSize, Int imagSize, PseudospecCtrl<Real> psCtrl = PseudospecCtrl<Real>())¶
-
DistMatrix<int>
QuasiTriangularSpectralWindow
(const AbstractDistMatrix<Real> &U, AbstractDistMatrix<Real> &invNormMap, Complex<Real> center, Real realWidth, Real imagWidth, Int realSize, Int imagSize, PseudospecCtrl<Real> psCtrl = PseudospecCtrl<Real>())¶
-
Matrix<int>
HessenbergSpectralWindow
(const Matrix<F> &H, Matrix<Base<F>> &invNormMap, Complex<Base<F>> center, Base<F> realWidth, Base<F> imagWidth, Int realSize, Int imagSize, PseudospecCtrl<Base<F>> psCtrl = PseudospecCtrl<Base<F>>())¶
-
DistMatrix<int>
HessenbergSpectralWindow
(const AbstractDistMatrix<F> &H, AbstractDistMatrix<Base<F>> &invNormMap, Complex<Base<F>> center, Base<F> realWidth, Base<F> imagWidth, Int realSize, Int imagSize, PseudospecCtrl<Base<F>> psCtrl = PseudospecCtrl<Base<F>>())¶
C API¶
-
ElError
ElSpectralWindow_s
(ElConstMatrix_s A, ElMatrix_s invNormMap, complex_float center, float realWidth, float imagWidth, ElInt realSize, ElInt imagSize)¶
-
ElError
ElSpectralWindow_d
(ElConstMatrix_d A, ElMatrix_d invNormMap, complex_double center, double realWidth, double imagWidth, ElInt realSize, ElInt imagSize)¶
-
ElError
ElSpectralWindow_c
(ElConstMatrix_c A, ElMatrix_c invNormMap, complex_float center, float realWidth, float imagWidth, ElInt realSize, ElInt imagSize)¶
-
ElError
ElSpectralWindow_z
(ElConstMatrix_z A, ElMatrix_z invNormMap, complex_double center, double realWidth, double imagWidth, ElInt realSize, ElInt imagSize)¶
-
ElError
ElSpectralWindowDist_s
(ElConstDistMatrix_s A, ElDistMatrix_s invNormMap, complex_float center, float realWidth, float imagWidth, ElInt realSize, ElInt imagSize)¶
-
ElError
ElSpectralWindowDist_d
(ElConstDistMatrix_d A, ElDistMatrix_d invNormMap, complex_double center, double realWidth, double imagWidth, ElInt realSize, ElInt imagSize)¶
-
ElError
ElSpectralWindowDist_c
(ElConstDistMatrix_c A, ElDistMatrix_c invNormMap, complex_float center, float realWidth, float imagWidth, ElInt realSize, ElInt imagSize)¶
-
ElError
ElSpectralWindowDist_z
(ElConstDistMatrix_z A, ElDistMatrix_z invNormMap, complex_double center, double realWidth, double imagWidth, ElInt realSize, ElInt imagSize)¶
-
ElError
ElSpectralWindowX_s
(ElConstMatrix_s A, ElMatrix_s invNormMap, complex_float center, float realWidth, float imagWidth, ElInt realSize, ElInt imagSize, ElPseudospecCtrl_s ctrl)¶
-
ElError
ElSpectralWindowX_d
(ElConstMatrix_d A, ElMatrix_d invNormMap, complex_double center, double realWidth, double imagWidth, ElInt realSize, ElInt imagSize, ElPseudospecCtrl_d ctrl)¶
-
ElError
ElSpectralWindowX_c
(ElConstMatrix_c A, ElMatrix_c invNormMap, complex_float center, float realWidth, float imagWidth, ElInt realSize, ElInt imagSize, ElPseudospecCtrl_s ctrl)¶
-
ElError
ElSpectralWindowX_z
(ElConstMatrix_z A, ElMatrix_z invNormMap, complex_double center, double realWidth, double imagWidth, ElInt realSize, ElInt imagSize, ElPseudospecCtrl_d ctrl)¶
-
ElError
ElSpectralWindowXDist_s
(ElConstDistMatrix_s A, ElDistMatrix_s invNormMap, complex_float center, float realWidth, float imagWidth, ElInt realSize, ElInt imagSize, ElPseudospecCtrl_s ctrl)¶
-
ElError
ElSpectralWindowXDist_d
(ElConstDistMatrix_d A, ElDistMatrix_d invNormMap, complex_double center, double realWidth, double imagWidth, ElInt realSize, ElInt imagSize, ElPseudospecCtrl_d ctrl)¶
-
ElError
ElSpectralWindowXDist_c
(ElConstDistMatrix_c A, ElDistMatrix_c invNormMap, complex_float center, float realWidth, float imagWidth, ElInt realSize, ElInt imagSize, ElPseudospecCtrl_s ctrl)¶
-
ElError
ElSpectralWindowXDist_z
(ElConstDistMatrix_z A, ElDistMatrix_z invNormMap, complex_double center, double realWidth, double imagWidth, ElInt realSize, ElInt imagSize, ElPseudospecCtrl_d ctrl)¶
Spectral cloud¶
The following routines return the norms of the shifted inverses in the vector
invNorms
for a given set of shifts. The returned integer vector is a list
of the number of iterations required for convergence of each shift.
C++ API¶
-
Matrix<int>
SpectralCloud
(const Matrix<F> &A, const Matrix<Complex<Base<F>>> &shifts, Matrix<Base<F>> &invNorms, PseudospecCtrl<Base<F>> psCtrl = PseudospecCtrl<Base<F>>())¶
-
DistMatrix<int, VR, STAR>
SpectralCloud
(const AbstractDistMatrix<F> &A, const AbstractDistMatrix<Complex<Base<F>>> &shifts, AbstractDistMatrix<Base<F>> &invNorms, PseudospecCtrl<Base<F>> psCtrl = PseudospecCtrl<Base<F>>())¶
-
Matrix<int>
TriangularSpectralCloud
(const Matrix<F> &U, const Matrix<Complex<Base<F>>> &shifts, Matrix<Base<F>> &invNorms, PseudospecCtrl<Base<F>> psCtrl = PseudospecCtrl<Base<F>>())¶
-
DistMatrix<int, VR, STAR>
TriangularSpectralCloud
(const AbstractDistMatrix<F> &U, const AbstractDistMatrix<Complex<Base<F>>> &shifts, AbstractDistMatrix<Base<F>> &invNorms, PseudospecCtrl<Base<F>> psCtrl = PseudospecCtrl<Base<F>>())¶
-
DistMatrix<int, VR, STAR>
QuasiTriangularSpectralCloud
(const AbstractDistMatrix<Real> &U, const AbstractDistMatrix<Complex<Real>> &shifts, AbstractDistMatrix<Real> &invNorms, PseudospecCtrl<Real> psCtrl = PseudospecCtrl<Real>())¶
-
Matrix<int>
HessenbergSpectralCloud
(const Matrix<F> &H, const Matrix<Complex<Base<F>>> &shifts, Matrix<Base<F>> &invNorms, PseudospecCtrl<Base<F>> psCtrl = PseudospecCtrl<Base<F>>())¶
-
DistMatrix<int, VR, STAR>
HessenbergSpectralCloud
(const AbstractDistMatrix<F> &H, const AbstractDistMatrix<Complex<Base<F>>> &shifts, AbstractDistMatrix<Base<F>> &invNorms, PseudospecCtrl<Base<F>> psCtrl = PseudospecCtrl<Base<F>>())¶
C API¶
-
ElError
ElSpectralCloudDist_s
(ElConstDistMatrix_s A, ElConstDistMatrix_c shifts, ElDistMatrix_s invNormMap)¶
-
ElError
ElSpectralCloudDist_d
(ElConstDistMatrix_d A, ElConstDistMatrix_z shifts, ElDistMatrix_d invNormMap)¶
-
ElError
ElSpectralCloudDist_c
(ElConstDistMatrix_c A, ElConstDistMatrix_c shifts, ElDistMatrix_s invNormMap)¶
-
ElError
ElSpectralCloudDist_z
(ElConstDistMatrix_z A, ElConstDistMatrix_z shifts, ElDistMatrix_d invNormMap)¶
-
ElError
ElSpectralCloudX_s
(ElConstMatrix_s A, ElConstMatrix_c shifts, ElMatrix_s invNormMap, ElPseudospecCtrl_s ctrl)¶
-
ElError
ElSpectralCloudX_d
(ElConstMatrix_d A, ElConstMatrix_z shifts, ElMatrix_d invNormMap, ElPseudospecCtrl_d ctrl)¶
-
ElError
ElSpectralCloudX_c
(ElConstMatrix_c A, ElConstMatrix_c shifts, ElMatrix_s invNormMap, ElPseudospecCtrl_s ctrl)¶
-
ElError
ElSpectralCloudX_z
(ElConstMatrix_z A, ElConstMatrix_z shifts, ElMatrix_d invNormMap, ElPseudospecCtrl_d ctrl)¶
-
ElError
ElSpectralCloudXDist_s
(ElConstDistMatrix_s A, ElConstDistMatrix_c shifts, ElDistMatrix_s invNormMap, ElPseudospecCtrl_s ctrl)¶
-
ElError
ElSpectralCloudXDist_d
(ElConstDistMatrix_d A, ElConstDistMatrix_z shifts, ElDistMatrix_d invNormMap, ElPseudospecCtrl_d ctrl)¶
-
ElError
ElSpectralCloudXDist_c
(ElConstDistMatrix_c A, ElConstDistMatrix_c shifts, ElDistMatrix_s invNormMap, ElPseudospecCtrl_s ctrl)¶
-
ElError
ElSpectralCloudXDist_z
(ElConstDistMatrix_z A, ElConstDistMatrix_z shifts, ElDistMatrix_d invNormMap, ElPseudospecCtrl_d ctrl)¶
Control structures¶
C++ API¶
-
class
SnapshotCtrl
¶ -
-
Int
imgDispFreq
¶ Negative if no snapshots should be saved/displayed, zero if only a final snapshot should be saved/displayed, and equal to \(n > 0\) if, in addition to a final snapshot, the partial results should be output roughly overy n iterations (there is no output in the middle of Impliclty Restarted Arnoldi cycles).
-
std::string
imgBase
¶
-
std::string
numBase
¶
-
FileFormat
imgFormat
¶
-
FileFormat
numFormat
¶
-
SnapshotCtrl
()¶ All counters and dimensions are initially zero, all save/display “frequencies” are set to -1 (no output), the basename strings are initialized to “ps”, the image format to
PNG
, and the numerical format toASCII_MATLAB
.
-
void
ResetCounts
()¶ Resets all counters to zero
-
void
Iterate
()¶ Increments all counters by one
-
Int
C API¶
-
ElSnapshotCtrl
¶ -
-
ElInt
imgDispFreq
¶ Negative if no snapshots should be saved/displayed, zero if only a final snapshot should be saved/displayed, and equal to \(n > 0\) if, in addition to a final snapshot, the partial results should be output roughly overy n iterations (there is no output in the middle of Impliclty Restarted Arnoldi cycles).
-
const char*
imgBase
¶
-
const char*
numBase
¶
-
ElFileFormat
imgFormat
¶
-
ElFileFormat
numFormat
¶
-
ElInt
-
ElError
ElSnapshotCtrlDefault
(ElSnapshotCtrl* ctrl)¶
-
ElError
ElSnapshotCtrlDestroy
(ElSnapshotCtrl* ctrl)¶
-
ElPseudospecCtrl_s
¶ -
bool
forceComplexSchur
¶
-
bool
forceComplexPs
¶
-
ElSchurCtrl_s
schurCtrl
¶
-
float
tol
¶
-
bool
deflate
¶
-
bool
arnoldi
¶
-
bool
reorthog
¶
-
bool
progress
¶
-
ElSnapshotCtrl
snapCtrl
¶
-
bool
-
ElPseudospecCtrl_d
¶ -
bool
forceComplexSchur
¶
-
bool
forceComplexPs
¶
-
ElSchurCtrl_s
schurCtrl
¶
-
double
tol
¶
-
bool
deflate
¶
-
bool
arnoldi
¶
-
bool
reorthog
¶
-
bool
progress
¶
-
ElSnapshotCtrl
snapCtrl
¶
-
bool
-
ElError
ElPseudospecCtrlDefault_s
(ElPseudospecCtrl_s* ctrl)¶
-
ElError
ElPseudospecCtrlDefault_d
(ElPseudospecCtrl_d* ctrl)¶
-
ElError
ElPseudospecCtrlDestroy_s
(ElPseudospecCtrl_s* ctrl)¶
-
ElError
ElPseudospecCtrlDestroy_d
(ElPseudospecCtrl_d* ctrl)¶
Python API¶
TODO