betaRMP
betaRMP is a benchmarking visualization tool written in Matlab for
creating β-Relative
Minimization Profiles (β-RMPs).
Though originally designed for comparing methods for constrained
optimization, β-RMPs can
also be used in other contexts, such as assessing numerical accuracy of
solvers under different computational budgets.
eigsPlus
eigsPlus provides an enhanced, alternative version to
Matlab's eigs routine, supported on
Matlab R2012b and later and Octave, that ensures that only the converged
eigenvalues are returned. The placeholder values (zero or NaN depending
on the version of Matlab) for unconverged Ritz values are never
returned, to prevent them from ever being used accidentally in
subsequent computations. eigsPlus also supports additional
functionality, such as getting the number of ARPACK iterations incurred.
getStabRadBound (coming soon)
getStabRadBound is a package implemented in Matlab for approximating
the complex stability radius (or its reciprocal, the H_{∞}
norm) of linear dynamical systems with input and output.
getStabRadBound is intended for large-scale problems, where computing
the H_{∞} norm is not tractable. To achieve
this scalability, it is assumed that fast
matrix-vector products can be done with the system matrix A (and to a
much lesser degree, matrices B, C, and D).
GRANSO: GRadient-based Algorithm for Non-Smooth Optimization
GRANSO is an optimization package implemented in Matlab, intended to be
efficient for constrained nonsmooth optimization problems, without any
special structure or assumptions imposed on the objective or constraint
functions. It can handle problems involving functions that are any
or all of the following: smooth or nonsmooth, convex or nonconvex,
and locally Lipschitz or non-locally Lipschitz.
PSARNOT: (Pseudo)Spectral Abscissa|Radius Nonsmooth Optimization Test
PSARNOT (rhymes with Carnot, as in car-no) is a test set intended for
evaluating methods for nonsmooth optimization.
It is comprised of data files and software, implemented in Matlab.
PSARNOT includes 200 nonsmooth nonconvex constrained optimization
problems and new test problems can be easily generated.
Software Development Tools
URTM
URTM is a somewhat miscellaneous evolving
collection of Matlab routines I have written that either could be used by more
than one of my projects or are already in use across multiple projects.
Contributions to other projects
ARPACK /
ARPACK-NG
In 2011, I discovered and patched a bug in ARPACK where if
eigenvectors were requested and the number of converged Ritz values
was less than number of eigenvalues requested, then ARPACK could
sometimes erroneously return unconverged Ritz values instead of
the converged eigenvalues desired by the user (due to an internal
reording procedure not being properly called to put the desired
converged pairs first). Besides
potentially inadvertantly discarding results desired by the user,
the returned pairs might not even be eigenpairs.
My patch
is included by default in Matlab since R2012b and ARPACK-NG since
v3.1.0. Note that ARPACK does not contain my patch, as ARPACK is
apparently no longer maintained.
eigs
At my urging, the eigs routine in Matlab R2013b and
newer now uses NaNs instead of zeros as placeholders for unconverged
Ritz values, as it could otherwise be difficult to separate the converged
eigenvalues from the placeholder zeros, particularly when zero is
also an eigenvalue of the matrix in question. Furthermore, these
placeholder zeros could be inadvertantly used in subsequent
computations, such as computing the spectral
abscissa of stable matrix A by calling
spec_abs = max(real(eigs(A,6,'LR')));
If less than six Ritz converge, the above command will return zero!
A request has been filed for Octave, which will hopefully match
this new behavior in the 4.4.0 release.
hinfnorm
I discovered and patched several bugs and made minor algorithmic
improvements to Mert Gürbüzbalaban's hinfnorm routine
(and some of its subroutines), which is a Matlab code for
approximating the H_{∞} norm. My
improvements are included in the v1.02 release, which was used
for the numerical results of the
associated paper
describing its underlying method by
Nicola Guglielmi, Mert Gürbüzbalaban, and Michael L. Overton.
PSAPSR
I have released
new versions (v1.3 and
v1.4)
of the PSAPSR package for fast approximation
of the pseudospectral abscissa and radius, originally developed by
Nicola Guglielmi and Michael L. Overton. My release fixes several
bugs, most notably a bug where user-supplied initial perturbation
vectors were always ignored, and incorporates some improved
refactorings in selected places. Note that I no longer maintain
my versions of PSAPSR; interested users should instead use the
getStabRadBound
package as its subroutines provide more more functionality.
pspr /
EigTool
In 2013, I noticed that EigTool's included copy of Emre Mengi's
pspr routine
(for computing the pseudospectral radius) was out of date and
was susceptible to sometimes returning incorrect answers, a known problem
discussed in
the related paper describing its criss-cross algorithm for
computing the pseudospectal abscissa. The
latest version of EigTool,
now maintained on GitHub by Mark Embree, includes Emre Mengi's more
recent codes, which fix this problem and also correct a
very minor bug in the plotting routines which I also pointed out.