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)