Select Git revision
adaptative_randomized_range_finder.m
-
Marina Kreme authoredMarina Kreme authored
adaptative_randomized_range_finder.m 1.57 KiB
function Q = adaptative_randomized_range_finder(A ,L, tol, r)
%% ADAPTATIVE_RANDOMIZED_RANGE_FINDER is algo 4.2 of the reference below.
% This algorithm compute an orthonormal matrix Q such that |(I-QQ')A| < tol.
%
%
% Inputs :
% - A : Either matrix or matrix operator.
% - L : the length of the signal
% - tol : the precision with which the approximate base Q for the range of A
% is constructed.
% - r: integer
% Output:
% - Q : an Orthonormal matrix. The columns of Q are orthonormal
%
% REFERENCES:
%
% Nathan Halko, Per-Gunnar Martinsson, Joel A. Tropp, "Finding structure
% with randomness: Probabilistic algorithms for constructing approximate
% matrix decompositions", 2011.
%
% Author : A. Marina KREME
% e-mail : ama-marina.kreme@lis-lab.fr/ama-marina.kreme@univ-amu.fr
% Created: 2020-28-01
%%
if nargin ==3
r=10;
end
if nargin==2
tol=10^(-6);
end
Omega = randn(L, r);
m=L;
Y = zeros(m,r);
for i =1:r
yi = A(Omega(:,i));
Y(:,i)=Y(:,i)+yi;
end
y_norms = zeros(1,r);
for k =1:r
ni = norm(Y(:,k),2);
y_norms(k)=ni;
end
max_norms = max(y_norms);
j=0;
Qj= zeros(m,0);
while max_norms >tol/(10*sqrt(2/pi))
j=j+1;
Y(:,j) = Y(:,j)-Qj*(Qj'*Y(:,j));
qj = Y(:,j)/norm(Y(:,j),2);
Qj = [Qj qj];
new_Omega = randn(L,1);
Aw = A(new_Omega);
y_n = Aw - Qj*(Qj'*Aw);
Y = [Y y_n];
y_norms = [y_norms norm(y_n,2)];
for i =j+1:j+r-1
Y(:,i) = Y(:,i)- qj*(qj'*Y(:,i));
y_norms(i)=norm(Y(:,i),2);
end
max_norms = max(y_norms(j+1: end));
end
Q = Qj;
end