function[]=res_nelin_rovnic

% Program pro demonstraci metod reseni nelinearnich rovnic.
%
% Uzivatel dle zvolene metody ze seznamu zada funkci s jednou neznamou,
% interval, na kterem chce danou funkci vysetrovat, popr. bod(y) pocatecni
% iterace. V pripade proste iteracni, popr. Steffensenova metody zada
% uzivatel misto funkce hodnotu konstanty.
%
% Data lze zadavat pouze do "klikatelnych" poli. Je treba zadavat funkce
% vyhovujici pocatecnim podminkam zvolenych metod. Ne vzdy musi zvolena
% metoda konvergovat.

fixphndl=figure( ...
	'Visible','on', ...
    'Toolbar', 'figure', ...
	'Tag','fixp', ...
	'Name','Reseni nelinearnich rovnic', ...
    'NumberTitle','off');

axes( ...
        'Units','normalized', ...
        'Position',[0.08 0.08 0.62 0.85]);

% Menu panel
uicontrol( ...
    'Style','frame', ...
    'Units','normalized', ...
    'FontSize', 10, ...
    'Position',[0.72, 0, .3, 1], ...
    'BackgroundColor',[0.5 0.5 0.5]);

% Pole pro vyber metody   
uicontrol( ...
    'Style','text', ...
    'Units','normalized', ...
    'FontSize', 10, ...
    'Position',[0.721, 0.812, 0.1, 0.03], ...
    'BackgroundColor',[0.5, 0.5, 0.5], ...
    'String','Vyberte metodu: ');

uicontrol('Style', 'popup',...
    'Units','normalized', ...
    'FontSize', 10, ...
    'String', 'Metoda bisekce|Metoda regula falsi|Metoda proste iterace|Steffensenova metoda|Newtonova metoda|Quasi-Newtonova metoda|Metoda secen',...
    'Position', [0.83, 0.75, .16, 0.1],...
    'Callback', @vybranaMetoda);

% Pole pro funkci
uicontrol( ...
    'Style','text', ...
    'Units','normalized', ...
    'FontSize', 10, ...
    'Position',[0.721, 0.722, 0.1, 0.03], ...
    'BackgroundColor',[0.5, 0.5, 0.5], ...
    'String','Zadejte funkci: ');

fHndl = uicontrol( ...
    'Style','edit', ...
    'String',char([]),...
    'Units','normalized', ...
    'FontSize', 10, ...
    'Enable', 'Off', ...
    'UserData',0.1,...
    'Tag', 'fHndl', ...
    'Position',[0.83, 0.71, 0.16, 0.05], ...
    'BackgroundColor',[1 1 1]);

% Pole pro zadani intervalu
uicontrol( ...
    'Style', 'text', ...
    'Units','normalized', ...
    'FontSize', 10, ...
    'Position',[0.721, 0.63, 0.1, 0.03], ...
    'BackgroundColor',[0.5, 0.5, 0.5], ...
    'String','Zadejte interval: ');

% Pole pro pocatek intervalu
uicontrol( ...
    'Style', 'text', ...
    'Units','normalized', ...
    'FontSize', 10, ...
    'Position',[0.823, 0.63, 0.03, 0.03], ...
    'BackgroundColor',[0.5, 0.5, 0.5], ...
    'String','od ');
    
aHndl = uicontrol( ...
    'Style','edit', ...
    'String',char([]),...
    'Units','normalized', ...
    'FontSize', 10, ...
    'Enable', 'Off', ...
    'UserData',0.1,...
    'Tag', 'aHndl', ...
    'Position',[0.85, 0.62, 0.05, 0.05], ...
    'BackgroundColor',[1 1 1]);

% Pole pro konec interval
uicontrol( ...
    'Style', 'text', ...
    'Units','normalized', ...
    'FontSize', 10, ...
    'Position',[0.91, 0.63, 0.015, 0.03], ...
    'BackgroundColor',[0.5, 0.5, 0.5], ...
    'String','do ');
    
bHndl = uicontrol( ...
    'Style','edit', ...
    'String',char([]),...
    'Units','normalized', ...
    'FontSize', 10, ...
    'Enable', 'Off', ...
    'UserData',0.1,...
    'Tag', 'bHndl', ...    
    'Position',[0.93, 0.62, 0.05, 0.05], ...
    'BackgroundColor',[1 1 1]);

