// TEST IF A MATRIX IS POSITIVE DEFINITE
capture mata: mata drop isPositiveDefinite()

mata:
real scalar isPositiveDefinite(real matrix C)
{
	real matrix X
	real rowvector L
	real scalar numberOfeigenvalues, row, tolerance
	X = J(0,0,.)
	L = J(0,0,.)
	
	if (hasmissing(C)==1) {
		isPositiveDef = -1
	}
	else {
		symeigensystem(C, X, L)
		numberOfeigenvalues = cols(L)
		
		tolerance = 0.00000001
		
		isPositiveDef = 1 	// ASSUME THIS IS TRUE AT THE START
		for(row=1; row<=numberOfeigenvalues; row++) {
			if(L[row]<=tolerance | L[row]==.) {
				isPositiveDef = 0
			}
		}
	}
	
	return(isPositiveDef)
	
} 
end