row compression, range
[W,rk]=rowcomp(A [,flag [,tol]])
:A real or complex matrix : :flag optional character string, with possible values ‘svd’ or
‘qr’. The default value is ‘svd’.
: :W square non-singular matrix (change of basis) : :rk integer (rank of A) :
Row compression of A. Ac = W*A is a row compressed matrix: i.e. Ac=[Af;0] with Af full row rank.
flag and tol are optional parameters: flag=’qr’ or ‘svd’ (default ‘svd’).
tol is a tolerance parameter.
The rk first columns of W’ span the range of A.
The rk first (top) rows of W span the row range of A.
A non zero vector x belongs to range( A) iff W*x is row compressed in accordance with Ac i.e the norm of its last components is small w.r.t its first components.
A=`rand`_(5,2)*`rand`_(2,4); // 4 col. vectors, 2 independent.
[X,dim]=rowcomp(A);Xp=X';
`svd`_([Xp(:,1:dim),A]) //span(A) = span(Xp(:,1:dim)
x=A*`rand`_(4,1); //x belongs to span(A)
y=X*x
`norm`_(y(dim+1:$))/`norm`_(y(1:dim)) // small