Hi all, I have two matrices: G<-matrix(c(2.0, 0.5, 0.5, 0.5, 2.0, 0.5, 0.5, 0.5,2.0),3,3) P<-matrix(c(1.0, 0.5, 0.5, 0.5, 1.0, 0.5, 0.5, 0.5,1.0),3,3) and I want to run this equation to get a new matrix F: F = [P+2G]^-1/2 P [P+2G]^-1/2 Could someone please tell me how to code this in R? Many thanks in advance for your time. Best wishes, Matt [[alternative HTML version deleted]]
Hi r-help-bounces at r-project.org napsal dne 11.04.2011 09:43:03:> Hi all, > > I have two matrices: > > G<-matrix(c(2.0, 0.5, 0.5, 0.5, 2.0, 0.5, 0.5, 0.5,2.0),3,3) > P<-matrix(c(1.0, 0.5, 0.5, 0.5, 1.0, 0.5, 0.5, 0.5,1.0),3,3) > > and I want to run this equation to get a new matrix F: > > F = [P+2G]^-1/2 P [P+2G]^-1/2Is this what you want? (P+2*G)^-1/2 * P * (P+2*G)^-1/2 Regards Petr> > Could someone please tell me how to code this in R? > > Many thanks in advance for your time. > > Best wishes, > Matt > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guidehttp://www.R-project.org/posting-guide.html> and provide commented, minimal, self-contained, reproducible code.
Hi Matt, Petr gave you one possibility. If you are looking for more matrix operations see: ?"%*%" # the inner product of the matrices ?"%o%" # the outer product of the matrices ?"(" # for parentheses to help order things require(MASS) # load the package MASS ?ginv # for the generalized inverse of a matrix For things like constants which you just want treated normally, use the regular multiplication operator, "*", not the matrix one. HTH, Josh On Mon, Apr 11, 2011 at 12:43 AM, matthew.r.robinson at sheffield.ac.uk <matthew.r.robinson at sheffield.ac.uk> wrote:> Hi all, > > I have two matrices: > > G<-matrix(c(2.0, 0.5, 0.5, 0.5, 2.0, 0.5, 0.5, 0.5,2.0),3,3) > P<-matrix(c(1.0, 0.5, 0.5, 0.5, 1.0, 0.5, 0.5, 0.5,1.0),3,3) > > and I want to run this equation to get a new matrix F: > > F = [P+2G]^-1/2 P [P+2G]^-1/2 > > Could someone please tell me how to code this in R? > > Many thanks in advance for your time. > > Best wishes, > Matt > > ? ? ? ?[[alternative HTML version deleted]] > > ______________________________________________ > R-help at 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.-- Joshua Wiley Ph.D. Student, Health Psychology University of California, Los Angeles http://www.joshuawiley.com/
On Mon, Apr 11, 2011 at 08:43:03AM +0100, matthew.r.robinson at sheffield.ac.uk wrote:> Hi all, > > I have two matrices: > > G<-matrix(c(2.0, 0.5, 0.5, 0.5, 2.0, 0.5, 0.5, 0.5,2.0),3,3) > P<-matrix(c(1.0, 0.5, 0.5, 0.5, 1.0, 0.5, 0.5, 0.5,1.0),3,3) > > and I want to run this equation to get a new matrix F: > > F = [P+2G]^-1/2 P [P+2G]^-1/2 > > Could someone please tell me how to code this in R?Hi. Try the following. sqrtSymMat <- function(A) { out <- eigen(A) D <- diag(out$values) U <- out$vectors U %*% sqrt(D) %*% t(U) } A <- sqrtSymMat(solve(P + 2*G)) F <- A %*% P %*% A See also the function svd() and its help ?svd. The operator A^(1/2) works component-wise. There may be a function computing the square root of a positive semidefinite matrix in some of the CRAN extension packages http://cran.at.r-project.org/web/packages/index.html but i am not sure. The package mvtnorm http://cran.at.r-project.org/web/packages/mvtnorm/index.html computes the square root of a matrix internally. See the help of the function ?rmvnorm. Hope this helps. Petr Savicky.