On Sat, 26 Sep 2009, spencerg wrote:
Sylvester's formula (http://en.wikipedia.org/wiki/Sylvester%27s_formula)
applies to a square matrix A = S L solve(S), where L = a diagonal matrix and
S = matrix of eigenvectors. Let "f" be an analytic function [for which f(A)
is well defined]. Then f(A) = S f(L) solve(S).
We can code this as follows:
sylvester <- function(x, f){
n <- nrow(x)
eig <- eigen(x)
vi <- solve(eig$vectors)
with(eig, (vectors * rep(f(values), each=n)) %*% vi)
}
logm <- function(x)sylvester(x, log)
Example:
A <- matrix(1:4, 2)
eA <- expm(A)
logm(eA)
With Chuck Berry's example, we get the following:
M <- matrix( c(0,1,0,0), 2 )
sylvester(M, log)
The case I gave would be
sylvester( as.matrix( expm( M ) ), log )
for which the perfectly sensible answer is M, not what appears here:
Error in solve.default(eig$vectors) :
system is computationally singular: reciprocal condition number =
1.00208e-292
This is a perfectly sensible answer in this case. We get the same
result from "sylvester(M, exp)", though "expm(M)" works fine.
A better algorithm for this could be obtains by studying the code
for "expm" in the Matrix package and the references in the associated help
page.
I doubt that code already in R will handle cases requiring Jordan blocks
for evaluation of the matrix logarithm (which cases arise in the context
of discrete state, continuous time Markov chains) without requiring one to
built that code more or less from scratch.
I'd be happy to hear that this is not so.
HTH,
Chuck
Hope this helps. Spencer
Gabor Grothendieck wrote:
Often one uses matrix logarithms on symmetric positive definite
matrices so the assumption of being symmetric is sufficient in many
cases.
On Sat, Sep 26, 2009 at 7:28 PM, Charles C. Berry <cbe...@tajo.ucsd.edu>
wrote:
> On Sat, 26 Sep 2009, Gabor Grothendieck wrote:
>
>
> > OK. Try this:
> >
> >
> > > library(Matrix)
> > > M <- matrix(c(2, 1, 1, 2), 2); M
> > >
> > [,1] [,2]
> > [1,] 2 1
> > [2,] 1 2
> >
> >
> Right. expm( M ) is diagonalizable.
>
> But for
>
> M <- matrix( c(0,1,0,0), 2 )
>
> you get the wrong result.
>
> Maybe I should have added that I do not see the machinery in R for
> dealing
> with Jordan blocks.
>
> HTH,
>
> Chuck
>
>
>
>
> > > # log of expm(M) is original matrix M
> > > with(eigen(expm(M)), vectors %*% diag(log(values)) %*% t(vectors))
> > >
> > [,1] [,2]
> > [1,] 2 1
> > [2,] 1 2
> >
> >
> > On Sat, Sep 26, 2009 at 6:24 PM, Charles C. Berry
> > <cbe...@tajo.ucsd.edu>
> > wrote:
> >
> > > On Sat, 26 Sep 2009, Gabor Grothendieck wrote:
> > >
> > >
> > > > Try:
> > > >
> > > > expm( - M)
> > > >
> > > Mimosa probably meant say 'the inverse function'.
> > >
> > > I do not see one in R.
> > >
> > > Chuck
> > >
> > >
> > > > On Sat, Sep 26, 2009 at 5:06 PM, Mimosa Zeus <mimosa1...@yahoo.fr>
> > > > wrote:
> > > >
> > > > > Dear R users,
> > > > >
> > > > > Does anyone has implemented the inverse of the matrix
> > > > > exponential (expm
> > > > > in the package Matrix)?
> > > > >
> > > > > In Matlab, there're logm and expm, there's only expm in R.
> > > > > Cheers
> > > > > Mimosa
> > > > >
> > > > >
> > > > >
> > > > > [[alternative HTML version deleted]]
> > > > >
> > > > >
> > > > > ______________________________________________
> > > > > R-help@r-project.org mailing list
> > > > > https://stat.ethz.ch/mailman/listinfo/r-help
> > > > > PLEASE do read the posting guide
> > > > > http://www.R-project.org/posting-guide.html
> > > > > and provide commented, minimal, self-contained, reproducible
> > > > > code.
> > > > >
> > > > >
> > > > >
> > > > ______________________________________________
> > > > R-help@r-project.org mailing list
> > > > https://stat.ethz.ch/mailman/listinfo/r-help
> > > > PLEASE do read the posting guide
> > > > http://www.R-project.org/posting-guide.html
> > > > and provide commented, minimal, self-contained, reproducible code.
> > > >
> > > >
> > > Charles C. Berry (858) 534-2098
> > > Dept of Family/Preventive
> > > Medicine
> > > E mailto:cbe...@tajo.ucsd.edu UC San Diego
> > > http://famprevmed.ucsd.edu/faculty/cberry/ La Jolla, San Diego
> > > 92093-0901
> > >
> > >
> > >
> > ______________________________________________
> > R-help@r-project.org mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-help
> > PLEASE do read the posting guide
> > http://www.R-project.org/posting-guide.html
> > and provide commented, minimal, self-contained, reproducible code.
> >
> >
> Charles C. Berry (858) 534-2098
> Dept of Family/Preventive
> Medicine
> E mailto:cbe...@tajo.ucsd.edu UC San Diego
> http://famprevmed.ucsd.edu/faculty/cberry/ La Jolla, San Diego
> 92093-0901
>
>
>
______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide
http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
--
Spencer Graves, PE, PhD
President and Chief Operating Officer
Structure Inspection and Monitoring, Inc.
751 Emerson Ct.
San José, CA 95126
ph: 408-655-4567
______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
Charles C. Berry (858) 534-2098
Dept of Family/Preventive Medicine
E mailto:cbe...@tajo.ucsd.edu UC San Diego
http://famprevmed.ucsd.edu/faculty/cberry/ La Jolla, San Diego 92093-0901
______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.