Add "FAR vs PD"
This commit is contained in:
Executable
+53
@@ -0,0 +1,53 @@
|
||||
function x_hat = recovery(A, y_noise)
|
||||
global method
|
||||
if method == "debiased_LASSO"
|
||||
sz = size(A);
|
||||
N = sz(2);
|
||||
LASSO_lambda = 2;
|
||||
|
||||
gamma = sz(1) / sz(2);
|
||||
|
||||
cvx_begin quiet
|
||||
variable x_LASSO(N) complex
|
||||
minimize(LASSO_lambda * norm(x_LASSO, 1) + norm(y_noise - A * x_LASSO, 2))
|
||||
cvx_end
|
||||
|
||||
rho_active = sum(abs(x_LASSO) > 1e-3)/N;
|
||||
Q_hat = (gamma - rho_active)/(1 - rho_active);
|
||||
Rho = sum((abs(x_LASSO) > 1e-3).* (2 - LASSO_lambda./(Q_hat*abs(x_LASSO) + LASSO_lambda))) / 2 / N;
|
||||
diff = 1;
|
||||
while(diff > 1e-4)
|
||||
Rho_pre = Rho;
|
||||
Rho = sum((abs(x_LASSO) > 1e-3).* (2 - LASSO_lambda./((gamma-Rho)/(1-Rho)*abs(x_LASSO) + LASSO_lambda))) / 2 / N;
|
||||
diff = abs(Rho - Rho_pre);
|
||||
end
|
||||
Q_hat = (gamma-Rho)/(1-Rho);
|
||||
x_d_CROD = x_LASSO + A'*(y_noise - A*x_LASSO)/Q_hat;
|
||||
x_hat = x_d_CROD;
|
||||
|
||||
elseif method == "LASSO"
|
||||
sz = size(A);
|
||||
N = sz(2);
|
||||
LASSO_lambda = 1;
|
||||
cvx_begin quiet
|
||||
variable x_LASSO(N) complex
|
||||
minimize(LASSO_lambda * norm(x_LASSO, 1) + norm(y_noise - A * x_LASSO, 2))
|
||||
cvx_end
|
||||
|
||||
x_hat = x_LASSO;
|
||||
|
||||
elseif method == "BP"
|
||||
sz = size(A);
|
||||
N = sz(2);
|
||||
cvx_begin quiet
|
||||
variable x_hat(N) complex
|
||||
minimize(norm(x_hat, 1))
|
||||
subject to
|
||||
A * x_hat == y_noise
|
||||
cvx_end
|
||||
else
|
||||
global lambda tau iter_max;
|
||||
[x_hat, z_hat_d] = cVAMPro(y_noise, A, lambda, tau, iter_max);
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user