diff util/SMALL_solve.m @ 1:7750624e0c73 version0.5

(none)
author idamnjanovic
date Thu, 05 Nov 2009 16:36:01 +0000
parents
children 33850553b702
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/util/SMALL_solve.m	Thu Nov 05 16:36:01 2009 +0000
@@ -0,0 +1,32 @@
+function SMALL = SMALL_solve(SMALL)
+  % Ivan Damnjanovic 2009
+  % Function gets as input SMALL structure that contains SPARCO problem to
+  % be solved, name of the toolbox and solver, and parameters file for particular solver
+  % Outputs are solution, reconstructed signal and time spent
+  %%
+  
+  A  = @(x) SMALL.Problem.A(x,1);  % The operator
+  AT = @(y) SMALL.Problem.A(y,2);  % and its transpose.
+  b  = SMALL.Problem.b;            % The right-hand-side vector.
+  m = SMALL.Problem.sizeA(1);      % m is the no. of rows.
+  n = SMALL.Problem.sizeA(2);      % n is the no. of columns.
+  
+  fprintf('\nStarting solver %s... \n', SMALL.solver.name);
+  start=cputime;
+  %%
+  if strcmpi(SMALL.solver.toolbox,'sparselab')
+    y = eval([SMALL.solver.name,'(''SL_A'', b, n,',SMALL.solver.param,');']);
+  elseif strcmpi(SMALL.solver.toolbox,'sparsify')
+    y = eval([SMALL.solver.name,'(b, A, n, ''P_trans'', AT,',SMALL.solver.param,');']);
+  elseif (strcmpi(SMALL.solver.toolbox,'spgl1')||strcmpi(SMALL.solver.toolbox,'gpsr'))
+    y = eval([SMALL.solver.name,'(b, A,',SMALL.solver.param,');']);
+  else
+    y = eval([SMALL.solver.name,'(A, b, n,',SMALL.solver.param,',AT);']);
+  end
+  %%
+  SMALL.solver.time = cputime - start;
+  fprintf('Solver %s finished task in %2f seconds. \n', SMALL.solver.name, SMALL.solver.time);
+  SMALL.solver.solution = full(y);
+  SMALL.solver.reconstructed  = SMALL.Problem.reconstruct(SMALL.solver.solution);
+end
+  
\ No newline at end of file