annotate matlab/study_analysis_rec_algos_noisy.m @ 65:3d53309236c4

Added cvxopt_lp.py. Some bugfixes in gap.py and l1eq_pd.py
author Nic Cleju <nikcleju@gmail.com>
date Fri, 16 Mar 2012 13:35:47 +0200
parents 527b0f6a9ffc
children
rev   line source
nikcleju@54 1 % File: study_analysis_rec_algos
nikcleju@54 2 % Run global experiment to compare algorithms used for analysis-based reconstruction
nikcleju@54 3 % and plot phast transition graphs
nikcleju@54 4
nikcleju@54 5 clear all
nikcleju@54 6 close all
nikcleju@54 7
nikcleju@54 8 % =================================
nikcleju@54 9 % Set up experiment parameters
nikcleju@54 10 %==================================
nikcleju@54 11 % Which form factor, delta and rho we want
nikcleju@54 12 sigmas = 1.2;
nikcleju@54 13 deltas = 0.05:0.05:0.95;
nikcleju@54 14 rhos = 0.05:0.05:0.95;
nikcleju@54 15 % deltas = [0.95];
nikcleju@54 16 % rhos = [0.1];
nikcleju@54 17 %deltas = 0.3:0.3:0.9;
nikcleju@54 18 %rhos = 0.3:0.3:0.9;
nikcleju@54 19
nikcleju@54 20 % Number of vectors to generate each time
nikcleju@54 21 numvects = 100;
nikcleju@54 22
nikcleju@54 23 % Add noise
nikcleju@54 24 % This is norm(signal)/norm(noise), so power, not energy
nikcleju@54 25 SNRdb = 20; % virtually no noise
nikcleju@54 26
nikcleju@54 27 % Show progressbar ? (not recommended when running on parallel threads)
nikcleju@54 28 do_progressbar = 0;
nikcleju@54 29
nikcleju@54 30 % Value of lambda
nikcleju@54 31 lambda = 1e-2;
nikcleju@54 32
nikcleju@54 33 % What algos to run
nikcleju@54 34 do_abs_ompk = 1;
nikcleju@54 35 do_abs_ompeps = 1;
nikcleju@54 36 do_abs_tst = 1;
nikcleju@54 37 do_abs_bp = 1;
nikcleju@54 38 do_gap = 1;
nikcleju@54 39 do_nesta = 0;
nikcleju@54 40
nikcleju@54 41 % =================================
nikcleju@54 42 % Processing the parameters
nikcleju@54 43 %==================================
nikcleju@54 44 % Set up parameter structure
nikcleju@54 45 count = 0;
nikcleju@54 46 for isigma = 1:sigmas
nikcleju@54 47 for idelta = 1:numel(deltas)
nikcleju@54 48 for irho = 1:numel(rhos)
nikcleju@54 49 sigma = sigmas(isigma);
nikcleju@54 50 delta = deltas(idelta);
nikcleju@54 51 rho = rhos(irho);
nikcleju@54 52
nikcleju@54 53 d = 200;
nikcleju@54 54 p = round(sigma*d);
nikcleju@54 55 m = round(delta*d);
nikcleju@54 56 l = round(d - rho*m);
nikcleju@54 57
nikcleju@54 58 params(count+1).d = d;
nikcleju@54 59 params(count+1).p = p;
nikcleju@54 60 params(count+1).m = m;
nikcleju@54 61 params(count+1).l = l;
nikcleju@54 62
nikcleju@54 63 count = count + 1;
nikcleju@54 64 end
nikcleju@54 65 end
nikcleju@54 66 end
nikcleju@54 67
nikcleju@54 68 % Compute noiselevel from db
nikcleju@54 69 noiselevel = 1 / (10^(SNRdb/10));
nikcleju@54 70
nikcleju@54 71 %load study_analysis_init
nikcleju@54 72
nikcleju@54 73 % Generate an analysis operator Omega
nikcleju@54 74 Omega = Generate_Analysis_Operator(d, p);
nikcleju@54 75
nikcleju@54 76 % Progressbar
nikcleju@54 77 if do_progressbar
nikcleju@54 78 progressbar('Total', 'Current parameters');
nikcleju@54 79 end
nikcleju@54 80
nikcleju@54 81 % Init times
nikcleju@54 82 elapsed_abs_ompk = 0;
nikcleju@54 83 elapsed_abs_ompeps = 0;
nikcleju@54 84 elapsed_abs_tst = 0;
nikcleju@54 85 elapsed_abs_bp = 0;
nikcleju@54 86 elapsed_gap = 0;
nikcleju@54 87 elapsed_nesta = 0;
nikcleju@54 88
nikcleju@54 89 % Init results structure
nikcleju@54 90 results = [];
nikcleju@54 91
nikcleju@54 92 % Prepare progressbar reduction variables
nikcleju@54 93 % if do_progressbar
nikcleju@54 94 % incr2 = 1/numvects;
nikcleju@54 95 % incr1 = 1/numvects/count;
nikcleju@54 96 % frac2 = 0;
nikcleju@54 97 % frac1 = 0;
nikcleju@54 98 % end
nikcleju@54 99
nikcleju@54 100 % ========
nikcleju@54 101 % Run
nikcleju@54 102 % ========
nikcleju@54 103 parfor iparam = 1:numel(params)
nikcleju@54 104
nikcleju@54 105 % Read current parameters
nikcleju@54 106 d = params(iparam).d;
nikcleju@54 107 p = params(iparam).p;
nikcleju@54 108 m = params(iparam).m;
nikcleju@54 109 l = params(iparam).l;
nikcleju@54 110
nikcleju@54 111 % Init stuff
nikcleju@54 112 xrec_abs_ompk = zeros(d, numvects);
nikcleju@54 113 xrec_abs_ompeps = zeros(d, numvects);
nikcleju@54 114 xrec_abs_tst = zeros(d, numvects);
nikcleju@54 115 xrec_abs_bp = zeros(d, numvects);
nikcleju@54 116 xrec_gap = zeros(d, numvects);
nikcleju@54 117 xrec_nesta = zeros(d, numvects);
nikcleju@54 118 %
nikcleju@54 119 err_abs_ompk = zeros(numvects,1);
nikcleju@54 120 relerr_abs_ompk = zeros(numvects,1);
nikcleju@54 121 err_abs_ompeps = zeros(numvects,1);
nikcleju@54 122 relerr_abs_ompeps = zeros(numvects,1);
nikcleju@54 123 err_abs_tst = zeros(numvects,1);
nikcleju@54 124 relerr_abs_tst = zeros(numvects,1);
nikcleju@54 125 err_abs_bp = zeros(numvects,1);
nikcleju@54 126 relerr_abs_bp = zeros(numvects,1);
nikcleju@54 127 err_gap = zeros(numvects,1);
nikcleju@54 128 relerr_gap = zeros(numvects,1);
nikcleju@54 129 err_nesta = zeros(numvects,1);
nikcleju@54 130 relerr_nesta = zeros(numvects,1);
nikcleju@54 131
nikcleju@54 132 % Generate data based on parameters
nikcleju@54 133 [x0,y,M,Lambda] = Generate_Data_Known_Omega(Omega, d,p,m,l,noiselevel, numvects,'l0');
nikcleju@54 134
nikcleju@54 135 % For every generated signal do
nikcleju@54 136 for iy = 1:size(y,2)
nikcleju@54 137
nikcleju@54 138 % Compute epsilon
nikcleju@54 139 epsilon = noiselevel * norm(y(:,iy));
nikcleju@54 140
nikcleju@54 141 %--------------------------------
nikcleju@54 142 % Reconstruct (and measure delay)
nikcleju@54 143 % Compute reconstruction error
nikcleju@54 144 %--------------------------------
nikcleju@54 145 % ABS-OMPk
nikcleju@54 146 if (do_abs_ompk)
nikcleju@54 147 timer_abs_ompk = tic;
nikcleju@54 148 xrec_abs_ompk(:,iy) = ABS_OMPk_approx(y(:,iy), Omega, M, p-l, lambda);
nikcleju@54 149 elapsed_abs_ompk = elapsed_abs_ompk + toc(timer_abs_ompk);
nikcleju@54 150 %
nikcleju@54 151 err_abs_ompk(iy) = norm(x0(:,iy) - xrec_abs_ompk(:,iy));
nikcleju@54 152 relerr_abs_ompk(iy) = err_abs_ompk(iy) / norm(x0(:,iy));
nikcleju@54 153 end
nikcleju@54 154 % ABS-OMPeps
nikcleju@54 155 if (do_abs_ompeps)
nikcleju@54 156 timer_abs_ompeps = tic;
nikcleju@54 157 xrec_abs_ompeps(:,iy) = ABS_OMPeps_approx(y(:,iy), Omega, M, epsilon, lambda);
nikcleju@54 158 elapsed_abs_ompeps = elapsed_abs_ompeps + toc(timer_abs_ompeps);
nikcleju@54 159 %
nikcleju@54 160 err_abs_ompeps(iy) = norm(x0(:,iy) - xrec_abs_ompeps(:,iy));
nikcleju@54 161 relerr_abs_ompeps(iy) = err_abs_ompeps(iy) / norm(x0(:,iy));
nikcleju@54 162 end
nikcleju@54 163 % ABS-TST
nikcleju@54 164 if (do_abs_tst)
nikcleju@54 165 timer_abs_tst = tic;
nikcleju@54 166 xrec_abs_tst(:,iy) = ABS_TST_approx(y(:,iy), Omega, M, epsilon, lambda);
nikcleju@54 167 elapsed_abs_tst = elapsed_abs_tst + toc(timer_abs_tst);
nikcleju@54 168 %
nikcleju@54 169 err_abs_tst(iy) = norm(x0(:,iy) - xrec_abs_tst(:,iy));
nikcleju@54 170 relerr_abs_tst(iy) = err_abs_tst(iy) / norm(x0(:,iy));
nikcleju@54 171 end
nikcleju@54 172 % ABS-BP
nikcleju@54 173 if (do_abs_bp)
nikcleju@54 174 timer_abs_bp = tic;
nikcleju@54 175 xrec_abs_bp(:,iy) = ABS_BP_approx(y(:,iy), Omega, M, epsilon, lambda);
nikcleju@54 176 elapsed_abs_bp = elapsed_abs_bp + toc(timer_abs_bp);
nikcleju@54 177 %
nikcleju@54 178 err_abs_bp(iy) = norm(x0(:,iy) - xrec_abs_bp(:,iy));
nikcleju@54 179 relerr_abs_bp(iy) = err_abs_bp(iy) / norm(x0(:,iy));
nikcleju@54 180 end
nikcleju@54 181 % GAP
nikcleju@54 182 if (do_gap)
nikcleju@54 183 gapparams = [];
nikcleju@54 184 gapparams.num_iteration = 40;
nikcleju@54 185 gapparams.greedy_level = 0.9;
nikcleju@54 186 gapparams.stopping_coefficient_size = 1e-4;
nikcleju@54 187 gapparams.l2solver = 'pseudoinverse';
nikcleju@54 188 gapparams.noise_level = noiselevel;
nikcleju@54 189 timer_gap = tic;
nikcleju@54 190 xrec_gap(:,iy) = GAP(y(:,iy), M, M', Omega, Omega', gapparams, zeros(d,1));
nikcleju@54 191 elapsed_gap = elapsed_gap + toc(timer_gap);
nikcleju@54 192 %
nikcleju@54 193 err_gap(iy) = norm(x0(:,iy) - xrec_gap(:,iy));
nikcleju@54 194 relerr_gap(iy) = err_gap(iy) / norm(x0(:,iy));
nikcleju@54 195 end
nikcleju@54 196 % NESTA
nikcleju@54 197 if (do_nesta)
nikcleju@54 198 try
nikcleju@54 199 timer_nesta = tic;
nikcleju@54 200 xrec_nesta(:,iy) = do_nesta_DemoNonProjector(x0(:,iy), M, Omega', 0);
nikcleju@54 201 elapsed_nesta = elapsed_nesta + toc(timer_nesta);
nikcleju@54 202 catch err
nikcleju@54 203 disp('*****ERROR: NESTA throwed error *****');
nikcleju@54 204 xrec_nesta(:,iy) = zeros(size(x0(:,iy)));
nikcleju@54 205 end
nikcleju@54 206 %
nikcleju@54 207 err_nesta(iy) = norm(x0(:,iy) - xrec_nesta(:,iy));
nikcleju@54 208 relerr_nesta(iy) = err_nesta(iy) / norm(x0(:,iy));
nikcleju@54 209 end
nikcleju@54 210
nikcleju@54 211 % Update progressbar
nikcleju@54 212 % if do_progressbar
nikcleju@54 213 % %frac2 = iy/numvects;
nikcleju@54 214 % %frac1 = ((iparam-1) + frac2) / count;
nikcleju@54 215 % if norm(frac2 - 1) < 1e-6
nikcleju@54 216 % frac2 = 0;
nikcleju@54 217 % end
nikcleju@54 218 % frac2 = frac2 + incr2;
nikcleju@54 219 % frac1 = frac1 + incr1;
nikcleju@54 220 % progressbar(frac1, frac2);
nikcleju@54 221 % end
nikcleju@54 222 end
nikcleju@54 223
nikcleju@54 224 %--------------------------------
nikcleju@54 225 % Save results in big stucture & display
nikcleju@54 226 %--------------------------------
nikcleju@54 227 % Save reconstructed signals
nikcleju@54 228 % Save rel & abs errors
nikcleju@54 229 % Display error
nikcleju@54 230 disp(['Simulation no. ' num2str(iparam)]);
nikcleju@54 231 if (do_abs_ompk)
nikcleju@54 232 results(iparam).xrec_abs_ompk = xrec_abs_ompk;
nikcleju@54 233 results(iparam).err_abs_ompk = err_abs_ompk;
nikcleju@54 234 results(iparam).relerr_abs_ompk = relerr_abs_ompk;
nikcleju@54 235 disp([' ABS_OMPk: avg relative error = ' num2str(mean(relerr_abs_ompk))]);
nikcleju@54 236 end
nikcleju@54 237 if (do_abs_ompeps)
nikcleju@54 238 results(iparam).xrec_abs_ompeps = xrec_abs_ompeps;
nikcleju@54 239 results(iparam).err_abs_ompeps = err_abs_ompeps;
nikcleju@54 240 results(iparam).relerr_abs_ompeps = relerr_abs_ompeps;
nikcleju@54 241 disp([' ABS_OMPeps: avg relative error = ' num2str(mean(relerr_abs_ompeps))]);
nikcleju@54 242 end
nikcleju@54 243 if (do_abs_tst)
nikcleju@54 244 results(iparam).xrec_abs_tst = xrec_abs_tst;
nikcleju@54 245 results(iparam).err_abs_tst = err_abs_tst;
nikcleju@54 246 results(iparam).relerr_abs_tst = relerr_abs_tst;
nikcleju@54 247 disp([' ABS_TST: avg relative error = ' num2str(mean(relerr_abs_tst))]);
nikcleju@54 248 end
nikcleju@54 249 if (do_abs_bp)
nikcleju@54 250 results(iparam).xrec_abs_bp = xrec_abs_bp;
nikcleju@54 251 results(iparam).err_abs_bp = err_abs_bp;
nikcleju@54 252 results(iparam).relerr_abs_bp = relerr_abs_bp;
nikcleju@54 253 disp([' ABS_BP: avg relative error = ' num2str(mean(relerr_abs_bp))]);
nikcleju@54 254 end
nikcleju@54 255 if (do_gap)
nikcleju@54 256 results(iparam).xrec_gap = xrec_gap;
nikcleju@54 257 results(iparam).err_gap = err_gap;
nikcleju@54 258 results(iparam).relerr_gap = relerr_gap;
nikcleju@54 259 disp([' GAP: avg relative error = ' num2str(mean(relerr_gap))]);
nikcleju@54 260 end
nikcleju@54 261 if (do_nesta)
nikcleju@54 262 results(iparam).xrec_nesta = xrec_nesta;
nikcleju@54 263 results(iparam).err_nesta = err_nesta;
nikcleju@54 264 results(iparam).relerr_nesta = relerr_nesta;
nikcleju@54 265 disp([' NESTA: avg relative error = ' num2str(mean(relerr_nesta))]);
nikcleju@54 266 end
nikcleju@54 267 end
nikcleju@54 268
nikcleju@54 269 % =================================
nikcleju@54 270 % Save
nikcleju@54 271 % =================================
nikcleju@54 272 save mat/avgerr_SNR20_lbd1e-2
nikcleju@54 273
nikcleju@54 274 % =================================
nikcleju@54 275 % Plot phase transition
nikcleju@54 276 % =================================
nikcleju@54 277 %--------------------------------
nikcleju@54 278 % Prepare
nikcleju@54 279 %--------------------------------
nikcleju@54 280 %d = 200;
nikcleju@54 281 %m = 190;
nikcleju@54 282 %exactthr = d/m * noiselevel;
nikcleju@54 283 %sigma = 1.2;
nikcleju@54 284 iparam = 1;
nikcleju@54 285 for idelta = 1:numel(deltas)
nikcleju@54 286 for irho = 1:numel(rhos)
nikcleju@54 287 % Create exact recovery count matrix
nikcleju@54 288 % nexact_abs_bp (irho, idelta) = sum(results(iparam).relerr_abs_bp < exactthr);
nikcleju@54 289 % nexact_abs_ompk (irho, idelta) = sum(results(iparam).relerr_abs_ompk < exactthr);
nikcleju@54 290 % nexact_abs_ompeps (irho, idelta) = sum(results(iparam).relerr_abs_ompeps < exactthr);
nikcleju@54 291 % nexact_gap (irho, idelta) = sum(results(iparam).relerr_gap < exactthr);
nikcleju@54 292 % nexact_abs_tst (irho, idelta) = sum(results(iparam).relerr_abs_tst < exactthr);
nikcleju@54 293 % % nexact_nesta(irho, idelta) = sum(results(iparam).relerr_nesta < exactthr);
nikcleju@54 294
nikcleju@54 295 % Get histogram (for a single param set only!)
nikcleju@54 296 % hist_abs_ompk = hist(results(iparam).relerr_abs_ompk, 0.001:0.001:0.1);
nikcleju@54 297 % hist_abs_ompeps = hist(results(iparam).relerr_abs_ompeps, 0.001:0.001:0.1);
nikcleju@54 298 % hist_abs_tst = hist(results(iparam).relerr_abs_tst, 0.001:0.001:0.1);
nikcleju@54 299 % hist_abs_bp = hist(results(iparam).relerr_abs_bp, 0.001:0.001:0.1);
nikcleju@54 300 % hist_gap = hist(results(iparam).relerr_gap, 0.001:0.001:0.1);
nikcleju@54 301
nikcleju@54 302 % Compute average error value
nikcleju@54 303 if (do_abs_ompk)
nikcleju@54 304 avgerr_abs_ompk(irho, idelta) = 1 - mean(results(iparam).relerr_abs_ompk);
nikcleju@54 305 avgerr_abs_ompk(avgerr_abs_ompk < 0) = 0;
nikcleju@54 306 end
nikcleju@54 307 if (do_abs_ompeps)
nikcleju@54 308 avgerr_abs_ompeps(irho, idelta) = 1 - mean(results(iparam).relerr_abs_ompeps);
nikcleju@54 309 avgerr_abs_ompeps(avgerr_abs_ompeps < 0) = 0;
nikcleju@54 310 end
nikcleju@54 311 if (do_abs_tst)
nikcleju@54 312 avgerr_abs_tst(irho, idelta) = 1 - mean(results(iparam).relerr_abs_tst);
nikcleju@54 313 avgerr_abs_tst(avgerr_abs_tst < 0) = 0;
nikcleju@54 314 end
nikcleju@54 315 if (do_abs_bp)
nikcleju@54 316 avgerr_abs_bp(irho, idelta) = 1 - mean(results(iparam).relerr_abs_bp);
nikcleju@54 317 avgerr_abs_bp(avgerr_abs_bp < 0) = 0;
nikcleju@54 318 end
nikcleju@54 319 if (do_gap)
nikcleju@54 320 avgerr_gap(irho, idelta) = 1 - mean(results(iparam).relerr_gap);
nikcleju@54 321 avgerr_gap(avgerr_gap < 0) = 0;
nikcleju@54 322 end
nikcleju@54 323 if (do_nesta)
nikcleju@54 324 avgerr_nesta(irho, idelta) = 1 - mean(results(iparam).relerr_nesta);
nikcleju@54 325 avgerr_nesta(avgerr_nesta < 0) = 0;
nikcleju@54 326 end
nikcleju@54 327
nikcleju@54 328 iparam = iparam + 1;
nikcleju@54 329 end
nikcleju@54 330 end
nikcleju@54 331
nikcleju@54 332 %--------------------------------
nikcleju@54 333 % Plot
nikcleju@54 334 %--------------------------------
nikcleju@54 335 show_phasetrans = @show_phasetrans_win;
nikcleju@54 336 iptsetpref('ImshowAxesVisible', 'on');
nikcleju@54 337 close all
nikcleju@54 338 figbase = 'figs/avgerr_SNR20_lbd1e-2_';
nikcleju@54 339 do_save = 1;
nikcleju@54 340 %
nikcleju@54 341 if (do_abs_ompk)
nikcleju@54 342 figure;
nikcleju@54 343 %h = show_phasetrans(nexact_abs_ompk, numvects);
nikcleju@54 344 %bar(0.001:0.001:0.1, hist_abs_ompk);
nikcleju@54 345 h = show_phasetrans(avgerr_abs_ompk, 1);
nikcleju@54 346 if do_save
nikcleju@54 347 figname = [figbase 'ABS_OMPk'];
nikcleju@54 348 saveas(h, [figname '.fig']);
nikcleju@54 349 saveas(h, [figname '.png']);
nikcleju@54 350 saveTightFigure(h, [figname '.pdf']);
nikcleju@54 351 end
nikcleju@54 352 end
nikcleju@54 353 %
nikcleju@54 354 if (do_abs_ompeps)
nikcleju@54 355 figure;
nikcleju@54 356 %h = show_phasetrans(nexact_abs_ompeps, numvects);
nikcleju@54 357 %bar(0.001:0.001:0.1, hist_abs_ompeps);
nikcleju@54 358 h = show_phasetrans(avgerr_abs_ompeps, 1);
nikcleju@54 359 if do_save
nikcleju@54 360 figname = [figbase 'ABS_OMPeps'];
nikcleju@54 361 saveas(h, [figname '.fig']);
nikcleju@54 362 saveas(h, [figname '.png']);
nikcleju@54 363 saveTightFigure(h, [figname '.pdf']);
nikcleju@54 364 end
nikcleju@54 365 end
nikcleju@54 366 %
nikcleju@54 367 if (do_abs_tst)
nikcleju@54 368 figure;
nikcleju@54 369 %h = show_phasetrans(nexact_abs_tst, numvects);
nikcleju@54 370 %bar(0.001:0.001:0.1, hist_abs_tst);
nikcleju@54 371 h = show_phasetrans(avgerr_abs_tst, 1);
nikcleju@54 372 if do_save
nikcleju@54 373 figname = [figbase 'ABS_TST'];
nikcleju@54 374 saveas(h, [figname '.fig']);
nikcleju@54 375 saveas(h, [figname '.png']);
nikcleju@54 376 saveTightFigure(h, [figname '.pdf']);
nikcleju@54 377 end
nikcleju@54 378 end
nikcleju@54 379 %
nikcleju@54 380 if (do_abs_bp)
nikcleju@54 381 figure;
nikcleju@54 382 %h = show_phasetrans(nexact_abs_bp, numvects);
nikcleju@54 383 %bar(0.001:0.001:0.1, hist_abs_bp);
nikcleju@54 384 h = show_phasetrans(avgerr_abs_bp, 1);
nikcleju@54 385 if do_save
nikcleju@54 386 figname = [figbase 'ABS_BP'];
nikcleju@54 387 saveas(h, [figname '.fig']);
nikcleju@54 388 saveas(h, [figname '.png']);
nikcleju@54 389 saveTightFigure(h, [figname '.pdf']);
nikcleju@54 390 end
nikcleju@54 391 end
nikcleju@54 392 %
nikcleju@54 393 if (do_gap)
nikcleju@54 394 figure;
nikcleju@54 395 %h = show_phasetrans(nexact_gap, numvects);
nikcleju@54 396 %bar(0.001:0.001:0.1, hist_gap);
nikcleju@54 397 h = show_phasetrans(avgerr_gap, 1);
nikcleju@54 398 if do_save
nikcleju@54 399 figname = [figbase 'GAP'];
nikcleju@54 400 saveas(h, [figname '.fig']);
nikcleju@54 401 saveas(h, [figname '.png']);
nikcleju@54 402 saveTightFigure(h, [figname '.pdf']);
nikcleju@54 403 end
nikcleju@54 404 end
nikcleju@54 405 %
nikcleju@54 406 if (do_nesta)
nikcleju@54 407 figure;
nikcleju@54 408 %h = show_phasetrans(nexact_nesta, numvects);
nikcleju@54 409 %bar(0.001:0.001:0.1, hist_nesta);
nikcleju@54 410 h = show_phasetrans(avgerr_nesta, 1);
nikcleju@54 411 if do_save
nikcleju@54 412 figname = [figbase 'NESTA'];
nikcleju@54 413 saveas(h, [figname '.fig']);
nikcleju@54 414 saveas(h, [figname '.png']);
nikcleju@54 415 saveTightFigure(h, [figname '.pdf']);
nikcleju@54 416 end
nikcleju@54 417 end