[R] Exponentiate a matrix

Duncan Murdoch murdoch at stats.uwo.ca
Thu Sep 21 17:07:52 CEST 2006


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:

"%^%" <- 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



More information about the R-help mailing list