% Pole pro pocatecni iterac(i/e)
uicontrol('Style','text', ...
    'Units','normalized', ...
    'FontSize', 10, ...
    'BackgroundColor',[0.5, 0.5, 0.5], ...
    'Position',[0.725, 0.49, 0.1, 0.065], ...
    'String','Zadejte pocatecni iterac(i/e): ');

% Pole pro prvni iteraci
x0Hndl = uicontrol('Style','edit', ...
    'Units','normalized', ...
    'Tag', 'x0Hndl', ...
    'String',char([]), ...
    'UserData',0.1, ...
    'FontSize', 10, ...
    'Enable', 'Off', ...
    'BackgroundColor',[1, 1, 1], ...
    'Position',[0.83, 0.53, 0.16, 0.05]);

% Pole pro druhou iteraci
x0Hndl2 = uicontrol('Style','edit', ...
    'Units','normalized', ...
    'Tag', 'x0Hndl2', ...
    'String',char([]), ...
    'UserData',0.1, ...
    'FontSize', 10, ...
    'Enable', 'Off', ...
    'BackgroundColor',[1, 1, 1], ...
    'Position',[0.83, 0.47, 0.16, 0.05]);

% Pole pro konstantu
uicontrol( ...
    'Style','text', ...
    'Units','normalized', ...
    'FontSize', 10, ...
    'Position',[0.725, 0.36, 0.1, 0.065], ...
    'BackgroundColor',[0.5, 0.5, 0.5], ...
    'String','Zadejte konstantu: ');

kHndl = uicontrol( ...
    'Style','edit', ...
    'String',char([]),...
    'Units','normalized', ...
    'FontSize', 10, ...
    'Enable', 'Off', ...
    'UserData',0.1,...
    'Tag', 'kHndl', ...
    'Position',[0.83, 0.38, 0.16, 0.05], ...
    'BackgroundColor',[1 1 1]);

% Stop tlacitko
callstopStr1='set(gcbo,''UserData'',1); ';
stopHndl=uicontrol( ...
    'Style','push', ...
    'FontSize', 10, ...
    'Units','normalized', ...
    'Position',[0.91,.15,.08,0.05], ...
    'TooltipString','Stops iterations', ...
    'Tag','StopHndl', ...
    'String','Stop', ...
    'UserData',0, ...
    'Enable','off',...
    'Callback',callstopStr1);

% Cancel tlacitko
closeStr='set(gcf,''CloseRequestFcn'',''closereq'');delete(gcf);';
uicontrol('Style', 'push', 'Units', 'normalized', ...
    'FontUnits', 'normalized',...
    'Position', [0.88, 0.03, 0.11, 0.07], ...
    'Callback', closeStr, ...
    'BackgroundColor', [1, 0, 0], ...
    'String', 'Cancel'); 

set(gcf,'Units','normalized','Position',[0.1 0.15 0.8 0.7]);
       
end %function


