KerMor  0.9
Model order reduction for nonlinear dynamical systems and nonlinear approximation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
ApproxVisualizer.m
Go to the documentation of this file.
1 
2 
3 /* (Autoinserted by mtoc++)
4  * This source code has been filtered by the mtoc++ executable,
5  * which generates code that can be processed by the doxygen documentation tool.
6  *
7  * On the other hand, it can neither be interpreted by MATLAB, nor can it be compiled with a C++ compiler.
8  * Except for the comments, the function bodies of your M-file functions are untouched.
9  * Consequently, the FILTER_SOURCE_FILES doxygen switch (default in our Doxyfile.template) will produce
10  * attached source files that are highly readable by humans.
11  *
12  * Additionally, links in the doxygen generated documentation to the source code of functions and class members refer to
13  * the correct locations in the source code browser.
14  * However, the line numbers most likely do not correspond to the line numbers in the original MATLAB source files.
15  */
16 
17 function varargout = ApproxVisualizer(varargin) {
18 
19 
20 /* Edit the above text to modify the response to help ApproxVisualizer */
21 
22 /* Last Modified by GUIDE v2.5 05-May-2011 15:32:05 */
23 
24 /* Begin initialization code - DO NOT EDIT */
25 gui_Singleton = 1;
26 gui_State = struct(" gui_Name ", mfilename, ...
27  " gui_Singleton ", gui_Singleton, ...
28  " gui_OpeningFcn ", @ApproxVisualizer_OpeningFcn, ...
29  " gui_OutputFcn ", @ApproxVisualizer_OutputFcn, ...
30  " gui_LayoutFcn ", [] , ...
31  " gui_Callback ", []);
32 if nargin && ischar(varargin[1])
33  gui_State.gui_Callback= str2func(varargin[1]);
34 end
35 
36 if nargout
37  [varargout[1:nargout]] = gui_mainfcn(gui_State, varargin[:]);
38 else
39  gui_mainfcn(gui_State, varargin[:]);
40 end
41 /* End initialization code - DO NOT EDIT */
42 
43 
44 /* --- Executes just before ApproxVisualizer is made visible. */
45 }
77 function ApproxVisualizer>ApproxVisualizer_OpeningFcn(hObject,eventdata,handles,varargin) {
78 
79 /* Choose default command line output for ApproxVisualizer */
80 handles.output= hObject;
81 
82 /* Update handles structure */
83 guidata(hObject, handles);
84 
85 /* UIWAIT makes ApproxVisualizer wait for user response (see UIRESUME)
86  * uiwait(handles.main); */
87 
88 /* %%%%%%%%%%% Custom code %%%%%%%%%%%%% */
89 if isempty(varargin)
90  disp(" Pass a reduced model to ApproxVisualizer. ");
91  return;
92 end
93 if ~isa(varargin[1]," models.ReducedModel ")
94  error(" ApproxVisualizer takes only models.ReducedModel subclasses as input. ");
95 end
96 
97 /* Store data */
98 r = varargin[1];
99 m = r.FullModel;
100 if isempty(m.Approx)
101  error(" The Approx field of the reduced models full model must not be empty. ");
102 end
103 setappdata(handles.main," r ",r);
104 setappdata(handles.main," atd ",m.Data.ApproxTrainData);
105 
106 /* Initialize GUI */
107 modelToGUI(r, handles);
108 
109 /* Set initial values */
110 if isempty(r.ParamSamples)
111  setappdata(handles.main," pidx ",[]);
112 else
113  setappdata(handles.main," pidx ",1);
114 end
115 if m.System.InputCount == 0
116  setappdata(handles.main," inidx ",[]);
117 else
118  setappdata(handles.main," inidx ",m.TrainingInputs(1));
119 end
120 setappdata(handles.main," fidx ",1);
121 setappdata(handles.main," mu ",[]);
122 
123 /* Plot default visualization */
124 plotCurrent(handles);
125 
126 
127 }
128 
130 m = r.FullModel;
131 /* Disable controls specific to model settings */
132 pc = size(r.ParamSamples,2);
133 if m.System.ParamCount == 0 || pc <= 1
134  set(h.pslide," Enable "," off ");
135 else
136  set(h.pslide," Max ",pc," Min ",1," Value ",1);
137  set(h.pslide," SliderStep ",[1/(pc-1) 10/(pc-1)]);
138 end
139 if m.System.InputCount <= 1
140  set(h.islideF," Enable "," off ");
141 else
142  set(h.islideF," Max ",m.System.InputCount," Min ",1," Value ",1);
143  set(h.islideF," SliderStep ",[1/m.System.InputCount 10/m.System.InputCount]);
144 end
145 if m.TrainingInputCount <= 1
146  set(h.islideS," Enable "," off ");
147 else
148  set(h.islideS," Max ",m.TrainingInputCount," Min ",1," Value ",1);
149  set(h.islideS," SliderStep ",[1/m.TrainingInputCount 10/m.TrainingInputCount]);
150 end
151 fdims = size(m.Data.ApproxTrainData.fxi,1);
152 set(h.fslide," Max ",fdims," Value ",1);
153 set(h.fslide," SliderStep ",[1/(fdims-1) 10/(fdims-1)]);
154 set(h.txtModel," String ",r.Name);
155 
156 set(h.pnlParams," Units "," pixels ");
157 pos = get(h.pnlParams," Position ");
158 set(h.pnlParams," Units "," normalized ");
159 dist = 22;/* px */
160 
161 pcnt = 0;
162 /* Create model parameter slides */
163 for pidx = 1:m.System.ParamCount
164  p = m.System.Params(pidx);
165  if p.HasRange
166  /* Top location */
167  top = pos(4)-pcnt*dist-40;
168  /* Create labels */
169  label = uicontrol(" Tag ",[" runtime_lbl " num2str(pidx)]," Style "," text ",...
170  " Parent ",h.pnlParams," HorizontalAlignment "," left ");
171  set(label," String ",p.Name," Units "," pixels ", " Position ",[10 top 50 14]);
172  set(label," Units "," normalized ");
173  label = uicontrol(" Tag ",[" runtime_lbll " num2str(pidx)]," Style "," text ",...
174  " Parent ",h.pnlParams," HorizontalAlignment "," right ");
175  set(label," String ",sprintf(" %2.3f ",p.MinVal)," Units "," pixels ",...
176  " Position ",[80 top 30 14]);
177  set(label," Units "," normalized ");
178  label = uicontrol(" Tag ",[" runtime_lblr " num2str(pidx)]," Style "," text ",...
179  " Parent ",h.pnlParams," HorizontalAlignment "," left ");
180  set(label," String ",sprintf(" %2.3f ",p.MaxVal)," Units "," pixels ",...
181  " Position ",[260 top 30 14]);
182  set(label," Units "," normalized ");
183  /* Create slider */
184  tag = [" runtime_pslide " num2str(pidx)];
185  ctrl = uicontrol(" Tag ",tag," Parent ",...
186  h.pnlParams," Style "," slider "," UserData ",pidx);
187  h.(tag) = ctrl;
188  /* Position */
189  set(ctrl," Units "," pixels "," Position ",[120 top 130 16]);
190  set(ctrl," Units "," normalized ");
191  /* Range etc */
192  set(ctrl," Min ",p.MinVal," Max ",p.MaxVal," Value ",p.MinVal);
193  set(ctrl," SliderStep ",[0.01 0.1]);
194  /* Set callback & string */
195  set(ctrl," Callback ",@(hO,e)(updateUserParam(guidata(hO))));
196 
197  /* increase position counter */
198  pcnt = pcnt + 1;
199  end
200  warning(" KerMor:visual "," FullData visualization will not work, not yet adopted to the new ATrajectoryData structure. ");
201 end
202 
203 }
204 
206 r = getappdata(h.main," r ");
207 pc = r.FullModel.System.ParamCount;
208 if pc > 0
209  mu = zeros(pc,1);
210  slides = findobj(h.pnlParams," Style "," slider ");
211  for n=1:pc
212  if r.FullModel.System.Params(n).HasRange
213  mu(n) = get(slides(pc-n+1)," Value ");
214  else
215  mu(n) = r.FullModel.System.Params(n).MinVal;
216  end
217  end
218  setappdata(h.main," mu ",mu);
219  currentToGUI(r,h);
220 end
221 
222 }
223 
225 
226 /* Get approximation training data (atd) */
227 r = getappdata(h.main," r ");
228 inidx = getappdata(h.main," inidx ");
229 
230 if get(h.rbS," Value ") == 1
231  d = r.FullModel.Data;
232 
233  if get(h.chkFullData," Value ") == 1
234  sn = d.TrainingData;
235  if ~isempty(r.V) && ~isempty(r.W)
236  sn(4:end,:) = r.V*(r.W^t*sn(4:end,:));
237  end
238  else
239  sn = d.ApproxTrainData;
240  end
241  /* Select required subset of training data */
242  pidx = getappdata(h.main," pidx ");
243 
244  if ~isempty(pidx)
245  psel = sn(1,:) == pidx;
246  else
247  psel = true(1,size(sn,2));
248  end
249  if ~isempty(inidx)
250  isel = sn(2,:) == inidx;
251  else
252  isel = true(1,size(sn,2));
253  end
254  sel = logical(psel .* isel);
255 
256  if get(h.chkFullData," Value ") == 1
257  fx = getappdata(h.main," fxall ");
258  else
259  fx = d.ApproxfValues;
260  end
261  sn = sn(:,sel);
262  fx = fx(:,sel);
263 
264  xi = sn(4:end,:);
265  ti = sn(3,:);
266  mui = d.getParams(sn(1,:));
267 
268  /* Find the currently used center vectors of the expansion, if set */
269  a = r.FullModel.Approx;
270  if isa(a, " dscomponents.AKernelCoreFun ")
271  cen = a.Centers.xi;
272  elseif isa(a, " approx.TPWLApprox ")
273  cen = a.xi;
274  else
275  cen = [];
276  end
277  centers = unique(Utils.findVecInMatrix(xi,cen));
278  if ~isempty(centers) && centers(1) == 0
279  centers(1) = [];
280  end
281  setappdata(h.main," centers ",centers);
282 
283 else
284  mu = getappdata(h.main," mu ");
285  fm = r.FullModel;
286  [ti,xi] = fm.computeTrajectory(mu,inidx);
287  /* Project to subspace */
288  xi = r.V*(r.W^t*xi);
289  n = length(ti);
290  mui = repmat(mu,1,n);
291 
292  fx = fm.System.f.evaluate(xi,ti,mui);
293 end
294 
295 afx = r.FullModel.Approx.evaluate(xi,ti,mui);
296 setappdata(h.main," fx ",fx);
297 setappdata(h.main," afx ",afx);
298 setappdata(h.main," ti ",ti);
299 setappdata(h.main," xi ",xi);
300 setappdata(h.main," mui ",mui);
301 
302 plotCurrentFxi(h)
303 
304 }
305 
307 fidx = getappdata(h.main," fidx ");
308 fx = getappdata(h.main," fx ");
309 afx = getappdata(h.main," afx ");
310 ti = getappdata(h.main," ti ");
311 fxi = fx(fidx,:);
312 afxi = afx(fidx,:);
313 
314 err = sqrt(sum((fxi-afxi).^2));
315 errinf = max(abs(fxi-afxi));
316 
317 plot(ti,fxi," r ",ti,afxi," b ");
318 legend(" Orig. Fcn "," Approx ");
319 
320 /* Plot extra markers for sampled data */
321 if get(h.rbS," Value ") == 1
322  nz = size(ti,2);
323  idx = 1:nz;
324  if get(h.chkCenters," Value ")
325  centers = getappdata(h.main," centers ");
326  if ~isempty(centers)
327  hold on;
328  plot(ti(idx(centers)),afxi(idx(centers))," o "," MarkerEdgeColor "," black ",...
329  " MarkerFaceColor "," r "," MarkerSize ",4);
330  hold off;
331  end
332  end
333 end
334 axis tight;
335 title(sprintf(" f,f "" at dimension %d. Linf-Err:%5.3e, L2-Err:%5.3e ",fidx,errinf,err));
336 xlabel(" t ");
337 ylabel(" f(x) ");
338 
339 currentToGUI(getappdata(h.main," r "),h);
340 
341 }
342 
344 pidx = getappdata(h.main," pidx ");
345 if ~isempty(pidx)
346  if get(h.rbS," Value ") == 1
347  set(h.txtPSampled," String ",[" Param: [ " sprintf(" %2.3f ",r.ParamSamples(:,pidx)) " ] "]);
348  else
349  set(h.txtPFull," String ",[" Param: [ " sprintf(" %2.3f ",getappdata(h.main," mu ")) " ] "]);
350  end
351 end
352 inidx = getappdata(h.main," inidx ");
353 if ~isempty(inidx)
354  r = getappdata(h.main," r ");
355  if get(h.rbS," Value ") == 1
356  /* Might have more inputs than have been sampled. */
357  if inidx > r.FullModel.TrainingInputCount
358  inidx = r.FullModel.TrainingInputs(end);
359  setappdata(h.main," inidx ",inidx);
360  set(h.txtISampled," Value ",inidx);
361  end
362  set(h.txtISampled," String ",sprintf(" Input: %d/%d ",inidx,max(r.FullModel.TrainingInputs)));
363  else
364  set(h.txtIFull," String ",sprintf(" Input: %d/%d ",inidx,r.System.InputCount));
365  end
366 end
367 set(h.txtf," String ",sprintf(" %d ",getappdata(h.main," fidx ")));
368 
369 /* --- Outputs from this function are returned to the command line. */
370 }
371 
372 function varargout = ApproxVisualizer>ApproxVisualizer_OutputFcn(hObject,eventdata,handles) {
373 
374 /* Get default command line output from handles structure */
375 varargout[1] = handles.output;
376 
377 /* --- Executes on slider movement. */
378 }
379 
380 function ApproxVisualizer>pslide_Callback(hObject,eventdata,handles) {
381 
382 /* Hints: get(hObject,'Value') returns position of slider
383  * get(hObject,'Min') and get(hObject,'Max') to determine range of
384  * slider */
385 setappdata(handles.main," pidx ",round(get(hObject," Value ")));
386 plotCurrent(handles);
387 
388 /* --- Executes during object creation, after setting all properties. */
389 }
390 
391 function ApproxVisualizer>pslide_CreateFcn(hObject,eventdata,handles) {
392 
393 /* Hint: slider controls usually have a light gray background. */
394 if isequal(get(hObject," BackgroundColor "), get(0," defaultUicontrolBackgroundColor "))
395  set(hObject," BackgroundColor ",[.9 .9 .9]);
396 end
397 
398 
399 /* --- Executes on slider movement. */
400 }
401 
402 function ApproxVisualizer>islideS_Callback(hObject,eventdata,handles) {
403 
404 /* Hints: get(hObject,'Value') returns position of slider
405  * get(hObject,'Min') and get(hObject,'Max') to determine range of slider */
406 idx = round(get(hObject," Value "));
407 r = getappdata(handles.main," r ");
408 idx = r.FullModel.TrainingInputs(idx);
409 setappdata(handles.main," inidx ",idx);
410 plotCurrent(handles);
411 
412 /* --- Executes during object creation, after setting all properties. */
413 }
414 
415 function ApproxVisualizer>islideS_CreateFcn(hObject,eventdata,handles) {
416 
417 /* Hint: slider controls usually have a light gray background. */
418 if isequal(get(hObject," BackgroundColor "), get(0," defaultUicontrolBackgroundColor "))
419  set(hObject," BackgroundColor ",[.9 .9 .9]);
420 end
421 
422 
423 /* --- Executes on slider movement. */
424 }
425 
426 function ApproxVisualizer>fslide_Callback(hObject,eventdata,handles) {
427 
428 /* Hints: get(hObject,'Value') returns position of slider
429  * get(hObject,'Min') and get(hObject,'Max') to determine range of slider */
430 setappdata(handles.main," fidx ",round(get(hObject," Value ")));
431 plotCurrentFxi(handles);
432 
433 /* --- Executes during object creation, after setting all properties. */
434 }
435 
436 function ApproxVisualizer>fslide_CreateFcn(hObject,eventdata,handles) {
437 
438 /* Hint: slider controls usually have a light gray background. */
439 if isequal(get(hObject," BackgroundColor "), get(0," defaultUicontrolBackgroundColor "))
440  set(hObject," BackgroundColor ",[.9 .9 .9]);
441 end
442 
443 /* --- Executes on button press in rbS. */
444 }
445 
446 function ApproxVisualizer>rbS_Callback(hObject,eventdata,h) {
447 set(h.rbU," Value ",0);
448 set(h.pnlParams," Visible "," off ");
449 r = getappdata(h.main," r ");
450 if size(r.ParamSamples,2) > 1
451  set(h.pslide," Enable "," on ");
452 end
453 if r.FullModel.TrainingInputCount > 1
454  set(h.islideS," Enable "," on ");
455 end
456 set(h.chkGlobal," Visible "," on ");
457 set([h.islideF h.txtIFull h.txtPFull]," Enable "," off ");
458 set([h.txtISampled h.txtPSampled h.chkCenters h.chkFullData]," Enable "," on ");
459 plotCurrent(h);
460 
461 }
462 
463 function ApproxVisualizer>rbU_Callback(hObject,eventdata,h) {
464 set(h.rbS," Value ",0);
465 set(h.pnlParams," Visible "," on ");
466 set(h.chkGlobal," Visible "," off "," Value ",0);
467 set([h.txtIFull h.txtPFull]," Enable "," on ");
468 set([h.pslide h.txtISampled h.txtPSampled h.islideS h.chkCenters h.chkFullData]," Enable "," off ");
469 r = getappdata(h.main," r ");
470 if r.System.InputCount > 1
471  set(h.islideF," Enable "," on ");
472 end
473 updateUserParam(h);
474 plotCurrent(h);
475 
476 }
477 
478 function ApproxVisualizer>chkFullData_Callback(hObject,eventdata,handles) {
479 if get(hObject," Value ") == 1 && isempty(getappdata(handles.main," fxall "))
480  r = getappdata(handles.main," r ");
481  d = r.FullModel.Data;
482  sn = d.TrainingData;
483  atdidx = r.FullModel.Approx.TrainDataSelector.LastUsed;
484 
485  fxall = zeros(size(sn)-[3 0]);
486  fxall(:,atdidx) = d.ApproxfValues;
487  [tocomp, pos] = setdiff(1:size(sn,2),atdidx);
488  if ~isempty(tocomp)
489  fxall(:,pos) = r.FullModel.System.f.evaluate(sn(4:end,tocomp),sn(3,tocomp),...
490  d.getParams(sn(1,tocomp)));
491  end
492  setappdata(handles.main," fxall ",fxall);
493 end
494 plotCurrent(handles)
495 
496 }
497 
498 function ApproxVisualizer>chkCenters_Callback(hObject,eventdata,handles) {
499 plotCurrentFxi(handles)
500 
501 }
502 
503 function ApproxVisualizer>btnShowErr_Callback(hObject,eventdata,handles) {
504 h = handles;
505 if get(h.rbS," Value ") == 1
506  if get(h.chkFullData," Value ") == 1
507  showErrors(h, " Full training data ");
508  else
509  showErrors(h, " Approx training data ");
510  end
511 else
512  showErrors(h, " Current trajectory ");
513 end
514 
515 }
516 
517 function ApproxVisualizer>showErrors(h,name) {
518 r = getappdata(h.main," r ");
519 m = r.FullModel;
520 
521 if get(h.rbS," Value ") == 1 && get(h.chkGlobal," Value ") == 1
522  name = [name " [global] "];
523  d = m.Data;
524  if get(h.chkFullData," Value ")
525  f = getappdata(h.main," fxall ");
526  sn = d.TrainingData;
527  else
528  f = d.ApproxfValues;
529  sn = d.ApproxTrainData;
530  end
531  xi = sn(4:end,:);
532  ti = sn(3,:);
533  mui = d.getParams(sn(1,:));
534 else
535  ti = getappdata(h.main," ti ");
536  xi = getappdata(h.main," xi ");
537  mui = getappdata(h.main," mui ");
538  f = getappdata(h.main," fx ");
539 end
540 
541 fa = m.Approx.evaluate(xi,ti,mui);
542 if ~isempty(m.SpaceReducer)
543  fap = r.V*r.System.f.evaluate(r.W^t*xi,ti,mui);
544 else
545  fap = r.System.f.evaluate(xi,ti,mui);
546 end
547 
548 if get(h.rbLinf," Value ")
549  errfun = @getLInftyErr;
550  fun = " Linf ";
551 elseif get(h.rbL2," Value ")
552  errfun = @getL2Err;
553  fun = " L2 ";
554 end
555 figure;
556 [v,i,e] = errfun(f,fa);
557 plotit(e,1)
558 title(sprintf(" %s\nFull vs full approx %s-errors\nMax: %5.3e, mean: %5.3e ",name,fun,v,mean(e)));
559 
560 [v,i,e] = errfun(f,fap);
561 plotit(e,2)
562 title(sprintf(" %s\nFull vs projected approx %s-errors\nMax: %5.3e, mean: %5.3e ",name,fun,v,mean(e)));
563 
564 [v,i,e] = errfun(fa,fap);
565 plotit(e,3)
566 title(sprintf(" %s\nFull approx vs projected approx %s-errors\nMax: %5.3e, mean: %5.3e ",name,fun,v,mean(e)));
567 
568 }
569 
570 function ApproxVisualizer>plotit(e,nr) {
571 subplot(1,3,nr);
572 /* plot(e,'r.','MarkerSize',.5); */
573 plot(e," r ");
574 axis tight;
575 
576 }
577 
578 function [val , idx , errs ] = ApproxVisualizer>getLInftyErr(a,b) {
579 errs = max(abs(a-b),[],1);
580 [val, idx] = max(errs);
581 
582 }
583 
584 function [val , idx , errs ] = ApproxVisualizer>getL2Err(a,b) {
585 errs = sqrt(sum((a-b).^2));
586 [val, idx] = max(errs);
587 
588 
589 /* --- Executes on button press in btnSave. */
590 }
591 
592 function ApproxVisualizer>btnSave_Callback(hObject,eventdata,handles) {
593 Utils.saveAxes(handles.image, );
594 
595 
596 /* --- Executes on slider movement. */
597 }
598 
599 function ApproxVisualizer>islideF_Callback(hObject,eventdata,handles) {
600 
601 /* Hints: get(hObject,'Value') returns position of slider
602  * get(hObject,'Min') and get(hObject,'Max') to determine range of slider */
603 setappdata(handles.main," inidx ",round(get(hObject," Value ")));
604 plotCurrent(handles);
605 
606 /* --- Executes during object creation, after setting all properties. */
607 }
608 
609 function ApproxVisualizer>islideF_CreateFcn(hObject,eventdata,handles) {
610 
611 /* Hint: slider controls usually have a light gray background. */
612 if isequal(get(hObject," BackgroundColor "), get(0," defaultUicontrolBackgroundColor "))
613  set(hObject," BackgroundColor ",[.9 .9 .9]);
614 end
615 
616 }
617 
Collection of generally useful functions.
Definition: Utils.m:17
function ApproxVisualizer>islideF_Callback(hObject, eventdata, handles)
function ApproxVisualizer>currentToGUI(r, h)
function ApproxVisualizer>rbU_Callback(hObject, eventdata, h)
static function idx = findVecInMatrix(A, b)
Finds column vectors inside a matrix.
Definition: Utils.m:259
function ApproxVisualizer>fslide_Callback(hObject, eventdata, handles)
function [ val , idx , errs ] = ApproxVisualizer>getL2Err(a, b)
function ApproxVisualizer>chkCenters_Callback(hObject, eventdata, handles)
function ApproxVisualizer>ApproxVisualizer_OpeningFcn(hObject, eventdata, handles, varargin)
function ApproxVisualizer>chkFullData_Callback(hObject, eventdata, handles)
function ApproxVisualizer>plotCurrent(h)
function ApproxVisualizer>plotCurrentFxi(h)
function ApproxVisualizer>islideS_CreateFcn(hObject, eventdata, handles)
function ApproxVisualizer>showErrors(h, name)
function ApproxVisualizer>modelToGUI(r, h)
A boolean value.
function varargout = ApproxVisualizer>ApproxVisualizer_OutputFcn(hObject, eventdata, handles)
function ApproxVisualizer>islideF_CreateFcn(hObject, eventdata, handles)
A variable number of input arguments.
function ApproxVisualizer>pslide_CreateFcn(hObject, eventdata, handles)
function ApproxVisualizer>pslide_Callback(hObject, eventdata, handles)
function ApproxVisualizer>updateUserParam(h)
function ApproxVisualizer>islideS_Callback(hObject, eventdata, handles)
function ApproxVisualizer>plotit(e, nr)
function ApproxVisualizer>btnSave_Callback(hObject, eventdata, handles)
function ApproxVisualizer>fslide_CreateFcn(hObject, eventdata, handles)
function ApproxVisualizer>rbS_Callback(hObject, eventdata, h)
function varargout = ApproxVisualizer(varargin)
APPROXVISUALIZER M-file for ApproxVisualizer.fig APPROXVISUALIZER, by itself, creates a new APPROXVIS...
static function saveAxes(handle ax, varargin)
Convenience function. Allows to save a custom axes instead of a whole figure which allows to drop any...
Definition: Utils.m:437
function ApproxVisualizer>btnShowErr_Callback(hObject, eventdata, handles)
A variable number of output arguments.
function [ val , idx , errs ] = ApproxVisualizer>getLInftyErr(a, b)