Exponential Condition Number of a Matrix
Compute the exponential condition number of a matrix, either with approximation methods, or exactly and very slowly.
expmCond(A, method = c("1.est", "F.est", "exact"), expm = TRUE, abstol = 0.1, reltol = 1e-6, give.exact = c("both", "1.norm", "F.norm"))
A |
a square matrix |
method |
a string; either compute 1-norm or F-norm approximations, or compte these exactly. |
expm |
logical indicating if the matrix exponential itself, which is computed anyway, should be returned as well. |
abstol, reltol |
for |
give.exact |
for |
method = "exact"
, aka Kronecker-Sylvester algorithm, computes a
Kronecker matrix of dimension n^2 x n^2 and
hence, with O(n^5) complexity, is prohibitely slow for
non-small n. It computes the exact exponential-condition
numbers for both the Frobenius and/or the 1-norm, depending on
give.exact
.
The two other methods compute approximations, to these norms, i.e., estimate them, using algorithms from Higham, chapt.~3.4, both with complexity O(n^3).
when expm = TRUE
, for method = "exact"
, a
list
with components
expm |
containing the matrix exponential, |
expmCond(F|1) |
numeric scalar, (an approximation to) the (matrix
exponential) condition number, for either the 1-norm
( |
When expm
is false and method
one of the approximations
("*.est"
), the condition number is returned directly (i.e.,
numeric
of length one).
Michael Stadelmann (final polish by Martin Maechler).
Awad H. Al-Mohy and Nicholas J. Higham (2009). Computing Fréchet Derivative of the Matrix Exponential, with an application to Condition Number Estimation; MIMS EPrint 2008.26; Manchester Institute for Mathematical Sciences, U. Manchester, UK. http://eprints.ma.man.ac.uk/1218/01/covered/MIMS_ep2008_26.pdf
Higham, N.~J. (2008). Functions of Matrices: Theory and Computation; Society for Industrial and Applied Mathematics, Philadelphia, PA, USA.
Michael Stadelmann (2009) Matrixfunktionen ...
Master's thesis; see reference in expm.Higham08
.
expm.Higham08
for the matrix exponential.
set.seed(101) (A <- matrix(round(rnorm(3^2),1), 3,3)) eA <- expm.Higham08(A) stopifnot(all.equal(eA, expm::expm(A), tolerance= 1e-15)) C1 <- expmCond(A, "exact") C2 <- expmCond(A, "1.est") C3 <- expmCond(A, "F.est") all.equal(C1$expmCond1, C2$expmCond, tolerance= 1e-15)# TRUE all.equal(C1$expmCondF, C3$expmCond)# relative difference of 0.001...
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.