| idamnjanovic@1 | 1 function SMALL = SMALL_solve(SMALL) | 
| idamnjanovic@1 | 2   % Ivan Damnjanovic 2009 | 
| idamnjanovic@1 | 3   % Function gets as input SMALL structure that contains SPARCO problem to | 
| idamnjanovic@1 | 4   % be solved, name of the toolbox and solver, and parameters file for particular solver | 
| idamnjanovic@1 | 5   % Outputs are solution, reconstructed signal and time spent | 
| idamnjanovic@1 | 6   %% | 
| idamnjanovic@1 | 7 | 
| idamnjanovic@1 | 8   A  = @(x) SMALL.Problem.A(x,1);  % The operator | 
| idamnjanovic@1 | 9   AT = @(y) SMALL.Problem.A(y,2);  % and its transpose. | 
| idamnjanovic@1 | 10   b  = SMALL.Problem.b;            % The right-hand-side vector. | 
| idamnjanovic@1 | 11   m = SMALL.Problem.sizeA(1);      % m is the no. of rows. | 
| idamnjanovic@1 | 12   n = SMALL.Problem.sizeA(2);      % n is the no. of columns. | 
| idamnjanovic@1 | 13 | 
| idamnjanovic@1 | 14   fprintf('\nStarting solver %s... \n', SMALL.solver.name); | 
| idamnjanovic@1 | 15   start=cputime; | 
| idamnjanovic@1 | 16   %% | 
| idamnjanovic@1 | 17   if strcmpi(SMALL.solver.toolbox,'sparselab') | 
| idamnjanovic@1 | 18     y = eval([SMALL.solver.name,'(''SL_A'', b, n,',SMALL.solver.param,');']); | 
| idamnjanovic@1 | 19   elseif strcmpi(SMALL.solver.toolbox,'sparsify') | 
| idamnjanovic@1 | 20     y = eval([SMALL.solver.name,'(b, A, n, ''P_trans'', AT,',SMALL.solver.param,');']); | 
| idamnjanovic@1 | 21   elseif (strcmpi(SMALL.solver.toolbox,'spgl1')||strcmpi(SMALL.solver.toolbox,'gpsr')) | 
| idamnjanovic@1 | 22     y = eval([SMALL.solver.name,'(b, A,',SMALL.solver.param,');']); | 
| idamnjanovic@1 | 23   else | 
| idamnjanovic@1 | 24     y = eval([SMALL.solver.name,'(A, b, n,',SMALL.solver.param,',AT);']); | 
| idamnjanovic@1 | 25   end | 
| idamnjanovic@1 | 26   %% | 
| idamnjanovic@1 | 27   SMALL.solver.time = cputime - start; | 
| idamnjanovic@1 | 28   fprintf('Solver %s finished task in %2f seconds. \n', SMALL.solver.name, SMALL.solver.time); | 
| idamnjanovic@1 | 29   SMALL.solver.solution = full(y); | 
| idamnjanovic@1 | 30   SMALL.solver.reconstructed  = SMALL.Problem.reconstruct(SMALL.solver.solution); | 
| idamnjanovic@1 | 31 end | 
| idamnjanovic@1 | 32 |