https://hal.archives-ouvertes.fr/hal-02955901
Tip revision: 9d1304a95456ed7b1ce59613fc810f5463b35273 authored by Software Heritage on 02 October 2020, 00:00:00 UTC
hal: Deposit 1023 in collection hal
hal: Deposit 1023 in collection hal
Tip revision: 9d1304a
proxL2distind.m
%% proxL2distind
% Computes proximity operator for the indicator function of the L2 distance
% x = argmin||x-v||^2 s.t. ||Mx - y||<=lambda
%
% Note: if M is a tight frame, the output is exact, otherwise it is an
% estimate for the evaluation of the proximity operator
%
% Copyright (C) Srdan Kitic, Inria Rennes
%
% This program is free software: you can redistribute it and/or modify
% it under the terms of the GNU Affero General Public License as
% published by the Free Software Foundation, either version 3 of the
% License, or (at your option) any later version.
%
% This program is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
% GNU Affero General Public License for more details.
%
% You should have received a copy of the GNU Affero General Public License
% along with this program. If not, see <http://www.gnu.org/licenses/>.
%
% Contact: nancy.bertin@irisa.fr or remi.gribonval@inria.fr
% PANAMA Research Group, IRISA - (Inria & CNRS)
% Campus de Beaulieu, 35042 Rennes cedex, France
%
%%
function x = proxL2distind (v, M, y, lambda)
d = M*v - y;
norm_Mv = norm(d);
if norm_Mv > lambda
Mt = M';
MMt = M*Mt;
x = v - ((norm_Mv - lambda)/norm_Mv) .* Mt*(MMt\d);
else
x = v;
end
end