1library( "miscTools" ) 2 3set.seed( 123 ) 4 5# not symmetric 6m1 <- matrix( rnorm( 9 ), ncol = 3 ) 7print( m1 ) 8try( semidefiniteness( m1 ) ) 9try( semidefiniteness( m1, method = "eigen" ) ) 10try( semidefiniteness( m1, positive = FALSE ) ) 11try( semidefiniteness( m1, positive = FALSE, method = "eigen" ) ) 12 13# positive semidefinite 14m2 <- crossprod( m1 ) 15print( m2 ) 16semidefiniteness( m2 ) 17semidefiniteness( m2, method = "eigen" ) 18semidefiniteness( m2, positive = FALSE ) 19semidefiniteness( m2, positive = FALSE, method = "eigen" ) 20# negative semidefinite 21semidefiniteness( -m2 ) 22semidefiniteness( -m2, method = "eigen" ) 23semidefiniteness( -m2, positive = FALSE ) 24semidefiniteness( -m2, positive = FALSE, method = "eigen" ) 25 26# positive semidefinite, singular 27m3 <- cbind( m2, - rowSums( m2 ) ) 28m3 <- rbind( m3, - colSums( m3 ) ) 29print( m3 ) 30semidefiniteness( m3 ) 31semidefiniteness( m3, method = "eigen" ) 32semidefiniteness( m3, positive = FALSE ) 33semidefiniteness( m3, positive = FALSE, method = "eigen" ) 34 35# positive semidefinite, singular, and large numbers 36m4 <- m3 * 1e6 37print( m4 ) 38# rcond(m4) 39# det(m4) 40semidefiniteness( m4 ) 41semidefiniteness( m4, method = "eigen" ) 42semidefiniteness( m4, positive = FALSE ) 43semidefiniteness( m4, positive = FALSE, method = "eigen" ) 44 45# negative semidefinite, diagonal 46m5 <- diag( -1, 4, 4 ) 47print( m5 ) 48semidefiniteness( m5 ) 49semidefiniteness( m5, method = "eigen" ) 50semidefiniteness( m5, positive = FALSE ) 51semidefiniteness( m5, positive = FALSE, method = "eigen" ) 52 53# negative semidefinite, singular 54m6 <- matrix( -1, 4, 4 ) 55print( m6 ) 56semidefiniteness( m6 ) 57semidefiniteness( m6, method = "eigen" ) 58semidefiniteness( m6, positive = FALSE ) 59semidefiniteness( m6, positive = FALSE, method = "eigen" ) 60 61# negative semidefinite, diagonal 62m7 <- diag( c( -1, -3 ) ) 63print( m7 ) 64semidefiniteness( m7 ) 65semidefiniteness( m7, method = "eigen" ) 66semidefiniteness( m7, positive = FALSE ) 67semidefiniteness( m7, positive = FALSE, method = "eigen" ) 68 69# positive semidefinite 70m8 <- symMatrix( c( 2, -1, 0, 2, -1, 2 ) ) 71print( m8 ) 72semidefiniteness( m8 ) 73semidefiniteness( m8, method = "eigen" ) 74semidefiniteness( m8, positive = FALSE ) 75semidefiniteness( m8, positive = FALSE, method = "eigen" ) 76 77# indefinite 78m9 <- symMatrix( rnorm( 6 ) ) 79print( m9 ) 80semidefiniteness( m9 ) 81semidefiniteness( m9, method = "eigen" ) 82semidefiniteness( m9, positive = FALSE ) 83semidefiniteness( m9, positive = FALSE, method = "eigen" ) 84 85# positive and negative semidefinite 86m10 <- matrix( 0, 3, 3 ) 87print( m10 ) 88semidefiniteness( m10 ) 89semidefiniteness( m10, method = "eigen" ) 90semidefiniteness( m10, positive = FALSE ) 91semidefiniteness( m10, positive = FALSE, method = "eigen" ) 92 93# indefinite 94m11 <- symMatrix( 1:6 ) 95print( m11 ) 96semidefiniteness( m11 ) 97semidefiniteness( m11, method = "eigen" ) 98semidefiniteness( m11, positive = FALSE ) 99semidefiniteness( m11, positive = FALSE, method = "eigen" ) 100 101# indefinite, singular 102m12 <- cbind( m9, - rowSums( m9 ) ) 103m12 <- rbind( m12, - colSums( m12 ) ) 104print( m12 ) 105semidefiniteness( m12 ) 106semidefiniteness( m12, method = "eigen" ) 107semidefiniteness( m12, positive = FALSE ) 108semidefiniteness( m12, positive = FALSE, method = "eigen" ) 109 110# indefinite, singular, small numbers 111m13 <- m12 * 1e-6 112print( m13 ) 113semidefiniteness( m13 ) 114semidefiniteness( m13, method = "eigen" ) 115semidefiniteness( m13, positive = FALSE ) 116semidefiniteness( m13, positive = FALSE, method = "eigen" ) 117 118# 'large' matrix 119m14 <- symMatrix( 1:( 13 * (13+1) / 2 ) ) 120semidefiniteness( m14 ) 121semidefiniteness( m14, method = "det" ) 122semidefiniteness( m14, method = "eigen" ) 123 124# list, one element not a matrix 125ml1 <- list( m2, c( m1 ), m3, m4 ) 126try( semidefiniteness( ml1 ) ) 127 128# list of matrices, one non-symmetric 129ml2 <- list( m2, m1, m3, m4 ) 130try( semidefiniteness( ml2 ) ) 131 132# list of matrices, one 'large' matrix 133ml3 <- list( m2, m14, m3, m4 ) 134semidefiniteness( ml3 ) 135semidefiniteness( ml3, method = "det" ) 136semidefiniteness( ml3, method = "eigen" ) 137semidefiniteness( ml3, positive = FALSE ) 138semidefiniteness( ml3, positive = FALSE, method = "det" ) 139semidefiniteness( ml3, positive = FALSE, method = "eigen" ) 140