# [R] Exponentiate a matrix

Douglas Bates bates at stat.wisc.edu
Thu Sep 21 20:08:38 CEST 2006

```On 9/21/06, Dimitrios Rizopoulos <Dimitris.Rizopoulos at med.kuleuven.be> wrote:
>
> Quoting Duncan Murdoch <murdoch at stats.uwo.ca>:
>
> > On 9/21/2006 10:40 AM, Doran, Harold wrote:
> >> Suppose I have a square matrix P
> >>
> >> P <- matrix(c(.3,.7, .7, .3), ncol=2)
> >>
> >> I know that
> >>
> >>> P * P
> >>
> >> Returns the element by element product, whereas
> >>
> >>> P%*%P
> >>
> >> Returns the matrix product.
> >>
> >> Now, P^2 also returns the element by element product. But, is there a
> >> slick way to write
> >>
> >> P %*% P %*% P
> >>
> >> Obviously, P^3 does not return the result I expect.
> >
> >
> > I don't think there's anything built in, but it's easy to write your own:
>
> I think there was function mtx.exp() in the Malmig package, but it
> seems that this package has been withdrawn from CRAN. An old version
> appears to exist in:
>
> http://r.meteo.uni.wroc.pl/src/contrib/Descriptions/Malmig.html
>
> Best,
> Dimitris

Is that function for matrix powers or for the exponential of a matrix
(which is what I initally thought that Harold wanted)?  There is a
function expm in the Matrix package, patterned on the octave function
of the same name, the calculates the matrix exponential for a square
matrix.

>
>
> > "%^%" <- function(mat, pow) {
> >    stopifnot(length(pow) == 1, all.equal(pow, round(pow)), nrow(mat) ==
> > ncol(mat))
> >    pow <- round(pow)
> >    if (pow < 0) {
> >      mat <- solve(mat)
> >      pow <- abs(pow)
> >    }
> >    result <- diag(nrow(mat))
> >    while (pow > 0) {
> >      result <- result %*% mat
> >      pow <- pow - 1
> >    }
> >    result
> > }
> >
> > Now P %^% 3 will give you the matrix cube.
> >
> > Duncan Murdoch
> >
> > ______________________________________________
> > R-help at stat.math.ethz.ch mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-help
> > and provide commented, minimal, self-contained, reproducible code.
> >
> >
>
>
>
> Disclaimer: http://www.kuleuven.be/cwis/email_disclaimer.htm
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help