Computes the log(A) for any square matrix A with non-negative eigenvalues using the inverse scaling and squaring algorithm. When A is real this algorithm uses only real arithmetic. It is also possible to compute the Frechet derivative of log(A) in any direction E and cond(log, A) to give some idea of the accuracy.
This code can be called in the following ways:
X = logm_frechet(A)
L = logm_frechet(A,E)
[X, cond] = logm_frechet(A)
[X, L] = logm_frechet(A,E)
[X, L, cond] = logm_frechet(A,E)
where X is log(A), L is the Frechet derivative and cond is the condition number.
Function LOGM_FRECHET_TEST.M runs a simple test of the codes.
More detail on the algorithm can be found in:
A. H. Al-Mohy, N. J. Higham and S. D. Relton. Computing the Frechet Derivative of the Matrix Logarithm and Estimating the Condition Number, MIMS Eprint 2012.72, Manchester Institute for Mathematical Sciences, The University of Manchester, UK, July 2012.
Inspired: Condition Numbers Comparison