No BSD License  

Highlights from
Rank revealing lu decomposition

from Rank revealing lu decomposition by Pawel Kowal
calculates rank revealing lu decomposition

demo_rrlu.m
% ------- PARAMETERS -------------------------------
n       = 500;
m       = 500;
k       = 490;

maxval  = 10;
minval  = -10;       
   
version = 0;

% ------- Generating matrix ------------------------
dm      = (maxval-minval)/(k-1);
I       = minval:dm:maxval;
I       = diag([exp(I) zeros(1,max([n,m])-k)]);
I       = I(1:n,1:m);
W       = randn(n,n);
V       = randn(m,m);
[W,dum] = qr(W);
[V,dum] = qr(V);

A       = W*I*V;
tol     = max([n,m])*norm(A,1)*eps;

% ------- Factorizations ---------------------------
tic;
for i=1:1:10
[L1,U1,P1] = lu(A);
end
t1 = toc/10;

err_lu  = norm(L1*U1-P1*A,1);

tic;
for i=1:1:10
[L, U, P, Q] = rrlu_mex(A, version);
end
t2      = toc/10;

err     = norm(L*U-A(P,Q),1);
Rank    = getRank(version,L,U,tol);

% ------- Summary -----------------------------------
disp(' ');
disp(' Summary:');
disp(' ');
disp([' Random matrix ' num2str(n) ' x ' num2str(m) ' with rank ' num2str(k)]);
disp([' Elapsed time of rrlu factorization: ' num2str(t2)]);
disp([' Elapsed time of lu factorization: ' num2str(t1)]);
disp([' Estimated rank: ' num2str(Rank)]);
disp([' Norm of residuals (rrlu): ' num2str(err)]);
disp([' Norm of residuals (lu): ' num2str(err_lu)]);
disp(' ');

Contact us at files@mathworks.com