R version 3.3.1 (2016-06-21) -- "Bug in Your Hair" Copyright (C) 2016 The R Foundation for Statistical Computing Platform: x86_64-pc-linux-gnu (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > library( "miscTools" ) > > set.seed( 123 ) > > # not symmetric > m1 <- matrix( rnorm( 9 ), ncol = 3 ) > print( m1 ) [,1] [,2] [,3] [1,] -0.5604756 0.07050839 0.4609162 [2,] -0.2301775 0.12928774 -1.2650612 [3,] 1.5587083 1.71506499 -0.6868529 > try( semidefiniteness( m1 ) ) Error in isSemidefinite.matrix(m = m, ...) : argument 'm' must be a symmetric matrix > try( semidefiniteness( m1, method = "eigen" ) ) Error in isSemidefinite.matrix(m = m, ...) : argument 'm' must be a symmetric matrix > try( semidefiniteness( m1, positive = FALSE ) ) Error in isSemidefinite.matrix(m = m, ...) : argument 'm' must be a symmetric matrix > try( semidefiniteness( m1, positive = FALSE, method = "eigen" ) ) Error in isSemidefinite.matrix(m = m, ...) : argument 'm' must be a symmetric matrix > > # positive semidefinite > m2 <- crossprod( m1 ) > print( m2 ) [,1] [,2] [,3] [1,] 2.796686 2.604009 -1.037747 [2,] 2.604009 2.963135 -1.309056 [3,] -1.037747 -1.309056 2.284591 > semidefiniteness( m2 ) [1] TRUE > semidefiniteness( m2, method = "eigen" ) [1] TRUE > semidefiniteness( m2, positive = FALSE ) [1] FALSE > semidefiniteness( m2, positive = FALSE, method = "eigen" ) [1] FALSE > # negative semidefinite > semidefiniteness( -m2 ) [1] FALSE > semidefiniteness( -m2, method = "eigen" ) [1] FALSE > semidefiniteness( -m2, positive = FALSE ) [1] TRUE > semidefiniteness( -m2, positive = FALSE, method = "eigen" ) [1] TRUE > > # positive semidefinite, singular > m3 <- cbind( m2, - rowSums( m2 ) ) > m3 <- rbind( m3, - colSums( m3 ) ) > print( m3 ) [,1] [,2] [,3] [,4] [1,] 2.796686 2.604009 -1.03774694 -4.36294799 [2,] 2.604009 2.963135 -1.30905572 -4.25808763 [3,] -1.037747 -1.309056 2.28459052 0.06221214 [4,] -4.362948 -4.258088 0.06221214 8.55882348 > semidefiniteness( m3 ) [1] TRUE > semidefiniteness( m3, method = "eigen" ) [1] TRUE > semidefiniteness( m3, positive = FALSE ) [1] FALSE > semidefiniteness( m3, positive = FALSE, method = "eigen" ) [1] FALSE > > # positive semidefinite, singular, and large numbers > m4 <- m3 * 1e6 > print( m4 ) [,1] [,2] [,3] [,4] [1,] 2796686 2604009 -1037746.94 -4362947.99 [2,] 2604009 2963135 -1309055.72 -4258087.63 [3,] -1037747 -1309056 2284590.52 62212.14 [4,] -4362948 -4258088 62212.14 8558823.48 > # rcond(m4) > # det(m4) > semidefiniteness( m4 ) [1] TRUE > semidefiniteness( m4, method = "eigen" ) [1] TRUE > semidefiniteness( m4, positive = FALSE ) [1] FALSE > semidefiniteness( m4, positive = FALSE, method = "eigen" ) [1] FALSE > > # negative semidefinite, diagonal > m5 <- diag( -1, 4, 4 ) > print( m5 ) [,1] [,2] [,3] [,4] [1,] -1 0 0 0 [2,] 0 -1 0 0 [3,] 0 0 -1 0 [4,] 0 0 0 -1 > semidefiniteness( m5 ) [1] FALSE > semidefiniteness( m5, method = "eigen" ) [1] FALSE > semidefiniteness( m5, positive = FALSE ) [1] TRUE > semidefiniteness( m5, positive = FALSE, method = "eigen" ) [1] TRUE > > # negative semidefinite, singular > m6 <- matrix( -1, 4, 4 ) > print( m6 ) [,1] [,2] [,3] [,4] [1,] -1 -1 -1 -1 [2,] -1 -1 -1 -1 [3,] -1 -1 -1 -1 [4,] -1 -1 -1 -1 > semidefiniteness( m6 ) [1] FALSE > semidefiniteness( m6, method = "eigen" ) [1] FALSE > semidefiniteness( m6, positive = FALSE ) [1] TRUE > semidefiniteness( m6, positive = FALSE, method = "eigen" ) [1] TRUE > > # negative semidefinite, diagonal > m7 <- diag( c( -1, -3 ) ) > print( m7 ) [,1] [,2] [1,] -1 0 [2,] 0 -3 > semidefiniteness( m7 ) [1] FALSE > semidefiniteness( m7, method = "eigen" ) [1] FALSE > semidefiniteness( m7, positive = FALSE ) [1] TRUE > semidefiniteness( m7, positive = FALSE, method = "eigen" ) [1] TRUE > > # positive semidefinite > m8 <- symMatrix( c( 2, -1, 0, 2, -1, 2 ) ) > print( m8 ) [,1] [,2] [,3] [1,] 2 -1 0 [2,] -1 2 -1 [3,] 0 -1 2 > semidefiniteness( m8 ) [1] TRUE > semidefiniteness( m8, method = "eigen" ) [1] TRUE > semidefiniteness( m8, positive = FALSE ) [1] FALSE > semidefiniteness( m8, positive = FALSE, method = "eigen" ) [1] FALSE > > # indefinite > m9 <- symMatrix( rnorm( 6 ) ) > print( m9 ) [,1] [,2] [,3] [1,] -0.4456620 1.2240818 0.3598138 [2,] 1.2240818 0.4007715 0.1106827 [3,] 0.3598138 0.1106827 -0.5558411 > semidefiniteness( m9 ) [1] FALSE > semidefiniteness( m9, method = "eigen" ) [1] FALSE > semidefiniteness( m9, positive = FALSE ) [1] FALSE > semidefiniteness( m9, positive = FALSE, method = "eigen" ) [1] FALSE > > # positive and negative semidefinite > m10 <- matrix( 0, 3, 3 ) > print( m10 ) [,1] [,2] [,3] [1,] 0 0 0 [2,] 0 0 0 [3,] 0 0 0 > semidefiniteness( m10 ) [1] TRUE > semidefiniteness( m10, method = "eigen" ) [1] TRUE > semidefiniteness( m10, positive = FALSE ) [1] TRUE > semidefiniteness( m10, positive = FALSE, method = "eigen" ) [1] TRUE > > # indefinite > m11 <- symMatrix( 1:6 ) > print( m11 ) [,1] [,2] [,3] [1,] 1 2 3 [2,] 2 4 5 [3,] 3 5 6 > semidefiniteness( m11 ) [1] FALSE > semidefiniteness( m11, method = "eigen" ) [1] FALSE > semidefiniteness( m11, positive = FALSE ) [1] FALSE > semidefiniteness( m11, positive = FALSE, method = "eigen" ) [1] FALSE > > # indefinite, singular > m12 <- cbind( m9, - rowSums( m9 ) ) > m12 <- rbind( m12, - colSums( m12 ) ) > print( m12 ) [,1] [,2] [,3] [,4] [1,] -0.4456620 1.2240818 0.35981383 -1.13823365 [2,] 1.2240818 0.4007715 0.11068272 -1.73553596 [3,] 0.3598138 0.1106827 -0.55584113 0.08534459 [4,] -1.1382337 -1.7355360 0.08534459 2.78842503 > semidefiniteness( m12 ) [1] FALSE > semidefiniteness( m12, method = "eigen" ) [1] FALSE > semidefiniteness( m12, positive = FALSE ) [1] FALSE > semidefiniteness( m12, positive = FALSE, method = "eigen" ) [1] FALSE > > # indefinite, singular, small numbers > m13 <- m12 * 1e-6 > print( m13 ) [,1] [,2] [,3] [,4] [1,] -4.456620e-07 1.224082e-06 3.598138e-07 -1.138234e-06 [2,] 1.224082e-06 4.007715e-07 1.106827e-07 -1.735536e-06 [3,] 3.598138e-07 1.106827e-07 -5.558411e-07 8.534459e-08 [4,] -1.138234e-06 -1.735536e-06 8.534459e-08 2.788425e-06 > semidefiniteness( m13 ) [1] FALSE > semidefiniteness( m13, method = "eigen" ) [1] FALSE > semidefiniteness( m13, positive = FALSE ) [1] FALSE > semidefiniteness( m13, positive = FALSE, method = "eigen" ) [1] FALSE > > # 'large' matrix > m14 <- symMatrix( 1:( 13 * (13+1) / 2 ) ) > semidefiniteness( m14 ) [1] FALSE > semidefiniteness( m14, method = "det" ) Warning in isSemidefinite.matrix(m = m, ...) : using method 'det' can take a very long time for matrices with more than 12 rows and columns; it is suggested to use method 'eigen' for larger matrices [1] FALSE > semidefiniteness( m14, method = "eigen" ) [1] FALSE > > # list, one element not a matrix > ml1 <- list( m2, c( m1 ), m3, m4 ) > try( semidefiniteness( ml1 ) ) Error in isSemidefinite.list(m = m, ...) : all components of the list specified by argument 'm' must be matrices > > # list of matrices, one non-symmetric > ml2 <- list( m2, m1, m3, m4 ) > try( semidefiniteness( ml2 ) ) Error in isSemidefinite.matrix(m[[t]], ...) : argument 'm' must be a symmetric matrix > > # list of matrices, one 'large' matrix > ml3 <- list( m2, m14, m3, m4 ) > semidefiniteness( ml3 ) [1] TRUE FALSE TRUE TRUE > semidefiniteness( ml3, method = "det" ) Warning in isSemidefinite.matrix(m[[t]], ...) : using method 'det' can take a very long time for matrices with more than 12 rows and columns; it is suggested to use method 'eigen' for larger matrices [1] TRUE FALSE TRUE TRUE > semidefiniteness( ml3, method = "eigen" ) [1] TRUE FALSE TRUE TRUE > semidefiniteness( ml3, positive = FALSE ) [1] FALSE FALSE FALSE FALSE > semidefiniteness( ml3, positive = FALSE, method = "det" ) Warning in isSemidefinite.matrix(m[[t]], ...) : using method 'det' can take a very long time for matrices with more than 12 rows and columns; it is suggested to use method 'eigen' for larger matrices [1] FALSE FALSE FALSE FALSE > semidefiniteness( ml3, positive = FALSE, method = "eigen" ) [1] FALSE FALSE FALSE FALSE > > proc.time() user system elapsed 0.268 0.020 0.312
Generated by dwww version 1.15 on Wed Jun 26 00:51:44 CEST 2024.