function [z] = FISTA(y, A, lambda, delta) x_pre = A'*y; t = 1; z = x_pre; z_pre = z; t_pre = t; N = size(A, 2); diff = 1; E = eig(A'*A); L = E(end); temp1 = A'*y/L; temp2 = eye(N) - A'*A/L; k = 0; while((diff > delta) && (k < 1000)) temp = temp1 + temp2 * z_pre; x = sft_thd(temp, lambda/L); t = 0.5*(1 + sqrt(1+4*t_pre*t_pre)); z = x + (x - x_pre) * (t_pre-1) / t; diff = mean(abs(z_pre - z)); x_pre = x; z_pre = z; t_pre = t; k = k + 1; end end