function interpola98(azione)
% CALCOLO NUMERICO 1998/99
%
% Interpolazione di Lagrange
% Migliore approssimazione
% Spline Cubiche
%
% Esempio interfaccia grafica
%
%  
global figN axinterp axerrore axleb edit_n interpola sceltanodi sceltametodo sceltafunzione
global valmetodo valfunzione valnodi 
global baseinput edit_base gradoinput edit_grado
global grado base


if nargin < 1
  azione = 'inizio';
end


if strcmp(azione,'inizio')
   
figN =figure( ...
        'Name','Interpolazione', ...
        'Units','normalized',...
        'Position',[0.05 0.05 0.8 0.8], ...
        'Color',[0.9 0.9 1],...
        'NumberTitle','off', ...
        'Visible','on');
axinterp = axes( ...
        'Parent',figN,...
        'Units','normalized', ...
        'Position',[0.05 0.05 0.50 0.75], ...
        'FontSize',12, ...
        'Visible','on');

axerrore = axes( ...     
        'Parent', figN,...  
        'Units','normalized', ...
        'Position',[0.60 0.05 0.35 0.25], ...
        'Fontsize',8,...        
        'Visible','on');
     
 axleb  = axes( ...    
   'Parent',figN,...
        'Units','normalized', ...
        'Position',[0.60 0.40  0.35 0.25], ...
        'Fontsize',8,...
        'Visible','off');
        
edit_base = uicontrol('Parent',figN, ...
	'Units','normalized', ...
	'BackgroundColor',[1 1 1], ...
	'Position',[0.70 0.60 0.1 0.035], ...
	'String','potenze', ...
   'Style','edit','visible','off'	);

baseinput = uicontrol('Parent',figN, ...
	'Units','normalized', ...
	'BackgroundColor',[0.7 0.8 0.7], ...
	'HorizontalAlignment','right', ...
	'Position',[0.65 0.60 0.045 0.035], ...
	'String','base=', ...
   'Style','text','visible','off');
 
 
edit_grado = uicontrol('Parent',figN, ...
	'Units','normalized', ...
	'BackgroundColor',[1 1 1], ...
	'Position',[0.70 0.50 0.045 0.035], ...
	'String','5', ...
   'Style','edit','visible','off'	);

gradoinput = uicontrol('Parent',figN, ...
	'Units','normalized', ...
	'BackgroundColor',[0.7 0.8 0.7], ...
	'HorizontalAlignment','right', ...
	'Position',[0.65 0.50 0.045 0.035], ...
	'String','grado=', ...
   'Style','text','visible','off');
 

 
frameinput = uicontrol('Parent',figN, ...
	'Units','normalized', ...
	'BackgroundColor',[0.7 0.8 0.7], ...
	'Position',[0.60 0.70 0.395 0.30], ...
	'Style','frame');
        
     
testoinput = uicontrol('Parent',figN, ...
	'Units','normalized', ...
	'BackgroundColor',[0.7 0.8 0.7], ...
	'Position',[0.70 0.95 0.20 0.035], ...
	'String','Dati di input:', ...
	'Style','text');

edit_n = uicontrol('Parent',figN, ...
	'Units','normalized', ...
	'BackgroundColor',[1 1 1], ...
	'Position',[0.70 0.90 0.045 0.035], ...
	'String','10', ...
   'Style','edit'	);

ninput = uicontrol('Parent',figN, ...
	'Units','normalized', ...
	'BackgroundColor',[0.7 0.8 0.7], ...
	'HorizontalAlignment','right', ...
	'Position',[0.65 0.90 0.045 0.035], ...
	'String','n=', ...
   'Style','text');

interpola = uicontrol('Parent',figN, ...
	'Units','normalized', ...
	'Callback','interpola98(''interpola'')', ...
	'Position',[0.845 0.80 0.15 0.045], ...
   'String','INTERPOLA', ...
   'Style','push',...
   'Enable','off');

sceltametodo = uicontrol('Parent',figN, ...
	'Units','normalized', ...
	'BackgroundColor',[0.70 0.70 0.80], ...
	'Callback','interpola98(''sceltametodo'')', ...
	'Max',5, ...
	'Min',1, ...
	'Position',[0.63 0.70 0.25 0.05], ...
   'String',['Metodo                  ';
             'Lagrange                ';
             'Lineare a tratti        ';
             'Minimi Quadrati         ';
             'Spline                  '], ...
	'Style','popupmenu', ...
   'Value',1);

info = uicontrol('Parent',figN, ...
	'Units','normalized', ...
	'BackgroundColor',[0.70 0.70 0.80], ...
	'Callback','interpola98(''info'')', ...
	'Position',[0.9 0.70 0.08 0.047], ...
   'String','INFO');

chiudi = uicontrol('Parent',figN, ...
	'Units','normalized', ...
	'Callback','close(clf)', ...
	'Position',[0.845 0.75 0.08 0.047], ...
   'String','CLOSE');

