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