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