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.