Thank you for the links and the information.You have been very helpful On Sat, Jan 29, 2011 at 2:45 PM, David Winsemius <dwinsem...@comcast.net>wrote:
> > On Jan 29, 2011, at 7:58 AM, David Winsemius wrote: > > >> On Jan 29, 2011, at 7:22 AM, Alex Smith wrote: >> >> Hello I am trying to determine wether a given matrix is symmetric and >>> positive matrix. The matrix has real valued elements. >>> >>> I have been reading about the cholesky method and another method is to >>> find >>> the eigenvalues. I cant understand how to implement either of the two. >>> Can >>> someone point me to the right direction. I have used ?chol to see the >>> help >>> but if the matrix is not positive definite it comes up as error. I know >>> how >>> to the get the eigenvalues but how can I then put this into a program to >>> check them as the just come up with $values. >>> >>> Is checking that the eigenvalues are positive enough to determine wether >>> the >>> matrix is positive definite? >>> >> >> That is a fairly simple linear algebra fact that googling or pulling out a >> standard reference should have confirmed. >> > > Just to be clear (since on the basis of some off-line communications it did > not seem to be clear): A real, symmetric matrix is Hermitian (and therefore > all of its eigenvalues are real). Further, it is positive-definite if and > only if its eigenvalues are all positive. > > > qwe<-c(2,-1,0,-1,2,-1,0,1,2) > q<-matrix(qwe,nrow=3) > > isPosDef <- function(M) { if ( all(M == t(M) ) ) { # first test > symmetric-ity > if ( all(eigen(M)$values > 0) ) {TRUE} > else {FALSE} } # > else {FALSE} # not symmetric > > } > > > isPosDef(q) > [1] FALSE > > > >> >>> m >>> [,1] [,2] [,3] [,4] [,5] >>> [1,] 1.0 0.0 0.5 -0.3 0.2 >>> [2,] 0.0 1.0 0.1 0.0 0.0 >>> [3,] 0.5 0.1 1.0 0.3 0.7 >>> [4,] -0.3 0.0 0.3 1.0 0.4 >>> [5,] 0.2 0.0 0.7 0.4 1.0 >>> >> > > isPosDef(m) > [1] TRUE > > You might want to look at prior postings by people more knowledgeable than > me: > > http://finzi.psych.upenn.edu/R/Rhelp02/archive/57794.html > > Or look at what are probably better solutions in available packages: > > http://finzi.psych.upenn.edu/R/library/corpcor/html/rank.condition.html > > http://finzi.psych.upenn.edu/R/library/matrixcalc/html/is.positive.definite.html > > > -- > David. > > >>> this is the matrix that I know is positive definite. >>> >>> eigen(m) >>> $values >>> [1] 2.0654025 1.3391291 1.0027378 0.3956079 0.1971228 >>> >>> $vectors >>> [,1] [,2] [,3] [,4] [,5] >>> [1,] -0.32843233 0.69840166 0.080549876 0.44379474 0.44824689 >>> [2,] -0.06080335 0.03564769 -0.993062427 -0.01474690 0.09296096 >>> [3,] -0.64780034 0.12089168 -0.027187620 0.08912912 -0.74636235 >>> [4,] -0.31765040 -0.68827876 0.007856812 0.60775962 0.23651023 >>> [5,] -0.60653780 -0.15040584 0.080856897 -0.65231358 0.42123526 >>> >>> and this are the eigenvalues and eigenvectors. >>> I thought of using >>> eigen(m,only.values=T) >>> $values >>> [1] 2.0654025 1.3391291 1.0027378 0.3956079 0.1971228 >>> >>> $vectors >>> NULL >>> >>> >> > m <- matrix(scan(textConnection(" >> 1.0 0.0 0.5 -0.3 0.2 >> 0.0 1.0 0.1 0.0 0.0 >> 0.5 0.1 1.0 0.3 0.7 >> -0.3 0.0 0.3 1.0 0.4 >> 0.2 0.0 0.7 0.4 1.0 >> ")), 5, byrow=TRUE) >> #Read 25 items >> > m >> [,1] [,2] [,3] [,4] [,5] >> [1,] 1.0 0.0 0.5 -0.3 0.2 >> [2,] 0.0 1.0 0.1 0.0 0.0 >> [3,] 0.5 0.1 1.0 0.3 0.7 >> [4,] -0.3 0.0 0.3 1.0 0.4 >> [5,] 0.2 0.0 0.7 0.4 1.0 >> >> all( eigen(m)$values >0 ) >> #[1] TRUE >> >> Then i thought of using logical expression to determine if there are >>> negative eigenvalues but couldnt work. I dont know what error this is >>> >>> b<-(a<0) >>> Error: (list) object cannot be coerced to type 'double' >>> >> >> ??? where did "a" and "b" come from? >> >> >>> >> >> David Winsemius, MD >> West Hartford, CT >> >> ______________________________________________ >> 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. >> > > David Winsemius, MD > West Hartford, CT > > [[alternative HTML version deleted]] ______________________________________________ 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.