bmailhe@244
|
1 function [ sol ] = unloc_solver( b, A, param,name )
|
bmailhe@244
|
2 %UNLOC_SOLVER Solve the minimisation problem using UNLOCBOX toolbox
|
bmailhe@244
|
3 %
|
bmailhe@244
|
4 % argmin_x ||x||_1 such that ||Ax-b||_2 < sima_t
|
bmailhe@244
|
5
|
bmailhe@244
|
6 if nargin<3, param=struct; end
|
bmailhe@244
|
7
|
bmailhe@244
|
8 % set parameters
|
bmailhe@244
|
9 if ~isfield(param, 'verbose'), param.verbose = 1; end
|
bmailhe@244
|
10 if ~isfield(param, 'T'), param.T = 256; end
|
bmailhe@244
|
11 if ~isfield(param, 'sigma'), param.sigma = 1; end
|
bmailhe@244
|
12 if ~isfield(param, 'max_iter'), param.max_iter = 100; end
|
bmailhe@244
|
13 if ~isfield(param, 'epsilon'), param.epsilon = 1e-3; end
|
bmailhe@244
|
14
|
bmailhe@244
|
15 [b2,f1,f2,param] = small_to_unloc(b,A,param);
|
bmailhe@244
|
16
|
bmailhe@244
|
17 if strcmpi(name, 'Douglas_Rachford')
|
bmailhe@244
|
18 sol=douglas_rachford(b2,f2,f1,param);
|
bmailhe@244
|
19 elseif strcmpi(name, 'Forward_Backard')
|
bmailhe@244
|
20 sol=forward_backward(b2,f1,f2,param);
|
bmailhe@244
|
21 elseif strcmpi(name, 'ADMM')
|
bmailhe@244
|
22 opL= @(x) x;
|
bmailhe@244
|
23 sol=admm(b2,f1,f2,opL,param);
|
bmailhe@244
|
24 else
|
bmailhe@244
|
25 error('UNLocBox tells you: Unknown solver name!')
|
bmailhe@244
|
26 end;
|
bmailhe@244
|
27
|
bmailhe@244
|
28
|
bmailhe@244
|
29
|
bmailhe@244
|
30 end
|
bmailhe@244
|
31
|