sceltanodi = uicontrol('Parent',figN, ...
	'Units','normalized', ...
	'BackgroundColor',[0.70 0.70 0.80], ...
	'Callback','interpola98(''sceltanodi'')', ...
	'Max',4, ...
	'Min',1, ...
	'Position',[0.80 0.870 0.17  0.05], ...
   'String',['Nodi        ';
             'Equidistanti';
             'Chebyschev  ';], ...
	'Style','popupmenu', ...
	'Value',1);
sceltafunzione = uicontrol('Parent',figN, ...
	'Units','normalized', ...
	'BackgroundColor',[0.70 0.70 0.80], ...
	'Callback','interpola98(''sceltafunzione'')', ...
	'Max',5, ...
	'Min',1, ...
	'Position',[0.63 0.80 0.17 0.05], ...
   'String',['Funzioni          '; 
             'f=sin(x) - xcos(x)';
             'f=exp(x).*cos(5x) ';
             'f=1./(1+x.^2)     ';
             'f=(x.^2-6x+59).^2 '], ...
	'Style','popupmenu', ...
	'Value',1);
   
  valmetodo    = [];
  valfunzione  = [];
  valnodi      = [];
  grado = [];
  base = [];
  
elseif strcmp(azione,'sceltametodo')
     
    valmetodo=get(sceltametodo,'value');
    if valmetodo == 1
       valmetodo = [];
    else
       valmetodo = valmetodo-1;
    end

 
    if ~(isempty(valfunzione))&~(isempty(valnodi))&~(isempty(valmetodo))
        set(interpola,'enable','on');
    else
        set(interpola,'enable','off');
    end 
    
elseif strcmp(azione,'sceltafunzione')
     
     valfunzione=get(sceltafunzione,'value');
    if valfunzione == 1
       valfunzione = [];
    else
       valfunzione = valfunzione-1;
    end
 
    if ~(isempty(valmetodo))&~(isempty(valnodi))&~(isempty(valfunzione))
        set(interpola,'enable','on');
    else
        set(interpola,'enable','off');
    end  
  
elseif strcmp(azione,'sceltanodi')
     
    valnodi=get(sceltanodi,'value');
    if valnodi == 1
       valnodi = [];
    else
       valnodi = valnodi-1;
    end
 
    if ~(isempty(valmetodo))&~(isempty(valfunzione))&~(isempty(valnodi))
        set(interpola,'enable','on');
    else
        set(interpola,'enable','off');
    end

elseif strcmp(azione,'interpola')
   xnodi=0;
   a=0;
   b=0;
   n = get(edit_n,'string');
   n = str2num(n);
   funz = sprintf('flagr%d',valfunzione);
   if  valfunzione == 1 
      a = -3*pi; b = 3*pi;
   elseif valfunzione==2
      a = 0; b = 10;
   elseif valfunzione==3
      a = -5; b = 5;
   elseif valfunzione==4
      a = -5; b = 10;
   end 
  
   if valnodi==1
        xnodi = linspace(a,b,n);
   elseif valnodi==2
        xnodi = cheby(a,b,n);
   elseif valnodi == 3
        xnodi = chebyexp(a,b,n);
   end
   save interpola98 funz xnodi a b


   if valmetodo==1
   
      set(baseinput,'visible','off')
      set(edit_base,'visible','off')
      set(gradoinput,'visible','off')
      set(edit_grado,'visible','off')
      grafintlagr98(funz,xnodi,a,b)
      set(figN,'WindowButtonDownFcn',' ')
 
      
   elseif valmetodo==2
      axes(axleb)
      cla
      set(axleb,'visible','off')
      set(baseinput,'visible','off')
      set(edit_base,'visible','off')
      set(gradoinput,'visible','off')
      set(edit_grado,'visible','off')
      graflin98(funz,xnodi,a,b)
      set(figN,'WindowButtonDownFcn',' ')
   
   elseif valmetodo == 3
 
     axes(axleb)
     cla
     set(axleb,'visible','off')
     set(baseinput,'visible','on')
     set(edit_base,'visible','on')
     set(gradoinput,'visible','on')
     set(edit_grado,'visible','on')
    
     grado = get(edit_grado,'string');
     grado = str2num(grado);
     base = get(edit_base,'string');
    
     grafminquad98(funz,xnodi,a,b,grado,base)

     set(figN,'WindowButtonDownFcn',' ')
     
   elseif valmetodo == 4
       axes(axleb)
     cla
     set(axleb,'visible','off')
       set(baseinput,'visible','off')
      set(edit_base,'visible','off')
      set(gradoinput,'visible','off')
      set(edit_grado,'visible','off')
      grafspline98(funz,xnodi,a,b)
      set(figN,'WindowButtonDownFcn',' ')
   end


elseif strcmp(azione,'info')
  
   helpwin('interpola98')

end  
