! Find the smallest eigenvalue, D, of a symmetric matrix; 
!  Keywords: Positive definite, Eigenvalue, POSD, SDP;
SETS:
  VAR;
  VXV( VAR, VAR): Q, R;
 ENDSETS
DATA: VAR = 1..3; ! The matrix; Q = .01080754 .01240721 .01307513 .01240721 .05839170 .05542639 .01307513 .05542639 .09422681 ; ENDDATA !---------------------------------------------------------------; ! Maximize amount deducted, D, from each diagonal element, but still leaving the matrix positive semi-definite, i.e, so Q - D*I remains Positive Semi-definite. Note, subtracting the same constant D from all elements of the diagonal decreases all the eigenvalues by D. If all eigenvalues are >= 0, then the matrix is Positive Semi-definite; MAX = D; @FREE( D); ! R is the adjusted matrix. Off diagonal elements are left unchanged; @FOR( VXV( i,j) | i #NE# j: R(i,j) = Q(i,j) ; @FREE( R(i,j)); ); ! Diagonal elements may be decreased; @FOR( VAR(j): R(j,j) = Q(j,j) - D; @FREE( R(j,j)); ); ! and we want R = Q - D*I to be positive definite; @POSD( R); DATA: @TEXT() = ' The smallest eigenvalue is ', D; @TEXT() = ' '; @TEXT() = ' The Original matrix'; @TEXT() = @TABLE(Q); @TEXT() = ' '; @TEXT() = ' The Adjusted matrix'; @TEXT() = @TABLE(R); @TEXT() = ' '; ENDDATA