[R] A function for raising a matrix to a power?

Christos Hatzis christos at nuverabio.com
Sun May 6 17:42:37 CEST 2007


Here is a recursive version of the same function:

"%^%" <- function(A, n) if(n == 1) A else A %*% (A %^% (n-1))

> a <- matrix(1:4, 2)

> a %^% 1
     [,1] [,2]
[1,]    1    3
[2,]    2    4
> a %^% 2
     [,1] [,2]
[1,]    7   15
[2,]   10   22
> a %^% 3
     [,1] [,2]
[1,]   37   81
[2,]   54  118


-Christos

> -----Original Message-----
> From: r-help-bounces at stat.math.ethz.ch 
> [mailto:r-help-bounces at stat.math.ethz.ch] On Behalf Of Ron E. 
> VanNimwegen
> Sent: Sunday, May 06, 2007 10:48 AM
> To: r-help at stat.math.ethz.ch; attenka at utu.fi
> Subject: Re: [R] A function for raising a matrix to a power?
> 
> >  Hi,
> >
> > Is there a function for raising a matrix to a power? For example if 
> > you like to compute A%*%A%*%A, is there an abbreviation 
> similar to A3?
> >
> > Atte Tenkanen
> Hi Atte,
> 
> I was looking for a similar operator, because R uses scalar products 
> when raising a matrix to a power with "^".  There might be something 
> more elegant, but this little loop function will do what you 
> need for a 
> matrix "mat" raised to a power "pow":
> 
> mp <- function(mat,pow){
> ans <- mat
> for ( i in 1:(pow-1)){
> ans <- mat%*%ans
> }
> return(ans)
> }
> 
> Then, for your example:
> > > A=rbind(c(1,1),c(-1,-2))
> > > mp(A,3)
> >      [,1] [,2]
> > [1,]    1    2
> > [2,]   -2   -5
> Cheers,
> Ron
> 
> ---
> Ron E. VanNimwegen
> Ph.D. Candidate, Division of Biology (EEB)
> Kansas Cooperative Fish & Wildlife Research Unit
> 205 Leasure Hall
> Kansas State University
> Manhattan, KS 66506-3501
> vanron at ksu.edu
> ---
> 
> ______________________________________________
> R-help at 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.
> 
>



More information about the R-help mailing list