function vybranaMetoda(hObj, event)
    % Funkce pro vypocet jednotlivych metod
    % Bude zavolana po vybrani metody ze seznamu
    
    val = get(hObj,'Value');
    ziskejPocatekIntervalu='ah=findobj(''Tag'',''aHndl'');as=get(ah,''String'');a=eval(as);';
    ziskejKonecIntervalu='bh=findobj(''Tag'',''bHndl'');bs=get(bh,''String'');b=eval(bs);';
    ziskejFunkci='fh=findobj(''Tag'',''fHndl'');fs=get(fh,''String'');f=sym(fs);y=subs(f,a:0.01:b);x=a:0.01:b;';
    
    x0h=findobj('Tag','x0Hndl');
    x0h2=findobj('Tag','x0Hndl2');
    fce=findobj('Tag','fHndl');
    a=findobj('Tag','aHndl');
    b=findobj('Tag','bHndl');
    konst=findobj('Tag','kHndl');
    
    set(a,'Enable','On');
    set(b,'Enable','On');
    
    if val <= 2   % Pro metody bez pocatecni iterace
        % Aktivace potrebnych poli
        set(x0h,'Enable','Off');
        set(x0h2,'Enable','Off');
        set(fce,'Enable','On');
        set(konst,'Enable','Off');
        
        if val == 1   % Metoda Bisekce
            vykresliOsy='set(gcbo,''UserData'',1);hold off;plot(x,y);hold on;plot([(a+b)/2],[subs(f,(a+b)/2)],''r*--'');hold on;plot([a,b],[0,0],''k'');';
            
            % Zacne se vykonavat po stisknuti tlacitka GO
            pocitej1='if subs(f,a)*subs(f,b)<0,set(gcbo,''Enable'',''off'');an=a;bn=b;xn=(an+bn)/2;n=0;konec=0;while n<100 & konec~=1,n=n+1;';
            pocitej2='if subs(f,an)*subs(f,xn)<0,bn=xn;xn=(an+bn)/2;elseif subs(f,bn)*subs(f,xn)<0,an=xn;xn=(an+bn)/2;elseif subs(f,xn)==0,konec=1;end;plot([xn],[subs(f,xn)],''r*--'');';
            pocitej3='pause(2);stophndl=findobj(''Tag'',''StopHndl'');set(stophndl,''Enable'',''On'');drawhndl=findobj(''Tag'',''DrawHndl''); set(drawhndl,''Enable'',''Off'');';
            pocitej4='konec=get(stophndl,''UserData'');end;set(stophndl,''Enable'',''Off'');set(stophndl,''UserData'',0); set(drawhndl,''Enable'',''On'');set(gcbo,''Enable'',''On'');';
            ziskejKonecnouHodnotu='disp([''Konecna hodnota x je: '',num2str(xn),'''']), else disp([''Neni splnena podminka f(a)*f(b) < 0'']), end;';

            runHndl=uicontrol( ...    % Vytvoreni tlacitka GO
                'Style','push', ...
                'Units','normalized', ...
                'FontSize', 12, ...
                'Tag','RunHndl', ...
                'TooltipString','kresli po krocich', ...
                'FontUnits','normalized',...
                'Position',[0.82,.15,.08,0.05], ...
                'String','GO', ...
                'Enable', 'On', ...
                'Callback',[ziskejFunkci,pocitej1,pocitej2,pocitej3,pocitej4,ziskejKonecnouHodnotu]);

            DrawHndl=uicontrol( ...     % Vytvoreni tlacitka Draw
                'Style', 'push', ...
                'Units', 'normalized', ...
                'FontSize', 12, ...
                'FontUnits', 'normalized', ...
                'Position', [0.73, 0.15, 0.08, 0.05], ...
                'TooltipString', 'vykresli funkci', ...
                'Tag', 'DrawHndl', ...   
                'String', 'Draw', ...
                'UserData', 0, ...
                'Enable', 'on', ...
                'Callback', [ziskejPocatekIntervalu,ziskejKonecIntervalu,ziskejFunkci,vykresliOsy]);


        elseif val == 2   % Metoda Regula falsi            
            vykresliOsy='set(gcbo,''UserData'',1);hold off;plot(x,y);hold on;plot([a,a,b,b],[0,subs(f,a),subs(f,b),0],''r*--'');hold on;plot([a,b],[0,0],''k'');';
            
            % Zacne se vykonavat po stisknuti tlacitka GO
            pocitej1='if subs(f,a)*subs(f,b)<0,set(gcbo,''Enable'',''off'');x0=a;x1=b;n=0;konec=0;while n<100 & konec~=1,n=n+1; xn=x1-((x1-x0)/(subs(f,x1)-subs(f,x0)))*subs(f,x1);';
            pocitej2='if subs(f,x0)*subs(f,xn)<0,x1=xn;elseif subs(f,x1)*subs(f,xn)<0,x0=xn;end; plot([x1,x1,x0,x0],[0,subs(f,x1),subs(f,x0),0],''r*--'');';
            pocitej3='pause(2);stophndl=findobj(''Tag'',''StopHndl'');set(stophndl,''Enable'',''On'');drawhndl=findobj(''Tag'',''DrawHndl''); set(drawhndl,''Enable'',''Off'');';
            pocitej4='konec=get(stophndl,''UserData'');end;set(stophndl,''Enable'',''Off'');set(stophndl,''UserData'',0); set(drawhndl,''Enable'',''On'');set(gcbo,''Enable'',''On'');';
            ziskejKonecnouHodnotu='disp([''Konecna hodnota x je: '',num2str(xn),'''']),else disp([''Neni splnena podminka f(a)*f(b) < 0'']), end;';

            runHndl=uicontrol( ...    % Vytvoreni tlacitka GO
                'Style','push', ...
                'Units','normalized', ...
                'FontSize', 12, ...
                'Tag','RunHndl', ...
                'TooltipString','kresli po krocich', ...
                'FontUnits','normalized',...
                'Position',[0.82,.15,.08,0.05], ...
                'String','GO', ...
                'Enable', 'On', ...
                'Callback',[ziskejFunkci,pocitej1,pocitej2,pocitej3,pocitej4,ziskejKonecnouHodnotu]);

            DrawHndl=uicontrol( ...    % Vytvoreni tlacitka Draw
                'Style', 'push', ...
                'Units', 'normalized', ...
                'FontSize', 12, ...
                'FontUnits', 'normalized', ...
                'Position', [0.73, 0.15, 0.08, 0.05], ...
                'TooltipString', 'vykresli funkci', ...
                'Tag', 'DrawHndl', ...   
                'String', 'Draw', ...
                'UserData', 0, ...
                'Enable', 'on', ...
                'Callback', [ziskejPocatekIntervalu,ziskejKonecIntervalu,ziskejFunkci,vykresliOsy]);
        end
        
    elseif (val >= 3) && (val <= 6)  % Pro metody s 1 pocatecni iteraci
        % Aktivace potrebnych poli
        set(x0h,'Enable','On');
        set(x0h2,'Enable','Off');
        vykresliOsy='set(gcbo,''UserData'',1);hold off;plot(x,y);hold on;plot([x0,x0],[0,subs(f,x0)],''r*--'');hold on;plot([a,b],[0,0],''k'');';
        ziskejPocatecniIteraci='x0h=findobj(''Tag'',''x0Hndl'');x0s=get(x0h,''String'');x0=eval(x0s);set(x0h,''Userdata'',x0);';  
                
        if val == 3   % prosta iteracni
            % Vykresluje se iteracni funkce k^(-x), kde k je konstanta
            % zadana uzivatelem a x promenna zadaneho intervalu.
            
            % Aktivace potrebnych poli
            set(fce,'Enable','Off');
            set(konst,'Enable','On');            
            ziskejKonstantu='kh=findobj(''Tag'',''kHndl'');ks=get(kh,''String'');k=eval(ks);set(kh,''Userdata'',k);x=a:0.01:b;y=k.^(-x);';
            vykresliOsyPrimku='set(gcbo,''UserData'',1);hold off;plot(x,y,x,x);hold on;plot([x0,x0],[0,x0],''r*--'');hold on;plot([a,b],[0,0],''k'')';
            
            % Zacne se vykonavat po stisknuti tlacitka GO
            pocitej1='set(gcbo,''Enable'',''off'');xn=x0;n=0;konec=0;while n<100 & konec~=1,n=n+1;xo=xn; xn=k^(-xo);plot([xo,xo,xn],[xo,xn,xn],''r*--'');';
            pocitej2='pause(2);stophndl=findobj(''Tag'',''StopHndl'');set(stophndl,''Enable'',''On'');drawhndl=findobj(''Tag'',''DrawHndl''); set(drawhndl,''Enable'',''Off'');';
            pocitej3='konec=get(stophndl,''UserData'');end;set(stophndl,''Enable'',''Off'');set(stophndl,''UserData'',0); set(drawhndl,''Enable'',''On'');set(gcbo,''Enable'',''On'');';
            ziskejKonecnouHodnotu='disp([''Konecna hodnota x je: '',num2str(xn),'''']);';
            
            runHndl=uicontrol( ...    % Vytvoreni tlacitka GO
                'Style','push', ...
                'Units','normalized', ...
                'FontSize', 12, ...
                'Tag','RunHndl', ...
                'TooltipString','kresli po krocich', ...
                'FontUnits','normalized',...
                'Position',[0.82,.15,.08,0.05], ...
                'String','GO', ...
                'Enable', 'On', ...
                'Callback',[ziskejPocatecniIteraci,ziskejKonstantu,pocitej1,pocitej2,pocitej3,ziskejKonecnouHodnotu]);

            
            DrawHndl=uicontrol( ...    % Vytvoreni tlacitka Draw
                'Style', 'push', ...
                'Units', 'normalized', ...
                'FontSize', 12, ...
                'FontUnits', 'normalized', ...
                'Position', [0.73, 0.15, 0.08, 0.05], ...
                'TooltipString', 'vykresli funkci', ...
                'Tag', 'DrawHndl', ...   
                'String', 'Draw', ...
                'UserData', 0, ...
                'Enable', 'on', ...
                'Callback', [ziskejPocatekIntervalu,ziskejKonecIntervalu,ziskejPocatecniIteraci,ziskejKonstantu,vykresliOsyPrimku]);
            
        elseif val == 4   % Steffensenova metoda
            % Vykresluje se iteracni funkce k^(-x), kde k je konstanta
            % zadana uzivatelem a x promenna zadaneho intervalu.
                
            % Aktivace potrebnych poli
            set(fce,'Enable','Off');
            set(konst,'Enable','On');            
            ziskejKonstantu='kh=findobj(''Tag'',''kHndl'');ks=get(kh,''String'');k=eval(ks);set(kh,''Userdata'',k);x=a:0.01:b;y=k.^(-x);f=inline(''k^(-x)'',''k'',''x'');';
            vykresliOsyPrimku='set(gcbo,''UserData'',1);hold off;plot(x,y,x,x);hold on;plot([x0,x0,x0],[0,x0,f(k,x0)],''r*--'');hold on;plot([a,b],[0,0],''k'')';

            % Zacne se vykonavat po stisknuti tlacitka GO
            pocitej1='set(gcbo,''Enable'',''off'');xn=x0;y0=f(k,x0);z0=f(k,y0);n=0;konec=0;while n<100 & konec~=1,n=n+1;x0=xn;y0=f(k,x0);z0=f(k,y0);xn=x0-((y0-x0).^2)/(z0-2.*y0+x0);';
            pocitej2='plot([y0,y0,y0],[0,y0,f(k,y0)],''r*--'');hold on;plot([z0,z0,z0],[0,z0,f(k,z0)],''r*--'');hold on;plot([x0,y0],[f(k,x0),y0],''r*--'');hold on; plot([z0,y0],[z0,f(k,y0)],''r*--'');pause(2);hold on; plot([xn,xn,xn],[0,xn,f(k,xn)],''r*--'');';
            pocitej3='pause(2);stophndl=findobj(''Tag'',''StopHndl'');set(stophndl,''Enable'',''On'');drawhndl=findobj(''Tag'',''DrawHndl''); set(drawhndl,''Enable'',''Off'');';
            pocitej4='konec=get(stophndl,''UserData'');end;set(stophndl,''Enable'',''Off'');set(stophndl,''UserData'',0); set(drawhndl,''Enable'',''On'');set(gcbo,''Enable'',''On'');';
            ziskejKonecnouHodnotu='disp([''Konecna hodnota x je: '',num2str(xn),'''']);';
            
            runHndl=uicontrol( ...   % Vytvoreni tlacitka GO
                'Style','push', ...
                'Units','normalized', ...
                'FontSize', 12, ...
                'Tag','RunHndl', ...
                'TooltipString','kresli po krocich', ...
                'FontUnits','normalized',...
                'Position',[0.82,.15,.08,0.05], ...
                'String','GO', ...
                'Enable', 'On', ...
                'Callback',[ziskejPocatecniIteraci,ziskejKonstantu,pocitej1,pocitej2,pocitej3,pocitej4,ziskejKonecnouHodnotu]);

            DrawHndl=uicontrol( ...    % Vytvoreni tlacitka Draw
                'Style', 'push', ...
                'Units', 'normalized', ...
                'FontSize', 12, ...
                'FontUnits', 'normalized', ...
                'Position', [0.73, 0.15, 0.08, 0.05], ...
                'TooltipString', 'vykresli funkci', ...
                'Tag', 'DrawHndl', ...   
                'String', 'Draw', ...
                'UserData', 0, ...
                'Enable', 'on', ...
                'Callback', [ziskejPocatekIntervalu,ziskejKonecIntervalu,ziskejPocatecniIteraci,ziskejKonstantu,vykresliOsyPrimku]);
            
        elseif val == 5  % Newtonova metoda
            % Aktivace potrebnych poli
            ziskejDerivaciFunkce='df=diff(f);';
            set(fce,'Enable','On');
            set(konst,'Enable','Off');
            
            % Zacne se vykonavat po stisknuti tlacitka GO
            pocitej1='if subs(f,a)*subs(f,b)<0,set(gcbo,''Enable'',''off'');xn=x0;n=0;konec=0;while n<100 & konec~=1,n=n+1;x0=xn; xn=x0-(subs(f,x0)/subs(df,x0));plot([x0,xn,xn],[subs(f,x0),0,subs(f,xn)],''r*--'');';
            pocitej2='pause(2);stophndl=findobj(''Tag'',''StopHndl'');set(stophndl,''Enable'',''On'');drawhndl=findobj(''Tag'',''DrawHndl''); set(drawhndl,''Enable'',''Off'');';
            pocitej3='konec=get(stophndl,''UserData'');end;set(stophndl,''Enable'',''Off'');set(stophndl,''UserData'',0); set(drawhndl,''Enable'',''On'');set(gcbo,''Enable'',''On'');';
            ziskejKonecnouHodnotu='disp([''Konecna hodnota x je: '',num2str(xn),'''']),else disp([''Neni splnena podminka f(a)*f(b) < 0'']), end;';
 
            runHndl=uicontrol( ...     % Vytvoreni tlacitka GO
                'Style','push', ...
                'Units','normalized', ...
                'FontSize', 12, ...
                'Tag','RunHndl', ...
                'TooltipString','kresli po krocich', ...
                'FontUnits','normalized',...
                'Position',[0.82,.15,.08,0.05], ...
                'String','GO', ...
                'Enable', 'On', ...
                'Callback',[ziskejPocatecniIteraci,ziskejFunkci,ziskejDerivaciFunkce,pocitej1,pocitej2,pocitej3,ziskejKonecnouHodnotu]);

            DrawHndl=uicontrol( ...    % Vytvoreni tlacitka Draw
                'Style', 'push', ...
                'Units', 'normalized', ...
                'FontSize', 12, ...
                'FontUnits', 'normalized', ...
                'Position', [0.73, 0.15, 0.08, 0.05], ...
                'TooltipString', 'vykresli funkci', ...
                'Tag', 'DrawHndl', ...   
                'String', 'Draw', ...
                'UserData', 0, ...
                'Enable', 'on', ...
                'Callback', [ziskejPocatekIntervalu,ziskejKonecIntervalu,ziskejPocatecniIteraci,ziskejFunkci,vykresliOsy]);
  
        elseif val == 6   % Quasi Newtonova metoda
            % Aktivace potrebnych poli
            set(fce,'Enable','On');
            set(konst,'Enable','Off');
            
            % Zacne se vykonavat po stisknuti tlacitka GO
            pocitej1='if subs(f,a)*subs(f,b)<0,set(gcbo,''Enable'',''off'');xn=x0;n=0;konec=0;while n<100 & konec~=1,n=n+1;x0=xn; xn=x0+(subs(f,x0)^2/(subs(f,x0)-subs(f,x0+subs(f,x0))));plot([x0,xn,xn],[subs(f,x0),0,subs(f,xn)],''r*--'');';
            pocitej2='pause(2);stophndl=findobj(''Tag'',''StopHndl'');set(stophndl,''Enable'',''On'');drawhndl=findobj(''Tag'',''DrawHndl''); set(drawhndl,''Enable'',''Off'');';
            pocitej3='konec=get(stophndl,''UserData'');end;set(stophndl,''Enable'',''Off'');set(stophndl,''UserData'',0); set(drawhndl,''Enable'',''On'');set(gcbo,''Enable'',''On'');';
            ziskejKonecnouHodnotu='disp([''Konecna hodnota x je: '',num2str(xn),'''']),else disp([''Neni splnena podminka f(a)*f(b) < 0'']), end;';

            runHndl=uicontrol( ...    % Vytvoreni tlacitka GO
                'Style','push', ...
                'Units','normalized', ...
                'FontSize', 12, ...
                'Tag','RunHndl', ...
                'TooltipString','kresli po krocich', ...
                'FontUnits','normalized',...
                'Position',[0.82,.15,.08,0.05], ...
                'String','GO', ...
                'Enable', 'On', ...
                'Callback',[ziskejPocatecniIteraci,ziskejFunkci,pocitej1,pocitej2,pocitej3,ziskejKonecnouHodnotu]);
      
            DrawHndl=uicontrol( ...    % Vytvoreni tlacitka Draw
                'Style', 'push', ...
                'Units', 'normalized', ...
                'FontSize', 12, ...
                'FontUnits', 'normalized', ...
                'Position', [0.73, 0.15, 0.08, 0.05], ...
                'TooltipString', 'vykresli funkci', ...
                'Tag', 'DrawHndl', ...   
                'String', 'Draw', ...
                'UserData', 0, ...
                'Enable', 'on', ...
                'Callback', [ziskejPocatekIntervalu,ziskejKonecIntervalu,ziskejPocatecniIteraci,ziskejFunkci,vykresliOsy]);
        end
        
    elseif val == 7   % Metoda Secen
        % Aktivace potrebnych poli
        set(fce,'Enable','On');
        set(x0h,'Enable','On');
        set(x0h2,'Enable','On');
        set(konst,'Enable','Off');
        
        vykresliOsy='set(gcbo,''UserData'',1);hold off;plot(x,y);hold on;plot([x0,x0],[0,subs(f,x0)],''r*--'');hold on;plot([x1,x1],[0,subs(f,x1)],''r*--'');hold on;plot([a,b],[0,0],''k'');';
        ziskejPocatecniIteraci='x0h=findobj(''Tag'',''x0Hndl'');x0s=get(x0h,''String'');x0=eval(x0s);set(x0h,''Userdata'',x0);';     
        ziskejPocatecniIteraci2='x0h2=findobj(''Tag'',''x0Hndl2'');x0s2=get(x0h2,''String'');x1=eval(x0s2);set(x0h2,''Userdata'',x1);';  

        % Zacne se vykonavat po stisknuti tlacitka GO
        pocitej1='if subs(f,a)*subs(f,b)<0,set(gcbo,''Enable'',''off'');xn=x1;x1=x0;n=0;konec=0;while n<100 & konec~=1,n=n+1;x0=x1;x1=xn;xn=x1-((x1-x0)/(subs(f,x1)-subs(f,x0)))*subs(f,x1); plot([x0,x1],[subs(f,x0),subs(f,x1)],''r*--'');hold on;pause(2);plot([xn,xn],[0,subs(f,xn)],''r*--'');';
        pocitej2='pause(2);stophndl=findobj(''Tag'',''StopHndl'');set(stophndl,''Enable'',''On'');drawhndl=findobj(''Tag'',''DrawHndl''); set(drawhndl,''Enable'',''Off'');';
        pocitej3='konec=get(stophndl,''UserData'');end;set(stophndl,''Enable'',''Off'');set(stophndl,''UserData'',0); set(drawhndl,''Enable'',''On'');set(gcbo,''Enable'',''On'');';
        ziskejKonecnouHodnotu='disp([''Konecna hodnota x je: '',num2str(xn),'''']),else disp([''Neni splnena podminka f(a)*f(b) < 0'']), end;';
    
        runHndl=uicontrol( ...    % Vytvoreni tlacitka GO
            'Style','push', ...
            'Units','normalized', ...
            'FontSize', 12, ...
            'Tag','RunHndl', ...
            'TooltipString','kresli po krocich', ...
            'FontUnits','normalized',...
            'Position',[0.82,.15,.08,0.05], ...
            'String','GO', ...
            'Enable', 'On', ...
            'Callback',[ziskejPocatecniIteraci,ziskejPocatecniIteraci2,ziskejFunkci,pocitej1,pocitej2,pocitej3,ziskejKonecnouHodnotu]);
            
        DrawHndl=uicontrol( ...    % Vytvoreni tlacitka Draw
            'Style', 'push', ...
            'Units', 'normalized', ...
            'FontSize', 12, ...
            'FontUnits', 'normalized', ...
            'Position', [0.73, 0.15, 0.08, 0.05], ...
            'TooltipString', 'vykresli funkci', ...
            'Tag', 'DrawHndl', ...   
            'String', 'Draw', ...
            'UserData', 0, ...
            'Enable', 'on', ...
            'Callback', [ziskejPocatekIntervalu,ziskejKonecIntervalu,ziskejPocatecniIteraci,ziskejPocatecniIteraci2,ziskejFunkci,vykresliOsy]);
    end   
end