function varargout = hridel(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @hridel_OpeningFcn, ...
                   'gui_OutputFcn',  @hridel_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end

% Inicializační hodnoty
function hridel_OpeningFcn(hObject,  eventdata, handles, varargin)
clc;
global E rho g Omega om u kliknuti U O delka vazba z_l pr w ll obrazek zobrazeni z_text R Det Not kr_ot
E=0;
rho=0;
g=0;
Omega=1;
om=0;
u=1;
kliknuti=0;
U=[];
O=[];
delka=[];
vazba=[];
z_l=[];
pr=[];
w=0;
ll=0;
obrazek=[];
R=[];
Det=[];
Not=[];
kr_ot=[];

% načtení obrázků uložení
u_obr={imread('u1.png') imread('u2.png') imread('u3.png') imread('u4.png')};
u_z=[handles.axes_u1 handles.axes_u2 handles.axes_u3 handles.axes_u4];
for i=1:length(u_obr)
    axes(u_z(i));
    imshow(u_obr{i});
end

% načtení bloku geometrie 
p_obr=imread('part_0.png');
axes(handles.axes_prvek);
imshow(p_obr);

% zobrazovací pás
zobrazeni=[handles.axes_z1  handles.axes_z2  handles.axes_z3  handles.axes_z4  handles.axes_z5  handles.axes_z6...
           handles.axes_z7  handles.axes_z8  handles.axes_z9  handles.axes_z10 handles.axes_z11 handles.axes_z12...
           handles.axes_z13 handles.axes_z14 handles.axes_z15 handles.axes_z16 handles.axes_z17 handles.axes_z18...
           handles.axes_z19 handles.axes_z20 handles.axes_z21 handles.axes_z22 handles.axes_z23 handles.axes_z24...
           handles.axes_z25 handles.axes_z26 handles.axes_z27 handles.axes_z28 handles.axes_z29 handles.axes_z30...
           handles.axes_z31 handles.axes_z32 handles.axes_z33 handles.axes_z34 handles.axes_z35 handles.axes_z36...
           handles.axes_z37 handles.axes_z38 handles.axes_z39 handles.axes_z40];
z_text=[handles.text_z1  handles.text_z2  handles.text_z3  handles.text_z4  handles.text_z5  handles.text_z6...
        handles.text_z7  handles.text_z8  handles.text_z9  handles.text_z10 handles.text_z11 handles.text_z12...
        handles.text_z13 handles.text_z14 handles.text_z15 handles.text_z16 handles.text_z17 handles.text_z18...
        handles.text_z19 handles.text_z20 handles.text_z21 handles.text_z22 handles.text_z23 handles.text_z24...
        handles.text_z25 handles.text_z26 handles.text_z27 handles.text_z28 handles.text_z29 handles.text_z30...
        handles.text_z31 handles.text_z32 handles.text_z33 handles.text_z34 handles.text_z35 handles.text_z36...
        handles.text_z37 handles.text_z38 handles.text_z39 handles.text_z40];

handles.output = hObject;
guidata(hObject, handles);

function varargout = hridel_OutputFcn(hObject, eventdata, handles) 
varargout{1} = handles.output;

% Maže řetězec prvku a vypíná ho
function vypni(edit)
set(edit,'Enable','off','String','');

% Maže řetězec prvku a zneviditelní ho
function zmiz(box)
set(box,'Visible','off','String','');

% Zviditelňuje prvek
function zapni(pole)
set(pole,'Visible','on');

% Reset - nastavení původních hodnot
function push_reset_Callback(hObject, eventdata, handles)
clc;
global E rho g Omega om u kliknuti U O delka vazba z_l pr w ll obrazek zobrazeni z_text R Det Not kr_ot
E=0;
set(handles.edit_young,'String','');
rho=0;
set(handles.edit_rho,'String','');
g=0;
set(handles.checkbox_g,'Value',0);
Omega=1;
om=0;
u=1;
set(handles.radio_u1,'Value',1);
kliknuti=0;
U=[];
O=[];
delka=[];
vazba=[];
z_l=[];
pr=[];
w=0;
ll=0;
obrazek=[];
R=[];
Det=[];
Not=[];
kr_ot=[];
set(handles.checkbox_ko,'Value',0,'Enable','on');
set(handles.text_omega,'Enable','off')
edit=handles.edit_omega;
vypni(edit);
set(handles.push_otacky,'Visible','off');

set(handles.pop_prvek,'Value',1);
axes(handles.axes_prvek);
prvek_obr=imread('part_0.png');
imshow(prvek_obr);
box=[handles.edit_g1 handles.text_g1 handles.edit_g2 handles.text_g2 handles.edit_g3 handles.text_g3...
     handles.edit_g4 handles.text_g4 handles.edit_g5 handles.text_g5 handles.edit_g6 handles.text_g6];
zmiz(box);
set(handles.push_add,'Visible','on','Enable','off');

set(handles.text_zd1,'Visible','off');
set(handles.text_zd2,'Visible','off');
for i=1:length(z_text)
    set(z_text(i),'String','');
end

z_obr=imread('z0.png');
for i=1:length(zobrazeni)
    axes(zobrazeni(i));
    imshow(z_obr);
end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%                Charakteristika hřídele                           %%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Youngův modul E
function edit_young_Callback(hObject, eventdata, handles)
global E
E=str2double(get(hObject,'String'))*1000000;

function edit_young_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end

% Hustota rho
function edit_rho_Callback(hObject, eventdata, handles)
global rho
rho=str2double(get(hObject,'String'));

function edit_rho_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end

% Gravitační zrychlení
function checkbox_g_Callback(hObject, eventdata, handles)
global g
if get(hObject,'Value')==get(hObject,'Max')
   g=9.81;
else
   g=0;
end

% Přidání výpočtu kritických otáček
function checkbox_ko_Callback(hObject, eventdata, handles)
global Omega
if get(hObject,'Value')==get(hObject,'Max')
   set(handles.edit_omega,'Enable','on');
   set(handles.text_omega,'Enable','on');
   set(handles.push_otacky,'Visible','on');
   uiwait(warndlg(sprintf('Rozsah otáček je nutné zadat před zadáváním prvků.\nPo zadání prvků lze pásmo případně zmenšit.\n\nČím větší bude pásmo otáček, tím déle bude trvat výpočet kritických otáček.'),'Varování'));
else
   edit=handles.edit_omega;
   vypni(edit);
   set(handles.text_omega,'Enable','off');
   set(handles.push_otacky,'Visible','off');
   Omega=1;
end

% Nastavení úhlové frekvence pro výpočet kritických otáček
function edit_omega_Callback(hObject, eventdata, handles)
global Omega om
om=str2double(get(hObject,'String'));  % pásmo otáček
OM=(2*pi*om)/6000;                       % převod otáček na ůhlovou frekvenci
OM=ceil(OM)*100+1;                       % zaokrouhlení na 100
Omega=1:100:OM;                          % vektor úhlové rychlosti

function edit_omega_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end

% Index uložení
function ulozeni_SelectionChangeFcn(hObject, eventdata, handles)
global u
if get(handles.radio_u1,'Value')==get(handles.radio_u1,'Max')
    u=1;
elseif get(handles.radio_u2,'Value')==get(handles.radio_u2,'Max')
    u=2;
elseif get(handles.radio_u3,'Value')==get(handles.radio_u3,'Max')
    u=3;
elseif get(handles.radio_u4,'Value')==get(handles.radio_u4,'Max')
    u=4;
end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%                        Geometrie                                 %%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Výběr prvku
function pop_prvek_Callback(hObject, eventdata, handles)
val=get(hObject,'Value');
str=get(hObject,'String');
axes(handles.axes_prvek);
switch str{val}
    case 'Vyberte prvek'
        prvek_obr=imread('part_0.png');
        imshow(prvek_obr);
        box=[handles.edit_g1 handles.text_g1 handles.edit_g2 handles.text_g2 handles.edit_g3 handles.text_g3...
             handles.edit_g4 handles.text_g4 handles.edit_g5 handles.text_g5 handles.edit_g6 handles.text_g6];
        zmiz(box);
        set(handles.push_add,'Enable','off');
    case 'Prvek hřídele'
        prvek_obr=imread('part_1.png');
        imshow(prvek_obr);
        box=[handles.edit_g3 handles.text_g3 handles.edit_g4 handles.text_g4 
             handles.edit_g5 handles.text_g5 handles.edit_g6 handles.text_g6];
        pole=[handles.edit_g1 handles.text_g1 handles.edit_g2 handles.text_g2];
        zmiz(box);
        zapni(pole);
        set(handles.text_g1,'String','Délka L [mm]');
        set(handles.text_g2,'String','Průměr D [mm]');
        set(handles.push_add,'Enable','on');
    case 'Prvek s přídavnou hmotou'
        prvek_obr=imread('part_2.png');
        imshow(prvek_obr); 
        box=[handles.edit_g5 handles.text_g5 handles.edit_g6 handles.text_g6];
        pole=[handles.edit_g1 handles.text_g1 handles.edit_g2 handles.text_g2...
              handles.edit_g3 handles.text_g3 handles.edit_g4 handles.text_g4];
        zmiz(box);
        zapni(pole);
        set(handles.text_g1,'String','Délka L [mm]');
        set(handles.text_g2,'String','Průměr D [mm]');
        set(handles.text_g3,'String','Hmotnost přídavné hmoty m [kg]');
        set(handles.text_g4,'String','Délka přídavné hmoty lm [mm]');
        set(handles.push_add,'Enable','on');
    case 'Skoková změna příčné síly'
        prvek_obr=imread('part_3.png');
        imshow(prvek_obr); 
        box=[handles.edit_g2 handles.text_g2 handles.edit_g3 handles.text_g3 handles.edit_g4 handles.text_g4...
             handles.edit_g5 handles.text_g5 handles.edit_g6 handles.text_g6];
        pole=[handles.edit_g1 handles.text_g1];
        zmiz(box);
        zapni(pole);
        set(handles.text_g1,'String','Příčná síla F [N]');
        set(handles.push_add,'Enable','on');
    case 'Pružná podpora'
        prvek_obr=imread('part_4.png');
        imshow(prvek_obr);   
        box=[handles.edit_g2 handles.text_g2 handles.edit_g3 handles.text_g3 handles.edit_g4 handles.text_g4...
             handles.edit_g5 handles.text_g5 handles.edit_g6 handles.text_g6];
        pole=[handles.edit_g1 handles.text_g1];
        zmiz(box);
        zapni(pole);
        set(handles.text_g1,'String','Tuhost k [N/m]');
        set(handles.push_add,'Enable','on');
    case 'Prvek s magnetickým tahem'
        prvek_obr=imread('part_5.png');
        imshow(prvek_obr);   
        box=[handles.edit_g5 handles.text_g5 handles.edit_g6 handles.text_g6];
        pole=[handles.edit_g1 handles.text_g1 handles.edit_g2 handles.text_g2...
              handles.edit_g3 handles.text_g3 handles.edit_g4 handles.text_g4];
        zmiz(box);
        zapni(pole);
        set(handles.text_g1,'String','Délka L [mm]');
        set(handles.text_g2,'String','Průměr D [mm]');
        set(handles.text_g3,'String','Magnetický tah Cm [N/m]');
        set(handles.text_g4,'String','Počet částí prvku s Cm');
        set(handles.push_add,'Enable','on');
    case 'Prvek s magnetickým tahem a přídavnou hmotou'
        prvek_obr=imread('part_6.png');
        imshow(prvek_obr);
        pole=[handles.edit_g1 handles.text_g1 handles.edit_g2 handles.text_g2 handles.edit_g3 handles.text_g3...
              handles.edit_g4 handles.text_g4 handles.edit_g5 handles.text_g5 handles.edit_g6 handles.text_g6];
        zapni(pole);
        set(handles.text_g1,'String','Délka L [mm]');
        set(handles.text_g2,'String','Průměr D [mm]');
        set(handles.text_g3,'String','Hmotnost přídavné hmoty m [kg]');
        set(handles.text_g4,'String','Délka přídavné hmoty lm [mm]');
        set(handles.text_g5,'String','Magnetický tah Cm [N/m]');
        set(handles.text_g6,'String','Počet částí prvku s Cm');
        set(handles.push_add,'Enable','on');
    case 'Disk'
        prvek_obr=imread('part_7.png');
        imshow(prvek_obr);   
        box=[handles.edit_g3 handles.text_g3 handles.edit_g4 handles.text_g4...
             handles.edit_g5 handles.text_g5 handles.edit_g6 handles.text_g6];
        pole=[handles.edit_g1 handles.text_g1 handles.edit_g2 handles.text_g2];
        zmiz(box);
        zapni(pole);
        set(handles.text_g1,'String','Moment stervačnosti I [kg*m^2]');
        set(handles.text_g2,'String','Hmotnost m [kg]');
        set(handles.push_add,'Enable','on');
    case 'Ložisko'
        prvek_obr=imread('part_8.png');
        imshow(prvek_obr);
        box=[handles.edit_g6 handles.text_g6];
        pole=[handles.edit_g1 handles.text_g1 handles.edit_g2 handles.text_g2 handles.edit_g3 handles.text_g3...
              handles.edit_g4 handles.text_g4 handles.edit_g5 handles.text_g5];
        zmiz(box);
        zapni(pole);
        set(handles.text_g1,'String','Tuhost k [N/m]');
        set(handles.text_g2,'String','Tlumení c [N*s/m]');
        set(handles.text_g3,'String','Hmotnost M [kg]');
        set(handles.text_g4,'String','Tuhost kk [N/m]');
        set(handles.text_g5,'String','Tlumení cc [N*s/m]');
        set(handles.push_add,'Enable','on');
end
guidata(hObject,handles);

function pop_prvek_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end

% Editace geometrie a zatížení jednotlivých prvků
function edit_g1_Callback(hObject, eventdata, handles)
function edit_g1_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end
function edit_g2_Callback(hObject, eventdata, handles)
function edit_g2_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end
function edit_g3_Callback(hObject, eventdata, handles)
function edit_g3_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end
function edit_g4_Callback(hObject, eventdata, handles)
function edit_g4_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end
function edit_g5_Callback(hObject, eventdata, handles)
function edit_g5_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end
function edit_g6_Callback(hObject, eventdata, handles)
function edit_g6_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end

% Přidávání prvků
function push_add_Callback(hObject, eventdata, handles)
global E rho Omega kliknuti U O delka vazba z_l pr zobrazeni z_text
syms EE rrho gg ww

% pořadí prvku
if isempty(kliknuti)
    kliknuti=0;
end
kliknuti=kliknuti+1;
if kliknuti>=40
   uiwait(warndlg('Dosažen maximální počet prvků','Varování'))
   set(handles.push_add,'Visible','off');
end
if kliknuti>20
    set(handles.text_zd1,'Visible','on');
    set(handles.text_zd2,'Visible','on');
elseif kliknuti<=20
    set(handles.text_zd1,'Visible','on');
    set(handles.text_zd2,'Visible','off');
end
if kliknuti>0
    set(handles.push_del,'Enable','on');
    set(handles.checkbox_ko,'Enable','off');
    set(handles.edit_omega,'Enable','off');
    set(handles.text_omega,'Enable','off');
end
i=kliknuti;

% tvorba matic
val=get(handles.pop_prvek,'Value');
str=get(handles.pop_prvek,'String');
switch str{val}
    case 'Prvek hřídele'
        l=str2double(get(handles.edit_g1,'String'))/1000;
        d=str2double(get(handles.edit_g2,'String'))/1000;
        J=(pi*d^4)/64;
        q=((pi*d^2)/4)*rrho*gg;
        U{i}=[1  l  -((l^2)/(2*EE*J)) -((l^3)/(6*EE*J))  -((q*l^4)/(24*EE*J))
              0  1  -(l/(EE*J))       -((l^2)/(2*EE*J))  -((q*l^3)/(6*EE*J))
              0  0    1                  l               -((q*l^2)/2)
              0  0    0                  1               -((q*l))
              0  0    0                  0                    1 ];
        delka{i}={l};
        z_l(i)=l;
        pr(i)=d;
        vazba{i}={0};
        set(z_text(i),'String',num2str(l*1000));
        zz_obr=imread('z1.png');
        axes(zobrazeni(i));
        imshow(zz_obr);
        
        if get(handles.checkbox_ko,'Value')==1
            S=(pi*d^2)/4;
            for j=1:length(Omega)
                G(j)=((rho*S*Omega(j)^2)/(E*J))^(1/4);
                V1(j)=0.5*(cosh(G(j)*l)+cos(G(j)*l));
                V2(j)=0.5*(sinh(G(j)*l)+sin(G(j)*l));
                V3(j)=0.5*(cosh(G(j)*l)-cos(G(j)*l));
                V4(j)=0.5*(sinh(G(j)*l)-sin(G(j)*l));
                O{j,i}=[     V1(j)                   V2(j)/G(j)          -(V3(j)/(E*J*G(j)^2))   -(V4(j)/(E*J*G(j)^3))
                        G(j)*V4(j)                   V1(j)               -(V2(j)/(E*J*G(j)))     -(V3(j)/(E*J*G(j)^2))
                        -E*J*V3(j)*G(j)^2  -G(j)*E*J*V4(j)                 V1(j)                   V2(j)/G(j)
                        -E*J*V2(j)*G(j)^3       -E*J*V3(j)*G(j)^2     G(j)*V4(j)                   V1(j)];
            end
        end
    case 'Prvek s přídavnou hmotou'
        l=str2double(get(handles.edit_g1,'String'))/1000;
        d=str2double(get(handles.edit_g2,'String'))/1000;
        m=str2double(get(handles.edit_g3,'String'));
        lm=str2double(get(handles.edit_g4,'String'))/1000;
        if lm>l
            lm=l;
            uiwait(errordlg(sprintf('Délka přídavné hmoty je větší než délka prvku.\nNastaveno L = lm.'),'Chyba'));
        end
        J=(pi*d^4)/64;
        q=((pi*d^2)/4)*rrho*gg+((m*gg)/lm);
        U{i}=[1  l  -((l^2)/(2*EE*J)) -((l^3)/(6*EE*J))  -((q*l^4)/(24*EE*J))
              0  1  -(l/(EE*J))       -((l^2)/(2*EE*J))  -((q*l^3)/(6*EE*J))
              0  0    1                  l               -((q*l^2)/2)
              0  0    0                  1               -((q*l))
              0  0    0                  0                    1 ];
        delka{i}={l};
        z_l(i)=l;
        pr(i)=d;
        vazba{i}={0};
        set(z_text(i),'String',num2str(l*1000));
        zz_obr=imread('z2.png');
        axes(zobrazeni(i));
        imshow(zz_obr);
        
        if get(handles.checkbox_ko,'Value')==1     
            S=(pi*d^2)/4;
            rom=rho+(m/(S*lm));
            for j=1:length(Omega)
                G(j)=((rom*S*Omega(j)^2)/(E*J))^(1/4);
                V1(j)=0.5*(cosh(G(j)*l)+cos(G(j)*l));
                V2(j)=0.5*(sinh(G(j)*l)+sin(G(j)*l));
                V3(j)=0.5*(cosh(G(j)*l)-cos(G(j)*l));
                V4(j)=0.5*(sinh(G(j)*l)-sin(G(j)*l));
                O{j,i}=[     V1(j)                   V2(j)/G(j)          -(V3(j)/(E*J*G(j)^2))   -(V4(j)/(E*J*G(j)^3))
                        G(j)*V4(j)                   V1(j)               -(V2(j)/(E*J*G(j)))     -(V3(j)/(E*J*G(j)^2))
                        -E*J*V3(j)*G(j)^2  -G(j)*E*J*V4(j)                 V1(j)                   V2(j)/G(j)
                        -E*J*V2(j)*G(j)^3       -E*J*V3(j)*G(j)^2     G(j)*V4(j)                   V1(j)];
            end
        end
    case 'Skoková změna příčné síly'
        F=str2double(get(handles.edit_g1,'String'));
        U{i}=[1 0 0 0 0
              0 1 0 0 0
              0 0 1 0 0
              0 0 0 1 -F
              0 0 0 0 1];
        delka{i}={0};
        z_l(i)=0;
        pr(i)=0;
        vazba{i}={0};
        set(z_text(i),'String',num2str(0));
        zz_obr=imread('z3.png');
        axes(zobrazeni(i));
        imshow(zz_obr);
        
        if get(handles.checkbox_ko,'Value')==1     
            for j=1:length(Omega)
                O{j,i}=[eye(4)];
            end
        end
    case 'Pružná podpora'
        k=str2double(get(handles.edit_g1,'String'));
        U{i}=[1 0 0 0 0
              0 1 0 0 0
              0 0 1 0 0
              k 0 0 1 0
              0 0 0 0 1];
        delka{i}={0};
        z_l(i)=0;
        pr(i)=0;
        vazba{i}={1};
        set(z_text(i),'String',num2str(0));
        zz_obr=imread('z4.png');
        axes(zobrazeni(i));
        imshow(zz_obr);
        
        if get(handles.checkbox_ko,'Value')==1
            for j=1:length(Omega)
                O{j,i}=[1 0 0 0
                        0 1 0 0
                        0 0 1 0
                        k 0 0 1];
            end
        end
    case 'Prvek s magnetickým tahem'
        l=str2double(get(handles.edit_g1,'String'))/1000;
        d=str2double(get(handles.edit_g2,'String'))/1000;
        Cm=str2double(get(handles.edit_g3,'String'));
        pc=str2double(get(handles.edit_g4,'String'));
        if mod(pc,1)~=0 | pc<0 | isnan(pc)==1
            pc=round(abs(pc));
            if pc<2 | isnan(pc)==1
                pc=2;
            end
            uiwait(errordlg(sprintf('Počet částí musí být přirozené číslo.\nNastaveno na %1.0f.',pc),'Chyba'));
        elseif pc<2
            pc=2;
            uiwait(errordlg(sprintf('Počet částí musí být alespoň 2.\nNastaveno na %1.0f.',pc),'Chyba'));
        end
        J=(pi*d^4)/64;
        q=((pi*d^2)/4)*rrho*gg;
        A=[1  (l/pc)  -(((l/pc)^2)/(2*EE*J)) -(((l/pc)^3)/(6*EE*J))  -((q*(l/pc)^4)/(24*EE*J))
           0  1       -((l/pc)/(EE*J))       -(((l/pc)^2)/(2*EE*J))  -((q*(l/pc)^3)/(6*EE*J))
           0  0                1                (l/pc)               -((q*(l/pc)^2)/2)
           0  0                0                 1                   -((q*(l/pc)))
           0  0                0                 0                         1 ];
        B=[     1     0 0 0 0
                0     1 0 0 0
                0     0 1 0 0
           -Cm/(pc-1) 0 0 1 0
                0     0 0 0 1];
        U{i}{1}=A;
        delka{i}{1}=l/pc;
        vazba{i}{1}=0;
        for k=2:2:2*(pc-1)
            U{i}{k}=B;
            U{i}{k+1}=A;
            delka{i}{k}=0;
            delka{i}{k+1}=l/pc;
            vazba{i}{k}=0;
            vazba{i}{k+1}=0;
        end    
        z_l(i)=l;
        pr(i)=d;
      set(z_text(i),'String',num2str(l*1000));
      zz_obr=imread('z5.png');
      axes(zobrazeni(i));
      imshow(zz_obr); 
      
      if get(handles.checkbox_ko,'Value')==1
          S=(pi*d^2)/4;
          for j=1:length(Omega)
              G(j)=((rho*S*Omega(j)^2)/(E*J))^(1/4);
              V1(j)=0.5*(cosh(G(j)*l/pc)+cos(G(j)*l/pc));
              V2(j)=0.5*(sinh(G(j)*l/pc)+sin(G(j)*l/pc));
              V3(j)=0.5*(cosh(G(j)*l/pc)-cos(G(j)*l/pc));
              V4(j)=0.5*(sinh(G(j)*l/pc)-sin(G(j)*l/pc));
              C{j,1}=[     V1(j)                   V2(j)/G(j)          -(V3(j)/(E*J*G(j)^2))   -(V4(j)/(E*J*G(j)^3))
                      G(j)*V4(j)                   V1(j)               -(V2(j)/(E*J*G(j)))     -(V3(j)/(E*J*G(j)^2))
                      -E*J*V3(j)*G(j)^2  -G(j)*E*J*V4(j)                 V1(j)                   V2(j)/G(j)
                      -E*J*V2(j)*G(j)^3       -E*J*V3(j)*G(j)^2     G(j)*V4(j)                   V1(j)];
              D{j,1}=[    1      0 0 0
                          0      1 0 0
                          0      0 1 0
                      -Cm/(pc-1) 0 0 1];
              O{j,i}{1}=C{j,1};
              for m=2:2:2*(pc-1)
                  O{j,i}{m}=D{j,1};
                  O{j,i}{m+1}=C{j,1};
              end
          end
      end
    case 'Prvek s magnetickým tahem a přídavnou hmotou'
        l=str2double(get(handles.edit_g1,'String'))/1000;
        d=str2double(get(handles.edit_g2,'String'))/1000;
        m=str2double(get(handles.edit_g3,'String'));
        lm=str2double(get(handles.edit_g4,'String'))/1000;
        if lm>l
            lm=l;
            uiwait(errordlg(sprintf('Délka přídavné hmoty je větší než délka prvku.\nNastaveno L = lm.'),'Chyba'));
        end
        Cm=str2double(get(handles.edit_g5,'String'));
        pc=str2double(get(handles.edit_g6,'String'));
        if mod(pc,1)~=0 | pc<0 | isnan(pc)==1
            pc=round(abs(pc));
            if pc<2 | isnan(pc)==1
                pc=2;
            end
            uiwait(errordlg(sprintf('Počet částí musí být přirozené číslo.\nNastaveno na %1.0f.',pc),'Chyba'));
        elseif pc<2
            pc=2;
            uiwait(errordlg(sprintf('Počet částí musí být alespoň 2.\nNastaveno na %1.0f.',pc),'Chyba'));
        end
        J=(pi*d^4)/64;
        q=((pi*d^2)/4)*rrho*gg+(((m/pc)*gg)/(lm/pc));
        A=[1  (l/pc)  -(((l/pc)^2)/(2*EE*J)) -(((l/pc)^3)/(6*EE*J)) -((q*(l/pc)^4)/(24*EE*J))
           0  1       -((l/pc)/(EE*J))       -(((l/pc)^2)/(2*EE*J)) -((q*(l/pc)^3)/(6*EE*J))
           0  0                1                (l/pc)              -((q*(l/pc)^2)/2)
           0  0                0                 1                  -((q*(l/pc)))
           0  0                0                 0                        1 ];
        B=[     1     0 0 0 0
                0     1 0 0 0
                0     0 1 0 0
           -Cm/(pc-1) 0 0 1 0
                0     0 0 0 1];
        U{i}{1}=A;
        delka{i}{1}=l/pc;
        vazba{i}{1}=0;
        for k=2:2:2*(pc-1)
            U{i}{k}=B;
            U{i}{k+1}=A;
            delka{i}{k}=0;
            delka{i}{k+1}=l/pc;
            vazba{i}{k}=0;
            vazba{i}{k+1}=0;
        end 
        z_l(i)=l;
        pr(i)=d;
        set(z_text(i),'String',num2str(l*1000));
        zz_obr=imread('z6.png');
        axes(zobrazeni(i));
        imshow(zz_obr);
        
        if get(handles.checkbox_ko,'Value')==1
            S=(pi*d^2)/4;
            rom=rho+((m/pc)/(S*(lm/pc)));
            for j=1:length(Omega)
                G(j)=((rom*S*Omega(j)^2)/(E*J))^(1/4);
                V1(j)=0.5*(cosh(G(j)*l/pc)+cos(G(j)*l/pc));
                V2(j)=0.5*(sinh(G(j)*l/pc)+sin(G(j)*l/pc));
                V3(j)=0.5*(cosh(G(j)*l/pc)-cos(G(j)*l/pc));
                V4(j)=0.5*(sinh(G(j)*l/pc)-sin(G(j)*l/pc));
                C{j,1}=[     V1(j)                   V2(j)/G(j)          -(V3(j)/(E*J*G(j)^2))   -(V4(j)/(E*J*G(j)^3))
                        G(j)*V4(j)                   V1(j)               -(V2(j)/(E*J*G(j)))     -(V3(j)/(E*J*G(j)^2))
                        -E*J*V3(j)*G(j)^2  -G(j)*E*J*V4(j)                 V1(j)                   V2(j)/G(j)
                        -E*J*V2(j)*G(j)^3       -E*J*V3(j)*G(j)^2     G(j)*V4(j)                   V1(j)];
                D{j,1}=[    1      0 0 0
                            0      1 0 0
                            0      0 1 0
                        -Cm/(pc-1) 0 0 1];
                O{j,i}{1}=C{j,1};
                for m=2:2:2*(pc-1)
                    O{j,i}{m}=D{j,1};
                    O{j,i}{m+1}=C{j,1};
                end
            end
        end
    case 'Disk'
        I=str2double(get(handles.edit_g1,'String'));
        m=str2double(get(handles.edit_g2,'String'));
        U{i}=[1       0   0 0 0
              0       1   0 0 0
              0    I*ww^2 1 0 0
           -m*ww^2    0   0 1 0
              0       0   0 0 1];
        delka{i}={0};
        z_l(i)=0;
        pr(i)=0;
        vazba{i}={0};
        set(z_text(i),'String',num2str(0));
        zz_obr=imread('z7.png');
        axes(zobrazeni(i));
        imshow(zz_obr);
        
        if get(handles.checkbox_ko,'Value')==1
            for j=1:length(Omega)
                O{j,i}=[1           0      0 0
                        0           1      0 0
                        0     I*Omega(j)^2 1 0
                   -m*Omega(j)^2   0       0 1];
            end
        end
    case 'Ložisko'
        k=str2double(get(handles.edit_g1,'String'));
        c=str2double(get(handles.edit_g2,'String'));
        M=str2double(get(handles.edit_g3,'String'));
        kk=str2double(get(handles.edit_g4,'String'));
        cc=str2double(get(handles.edit_g5,'String'));
        if isnan(kk)==1
            uiwait(warndlg(sprintf('Nevyplněna tuhost uložení kroužku.\nPočítáno s nalisovaným ložiskem.'),'Varování'));
            kk=Inf;
        end
        if isinf(kk)==1
            z=k+ww*c;
        else
            z=((k+ww*c)*(kk+ww*cc+ww^2*M))/(k+ww*c+kk+ww*cc+ww^2*M);
        end
        U{i}=[1 0 0 0 0
              0 1 0 0 0
              0 0 1 0 0
              z 0 0 1 0
              0 0 0 0 1];
        delka{i}={0};
        z_l(i)=0;
        pr(i)=0;
        vazba{i}={1};
        set(z_text(i),'String',num2str(0));
        zz_obr=imread('z8.png');
        axes(zobrazeni(i));
        imshow(zz_obr);
        
        if get(handles.checkbox_ko,'Value')==1
            for j=1:length(Omega)
                if isinf(kk)==1
                    zz=k+Omega(j)*c;
                else
                    zz=((k+Omega(j)*c)*(kk+Omega(j)*cc+Omega(j)^2*M))/(k+Omega(j)*c+kk+Omega(j)*cc+Omega(j)^2*M);
                end     
                O{j,i}=[ 1 0 0 0
                         0 1 0 0
                         0 0 1 0
                        zz 0 0 1];
            end
        end
end

% nastavení výchozího zobrazení pro zadávání prvků
set(handles.pop_prvek,'Value',1);
axes(handles.axes_prvek);
prvek_obr = imread('part_0.png');
imshow(prvek_obr);
box=[handles.edit_g1 handles.text_g1 handles.edit_g2 handles.text_g2 handles.edit_g3 handles.text_g3...
     handles.edit_g4 handles.text_g4 handles.edit_g5 handles.text_g5 handles.edit_g6 handles.text_g6];
zmiz(box);
set(handles.push_add,'Enable','off');
guidata(hObject,handles);

% Odebírání prvků
function push_del_Callback(hObject, eventdata, handles)
global kliknuti U O delka vazba z_l zobrazeni z_text
i=kliknuti;
U(:,i)=[];
if get(handles.checkbox_ko,'Value')==1
    O(:,i)=[];
end
delka(:,i)=[];
vazba(:,i)=[];
z_l(i)=[];
set(z_text(i),'String','');
zz_obr = imread('z0.png');
axes(zobrazeni(i));
imshow(zz_obr);
kliknuti=kliknuti-1;
if kliknuti<40
   set(handles.push_add,'Visible','on');
end

if kliknuti<=40 & kliknuti>20
    set(handles.text_zd1,'Visible','on');
    set(handles.text_zd2,'Visible','on');
elseif kliknuti<=20 & kliknuti>0
    set(handles.text_zd1,'Visible','on');
    set(handles.text_zd2,'Visible','off');
elseif kliknuti==0
    set(handles.push_del,'Enable','off');
    set(handles.checkbox_ko,'Enable','on');
    set(handles.edit_omega,'Enable','on');
    set(handles.text_omega,'Enable','on');
    set(handles.text_zd1,'Visible','off');
    set(handles.text_zd2,'Visible','off');
end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%                           Tlačítka                               %%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Načítání dat
function push_loaddata_Callback(hObject, eventdata, handles)
global E rho g om Omega u kliknuti U O delka vazba z_l pr zobrazeni z_text
syms EE rrho gg ww

if kliknuti~=0
    push_reset_Callback(hObject, eventdata, handles);
    push_loaddata_Callback(hObject, eventdata, handles);
else
    % dialog pro načítání souborů
    [nazev, cesta]=uigetfile({'*.mat','Soubory MAT';'*.*','Všechny soubory (*.*)'},'Načíst data');
    if nazev~=0
        soubor=fullfile(cesta, nazev);
        demodata=importdata(soubor);
        CH=demodata.charakter;
        E=CH(1);
        rho=CH(2);
        if CH(3)==1
            g=9.81;
            set(handles.checkbox_g,'Value',1);
        else
            g=0;
            set(handles.checkbox_g,'Value',0);
        end
        set(handles.edit_young,'String',num2str(E/1000000));
        set(handles.edit_rho,'String',num2str(rho));
        if CH(4)==0
            set(handles.checkbox_ko,'Value',0);
            set(handles.edit_omega,'Enable','off','String','');
            set(handles.push_otacky,'Visible','off');
        else
            Omega=demodata.omega;
            om=CH(5);
            set(handles.checkbox_ko,'Value',1);
            set(handles.edit_omega,'Enable','on');
            set(handles.text_omega,'Enable','on');
            set(handles.edit_omega,'String',num2str(CH(5)));
            set(handles.push_otacky,'Visible','on');
            O = demodata.O;
        end

        z_l = demodata.z_l;
        pr = demodata.pr;
        kliknuti=length(z_l);
        U=demodata.U;
        delka=demodata.delka;
        vazba=demodata.vazba;

        if kliknuti>20
            set(handles.text_zd1,'Visible','on');
            set(handles.text_zd2,'Visible','on');
            set(handles.push_del,'Enable','on');
        elseif kliknuti<=20
            set(handles.text_zd1,'Visible','on');
            set(handles.push_del,'Enable','on');
        end
        for i=1:length(z_l)
            set(z_text(i),'String',num2str(z_l(i)*1000));
        end

        u=demodata.ulozeni;
        r_z=[handles.radio_u1 handles.radio_u2 handles.radio_u3 handles.radio_u4];
        set(r_z(u),'Value',1);
        
        obrazek=demodata.obrazek;
        for i=1:length(obrazek)
            axes(zobrazeni(i));
            imshow(obrazek{i});
        end
    end
end

% Výpočet průhybové čáry a reakcí ve vazbách
function push_vyp_Callback(hObject, eventdata, handles)
global E rho g u U delka z_l pr vazba w ll R vv lvv
syms EE rrho gg ww
% kontrola vstupů
if E==0 | isnan(E)==1;
    beep;
    uiwait(errordlg('Zadejte Youngův modul E','Chyba'));
elseif rho==0 | isnan(rho)==1;
    beep;
    uiwait(errordlg('Zadejte hustotu','Chyba'));
elseif isempty(U)==1
    beep;
    uiwait(errordlg('Zadejte alespoň jeden prvek','Chyba'));
else
    if get(handles.checkbox_g,'Value')==0
       uiwait(warndlg('Hřídel není hmotná','Varování'))
    end
    
    % vytvoření jednoúrovňových matic U, delka a vazba
    a=size(U);
    UU=[];
    j=1;
    for i=1:a(2)
        if iscell(U{i})==0 
            UU{j}=U{i} ;
            j=j+1;
        else
            b=size(U{i});
            for k=1:b(2)
                UU{j}=U{i}{k};
                j=j+1;
            end
        end
    end   
    a=size(delka);
    dd=[];
    j=1;
    for i=1:a(2)
        if iscell(delka{i})==0 
            dd(j)=delka{i} ;
            j=j+1;
        else
            b=size(delka{i});
            for k=1:b(2)
                dd(j)=delka{i}{k};
                j=j+1;
            end
        end
    end    
    a=size(vazba);
    vv=[];
    j=1;
    for i=1:a(2)
        if iscell(vazba{i})==0 
            vv(j)=vazba{i};
            j=j+1;
        else
            b=size(vazba{i});
            for k=1:b(2)
                vv(j)=vazba{i}{k};
                j=j+1;
            end
        end
    end
    
    % nahrazení symbolických proměnných
    for i=1:length(z_l)
        vp(i)=z_l(i)*pr(i);
    end
    dvp=sum(vp)/sum(pr);
    Jvp=(pi*dvp^4)/64;
    switch u
        case 1
            omg=(22.373/(sum(z_l))^2)*((E*Jvp)/rho)^(1/2);
        case 2
            omg=(3.5156/(sum(z_l))^2)*((E*Jvp)/rho)^(1/2);
        case 3
            omg=(3.5156/(sum(z_l))^2)*((E*Jvp)/rho)^(1/2);
        case 4
            omg=(pi^2/(sum(z_l))^2)*((E*Jvp)/rho)^(1/2);
    end

    for i=1:length(UU)
        UU{i}=subs(UU{i},EE,E);
        UU{i}=subs(UU{i},rrho,rho);
        UU{i}=subs(UU{i},gg,g);
        UU{i}=subs(UU{i},ww,omg);
        UU{i}=double(UU{i});
    end
    
    % vytvoření celkové přenosové matice
    Uba=eye(5);
    for i=length(UU):-1:1
        Uba=Uba*UU{i};
    end
    
    % okrajové podmínky
    switch u
        case 1
            Cop=Uba([3 8;4 9]);
            Fop=-Uba([23;24]);
            vo=Cop\Fop;
            v0=[vo(1);vo(2);0;0;1];
        case 2
            Cop=Uba([8 18;9 19]);
            Fop=-Uba([23;24]);
            vo=Cop\Fop;
            v0=[0;vo(1);0;vo(2);1];
        case 3
            Cop=Uba([1 6;3 8]);
            Fop=-Uba([21;23]);
            vo=Cop\Fop;
            v0=[vo(1);vo(2);0;0;1];
        case 4
            Cop=Uba([6 16;8 18]);
            Fop=-Uba([21;23]);
            vo=Cop\Fop;
            v0=[0;vo(1);0;vo(2);1];
    end

    % výpočet jednotlivých stavových vektorů
    graf{1}=UU{1}*v0;
    for i=2:length(UU)
        graf{i}=UU{i}*graf{i-1};
    end
    
    % vytvoření matice z jednotlivých stavových vektorů
    Vol(:,1)=v0;
    for i=1:length(graf)
        Vol(:,i+1)=(graf{i});
    end
    
    % hodnoty pro průhybovou čáru
    w=0;
    ll=0;
    b=find(dd==0);
    w(1)=v0(1);
    ll(1)=0;
    for i=1:length(dd)
        w(i+1)=Vol(1,i+1);
        ll(i+1)=ll(i)+dd(i);
    end
    
    % odstranění duplicitních hodnot
    lvv=ll;
    ll(b)=[];
    w(b)=[];
       
    % výpočet vazeb
    R=[];
    switch u
        case 1
            j=1;
            for i=1:length(vv)
                if vv(i)==1
                    m=i;
                    n=i-1;
                    rb=eye(5);
                    ra=eye(5);
                    for k=m:-1:1
                        rb=rb*UU{k};
                    end
                    for l=n:-1:1
                        ra=ra*UU{l};
                    end
                    rrb=rb*v0;
                    rra=ra*v0;
                    R(j)=rrb(4)-rra(4);
                    j=j+1;
                end
            end
        case 2
            R(1)=v0(4);
            j=2;
            for i=1:length(vv)
                if vv(i)==1
                    m=i;
                    n=i-1;
                    rb=eye(5);
                    ra=eye(5);
                    for k=m:-1:1
                        rb=rb*UU{k};
                    end
                    for l=n:-1:1
                        ra=ra*UU{l};
                    end
                    rrb=rb*v0;
                    rra=ra*v0;
                    R(j)=rrb(4)-rra(4);
                    j=j+1;
                end
            end
        case 3
            j=1;
            for i=1:length(vv)
                if vv(i)==1
                    m=i;
                    n=i-1;
                    rb=eye(5);
                    ra=eye(5);
                    for k=m:-1:1
                        rb=rb*UU{k};
                    end
                    for l=n:-1:1
                        ra=ra*UU{l};
                    end
                    rrb=rb*v0;
                    rra=ra*v0;
                    R(j)=rrb(4)-rra(4);
                    j=j+1;
                end
            end
            R(j)=Vol(4,end);
        case 4
            R(1)=v0(4);
            j=2;
            for i=1:length(vv)
                if vv(i)==1
                    m=i;
                    n=i-1;
                    rb=eye(5);
                    ra=eye(5);
                    for k=m:-1:1
                        rb=rb*UU{k};
                    end
                    for l=n:-1:1
                        ra=ra*UU{l};
                    end
                    rrb=rb*v0;
                    rra=ra*v0;
                    R(j)=rrb(4)-rra(4);
                    j=j+1;
                end
            end
            R(j)=Vol(4,end);        
    end

    % vykreslení průhybové čáry a zobrazení hodnot reakcí ve vazbách
    figure(vysledek)
end

% Ukládání dat
function push_savedata_Callback(hObject, eventdata, handles)
global E rho om Omega u U O delka vazba z_l pr obrazek zobrazeni
syms EE rrho gg ww

charakter(1)=E;
charakter(2)=rho;
if get(handles.checkbox_g,'Value')==1;
    charakter(3)=1;
else
    charakter(3)=0;
end
if get(handles.checkbox_ko,'Value')==1;
    charakter(4)=1;
    charakter(5)=om;
    omega=Omega;
else
    charakter(4)=0;
    omega=[];
end
ulozeni=u;
for i=1:length(z_l)
    axes(zobrazeni(i));
    obrazek{i}=getimage(zobrazeni(i));
end

uisave({'charakter','omega','ulozeni','U','O','delka','vazba','z_l','pr','obrazek'},'data');

% Výpočet kritických otáček
function push_otacky_Callback(hObject, eventdata, handles)
global E rho om Omega u O Not Det kr_ot

%kontrola vstupů
if get(handles.checkbox_ko,'Value')==0
    beep;
    uiwait(errordlg('Nenastaveny parametry pro výpočet','Chyba'));
elseif E==0 | isnan(E)==1;
    beep;
    uiwait(errordlg('Zadejte Youngův modul E','Chyba'));
elseif rho==0 | isnan(rho)==1;
    beep;
    uiwait(errordlg('Zadejte hustotu','Chyba'));
elseif om==0  | isnan(om)==1;
    beep;
    uiwait(errordlg('Zadejte pásmo otáček','Chyba'));
elseif isempty(O)==1
    beep;
    uiwait(errordlg('Zadejte alespoň jeden prvek','Chyba'));
elseif length(Omega)>size(O,1)
    beep;
    uiwait(errordlg('Po zadání prvků bylo zvětšeno pásmo otáček','Chyba'));
else
    if get(handles.checkbox_g,'Value')==0
       uiwait(warndlg('Hřídel není hmotná','Varování'));
    end
    
    Det=[];
    Not=[];
    kr_ot=[];

    % vytvoření jednoúrovňové matice O
    a=size(O);
    OO=[];
    for f=1:length(Omega)
        l=1;
        for i=1:a(2)
            if iscell(O{f,i})==0 
                OO{f,l}=O{f,i};
                l=l+1;
            else
                b=size(O{f,i});
                for m=1:b(2)
                    OO{f,l}=O{f,i}{m};
                    l=l+1;
                end
            end
        end
    end
    % vytvoření celkové přenosové matice
    a=size(OO);
    for j=1:length(Omega)
        Oba=eye(4);
        for i=1:a(2)
            Oba=Oba*OO{j,i};
        end
        Obb{j}=Oba;
    end

    % okrajové podmínky
    switch u
        case 1
            for j=1:length(Omega)
                Oop{j}=Obb{j}([3 7;4 8]);
            end
        case 2
            for j=1:length(Omega)
                Oop{j}=Obb{j}([7 15;8 16]);
            end
        case 3
            for j=1:length(Omega)
                Oop{j}=Obb{j}([1 5;3 7]);
            end
        case 4
            for j=1:length(Omega)
                Oop{j}=Obb{j}([5 13;7 15]);
            end
    end

    % přepočet úhlové frekvence na otáčky
    for i=1:length(Omega)
        Not(i)=(60*Omega(i))/(2*pi);
    end

    % výpočet determinantu pro určení kritických otáček
    for j=1:length(Omega)
        Det(j)=det(Oop{j});
    end

    % určení přesnějšího kořene pomocí metody půlení intervalu
    err=1;
    m=1;
    for i=1:length(Det)-1
        chyba=2;
        if Det(i)>0 & Det(i+1)<0 | Det(i)<0 & Det(i+1)>0
            fa=Det(i);
            fb=Det(i+1);
            a=Not(i);
            b=Not(i+1);
            q=(a*fb-b*fa)/(a-b);
            k=(fb-q)/b;
            if isnan(k)==1 | isinf(k)==1
                k=1;
            end
            while chyba>err
                x=(a+b)/2;
                fx=k*x+q;
                chyba=abs(b-a)/2;
                if fa>0 & fx>0 | fa<0 & fx<0
                    a=x;
                elseif fb<0 & fx<0 | fb>0 & fx>0
                    b=x;
                else
                    break
                end
            end
            kr_ot(m)=round(x);
            m=m+1;
        end
    end

    % vykreslení křivky determinantu a zobrazení kritických otáček
    figure(krit_ot)
end

% Zavření programu
function push_exit_Callback(hObject, eventdata, handles)
volba=questdlg('Chcete uložit data?','Ukončit','Uložit','Neukládat','Storno','Uložit');
switch volba
    case 'Uložit'
        push_savedata_Callback(hObject, eventdata, handles);
        close all;
    case 'Neukládat'
        close all;        
end
