bmailhe@244: function [b2,f1,f2,param] = small_to_unloc(b,A,param) bmailhe@244: bmailhe@244: bmailhe@244: if nargin<3, param=struct; end bmailhe@244: % set parameters bmailhe@244: if ~isfield(param, 'verbose'), param.verbose = 0; end bmailhe@244: if ~isfield(param, 'T'), param.T = 1; end bmailhe@244: if ~isfield(param, 'gamma'), param.gamma = 1/(1.1*norm(A)^2); end bmailhe@244: if ~isfield(param, 'sigma'), param.sigma = 1; end bmailhe@244: bmailhe@244: bmailhe@244: %set function f2 bmailhe@244: param_f2.verbose=param.verbose; bmailhe@244: param_f2.A=@(x) A*x; bmailhe@244: param_f2.At=@(x) A'*x; bmailhe@244: param_f2.y=b; bmailhe@244: param_f2.tight=0; bmailhe@244: param_f2.nu=norm(A,2)^2; bmailhe@244: param_f2.epsilon=param.sigma; bmailhe@244: bmailhe@244: f2.prox= @(x,l) fast_proj_B2(x,l,param_f2); % douglas rachford, admm bmailhe@244: f2.grad= @(x) 2*A'*(A*x-b); %forward backward bmailhe@244: f2.x0=A'*b; bmailhe@244: f2.norm=@(x) 0; bmailhe@244: bmailhe@244: bmailhe@244: bmailhe@244: bmailhe@244: %set function f1 bmailhe@244: param_f1.verbose=param.verbose; bmailhe@244: bmailhe@244: f1.x0=A'*b; bmailhe@244: f1.norm= @(x) sum(sum(abs(x))); bmailhe@244: f1.prox= @(x,l) prox_L1(x,param.T*l,param_f1); bmailhe@244: bmailhe@244: bmailhe@244: bmailhe@244: %set initial point bmailhe@244: b2=A'*b; bmailhe@244: bmailhe@244: bmailhe@244: end bmailhe@244: