function x_hat = OMP(A, y, k)
[~, N] = size(A);
% initialization
x_hat = zeros(N, 1);
r = y;
Omega = [];
% main loop
for i = 1:k
g = r.'*A;
[~, j] = max(abs(g)./vecnorm(A));
Omega = [Omega j];
x_hat(Omega) = pinv(A(:, Omega))*y;
r = y-A*x_hat;
end
end
CoSaMP算法的MATLAB实现
function x_hat = CoSaMP(A, y, k)
[~, N] = size(A);
% initialization
% x_hat = zeros(N, 1);
r = y;
T = [];
% main loop
iter_max = 10;
iter_cnt = 0;
while iter_cnt<iter_max
iter_cnt = iter_cnt+1;
g = abs(r.'*A)./vecnorm(A);
[~, I] = sort(g, 'descend');
Omega = I(1:2*k);
T = union(Omega, T);
x_hat = zeros(N, 1);
x_hat(T) = pinv(A(:, T))*y;
[~, I] = sort(abs(x_hat), 'descend');
T = I(1:k).';
x_hat(I(k+1:end)) = 0;
r = y-A*x_hat;
end
end