Re: [R] Exponentiate a matrix

From: Duncan Murdoch <murdoch_at_stats.uwo.ca>
Date: Thu 21 Sep 2006 - 15:07:52 GMT

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



R-help@stat.math.ethz.ch 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. Received on Fri Sep 22 01:24:55 2006

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.1.8, at Thu 21 Sep 2006 - 16:33:52 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.