RprojRldlt

description:

[XRat,L,D,P,err]=RprojRldlt(XX,SDP_data,ldlt_test,start) tries to find an exact rational positive semidefinite solution of the problem A*X=b from the floating point solution XX. The algorithm tries to find an appropiate rational approximation of the matrix XX which is after the projection on the hyperplane A*X=b a positive semidefinite matrix.

arguments:

XX is a floating point solution of the SDP: XX PsD, A*XX=b.

SDP_data is a structure holding .A and .b which represent A*XX=b.

if ldlt_test=true the programme tries to compute an exact rational LDU decomposition of a rational positive semidefinite solution of the problem A*XX=b. Otherwise positive semidefiniteness relies on numerical computation of eigenvalues. Default value is false.

start tells the programme from what tolerance the rounding part starts. The tolerance equals 1/(2^start). Default value is 0.

 

output:

XRat - a cell of two matrices which represent numerators and denominators of the exact rational positive semidefinite solution

L - a cell of two matrices which represent numerators and denominators of the matrix L in the (P*L)*D*(P*L)^T decomposition of the matrix XRat

D - a cell of two matrices which represent numerators and denominators of the diagonal matrix D in the (P*L)*D*(P*L)^T decomposition of the matrix XRat

P - a permutation pivot matrix in the (P*L)*D*(P*L)^T decomposition of the matrix XRat

err - if it equals 0 means that program ended with success, if it equals -1 rational LDLT decomposition failed because of too large numbers otherwise the whole procedure failed

possible usage:

RprojRldlt(XX,SDP_data), RprojRldlt(XX,SDP_data,ldlt_test), RprojRldlt(XX,SDP_data,ldlt_test,start)