27 lines
485 B
Matlab
Executable File
27 lines
485 B
Matlab
Executable File
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 |