> From: r-help-boun...@r-project.org > [mailto:r-help-boun...@r-project.org] On Behalf Of Moohwan Kim > Sent: Friday, December 11, 2009 11:01 AM > To: r-help@r-project.org > Subject: [R] How to calculte the power of a matrix > > Dear R family > > I have a following question. > Suppose I have a matrix as follows, for instance: > tau= > 0 1 0 0 0 > 0 0 1 0 0 > 0 0 0 1 0 > 0 0 0 0 1 > 1 0 0 0 0 > > I want to calculate (-m) power of tau, for example, m=893. > > When I run tau^2, the outcome is just tau.
Are you looking for the matrix power analogous to matrix multiplication, "%*%"? The following does it for positive integer exponents, using the "Russian peasant" method (at least that is what we called it in school several decades ago). > f <- function (mat, pow) { # mat %*% mat %*% mat %*% ... %*% mat, pow times ans <- diag(nrow(mat)) while (pow > 0) { if (pow%%2) ans <- ans %*% mat pow <- pow%/%2 if (pow > 0) mat <- mat %*% mat } ans } > tau <- structure(c(0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0), .Dim = c(5L, 5L)) > f(tau,2) [,1] [,2] [,3] [,4] [,5] [1,] 0 0 0 1 0 [2,] 0 0 0 0 1 [3,] 1 0 0 0 0 [4,] 0 1 0 0 0 [5,] 0 0 1 0 0 Call solve() on its output for negative exponents. Matrix::expm() (matrix exponential) may be of use also. Bill Dunlap Spotfire, TIBCO Software wdunlap tibco.com > Any help would be appreciated. > > thanks in advance. > > best > moohwan > > ______________________________________________ > 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.