No BSD License  

Highlights from
Two-Category Classifier

from Two-Category Classifier by kirit patel
Obtain optimal decision boundary.

Discriminant(varargin)
function varargout = Discriminant(varargin)
% Two-Category Discriminant Classifier
%   The classifier is desined for 2-feature case and 1-feature case
%    
%   It is also simplified in three different cases by choise of Covariance Matrix 

% Last Modified by Kirit Patel 04-Dec-2002

if nargin == 0  % LAUNCH GUI
    fig = openfig(mfilename,'reuse');
    
    % Use system color scheme for figure:
    set(fig,'Color',get(0,'defaultUicontrolBackgroundColor'));
    
    % Generate a structure of handles to pass to callbacks, and store it. 
    handles = guihandles(fig);
    set(handles.date_time,'String',[date])
    set(handles.timetake, 'String', ['Time Reauired to update plot  ' sprintf('%4.2f%',0.00) '  seconds'])
    case1 = {'Case 1: Features are statistically independent',
        'Each features have same covariance and Covariance Matrix are diagonal.',
        'Samples fall in equal-size hypersperical clusters'};
    outcase1 = textwrap(handles.case_text, case1);
    set(handles.case_text, 'String', outcase1)
    set(handles.covar12_c1, 'Enable','inactive')
    set(handles.covar21_c1, 'Enable','inactive')
    set(handles.covar22_c1, 'Enable','inactive')
    set(handles.covar11_c2, 'Enable','inactive')
    set(handles.covar12_c2, 'Enable','inactive')
    set(handles.covar21_c2, 'Enable','inactive')
    set(handles.covar22_c2, 'Enable','inactive')
    set(handles.mus1_c1, 'Value',str2num(get(handles.mue1_c1,'String')));
    set(handles.mus2_c1, 'Value',str2num(get(handles.mue2_c1,'String')));
    set(handles.mus1_c2, 'Value',str2num(get(handles.mue1_c2,'String')));
    set(handles.mus2_c2, 'Value',str2num(get(handles.mue2_c2,'String')));
    set(handles.priors_c1,'Value', str2num(get(handles.priore_c1,'String')));
    set(handles.priors_c2,'Value', str2num(get(handles.priore_c2,'String')));
    guidata(fig, handles);
    
    if nargout > 0
        varargout{1} = fig;
    end
    
elseif ischar(varargin{1}) % INVOKE NAMED SUBFUNCTION OR CALLBACK
    try
        [varargout{1:nargout}] = feval(varargin{:}); % FEVAL switchyard
    catch
        disp(lasterr);
    end
end

%| ABOUT CALLBACKS:
%| GUIDE automatically appends subfunction prototypes to this file, and 
%| sets objects' callback properties to call them through the FEVAL 
%| switchyard above. This comment describes that mechanism.
%|
%| Each callback subfunction declaration has the following form:
%| <SUBFUNCTION_NAME>(H, EVENTDATA, HANDLES, VARARGIN)
%|
%| The subfunction name is composed using the object's Tag and the 
%| callback type separated by '_', e.g. 'slider2_Callback',
%| 'figure1_CloseRequestFcn', 'axis1_ButtondownFcn'.
%|
%| H is the callback object's handle (obtained using GCBO).
%|
%| EVENTDATA is empty, but reserved for future use.
%|
%| HANDLES is a structure containing handles of components in GUI using
%| tags as fieldnames, e.g. handles.figure1, handles.slider2. This
%| structure is created at GUI startup using GUIHANDLES and stored in
%| the figure's application data using GUIDATA. A copy of the structure
%| is passed to each callback.  You can store additional information in
%| this structure at GUI startup, and you can change the structure
%| during callbacks.  Call guidata(h, handles) after changing your
%| copy to replace the stored original so that subsequent callbacks see
%| the updates. Type "help guihandles" and "help guidata" for more
%| information.
%|
%| VARARGIN contains any extra arguments you have passed to the
%| callback. Specify the extra arguments by editing the callback
%| property in the inspector. By default, GUIDE sets the property to:
%| <MFILENAME>('<SUBFUNCTION_NAME>', gcbo, [], guidata(gcbo))
%| Add any extra arguments after the last argument, before the final
%| closing parenthesis.

% --------------------------------------------------------------------
function varargout = mue1_c1_Callback(h, eventdata, handles, varargin)
val = str2num(get(handles.mue1_c1,'String'));
if (isreal(val)==1) & (length(val)==1)
    if val < get(handles.mus1_c1,'Min')
        set(handles.mue1_c1, 'String', sprintf('%3.1f',get(handles.mus1_c1,'Min')));
    elseif val > get(handles.mus1_c1,'Max')
        set(handles.mue1_c1, 'String', sprintf('%3.1f',get(handles.mus1_c1,'Max')));
    else set(handles.mue1_c1, 'String', sprintf('%3.1f',val));
    end
else
    set(handles.mue1_c1,'String',sprintf('%3.1f',get(handles.mus1_c1,'Value')))
end
set(handles.mus1_c1,'Value',str2num(get(handles.mue1_c1,'String')));
% --------------------------------------------------------------------
function varargout = mue2_c1_Callback(h, eventdata, handles, varargin)
val = str2num(get(handles.mue2_c1,'String'));
if isnumeric(val) & length(val) & isreal(val)==1
    if val < get(handles.mus2_c1,'Min')
        set(handles.mue2_c1, 'String', sprintf('%3.1f',get(handles.mus2_c1,'Min')));
    elseif val > get(handles.mus2_c1,'Max')
        set(handles.mue2_c1, 'String', sprintf('%3.1f',get(handles.mus2_c1,'Max')));
    else set(handles.mue2_c1, 'String', sprintf('%3.1f',val));
    end
else
    set(handles.mue2_c1,'String',sprintf('%3.1f',get(handles.mus2_c1,'Value')))
end
set(handles.mus2_c1,'Value',str2num(get(handles.mue2_c1,'String')));
% --------------------------------------------------------------------
function varargout = mus1_c1_Callback(h, eventdata, handles, varargin)
set(handles.mue1_c1,'String', sprintf('%3.1f',get(handles.mus1_c1,'Value')));
% --------------------------------------------------------------------
function varargout = mus2_c1_Callback(h, eventdata, handles, varargin)
set(handles.mue2_c1,'String', sprintf('%3.1f',get(handles.mus2_c1,'Value')));
% --------------------------------------------------------------------
function varargout = covar11_c1_Callback(h, eventdata, handles, varargin)
val = str2num(get(handles.covar11_c1,'String'));
if (isreal(val)~=1) | (length(val)~=1) | (val<=0)
    set(handles.covar11_c1,'String',sprintf('%3.1f',1));
elseif val > 10 
    set(handles.covar11_c1,'String',sprintf('%3.1f',10));
else set(handles.covar11_c1,'String',sprintf('%3.1f',val));
end
if get(handles.disc_case,'Value')==1
    set(handles.covar22_c1,'String',get(handles.covar11_c1,'String'));
    set(handles.covar11_c2,'String',get(handles.covar11_c1,'String'));
    set(handles.covar22_c2,'String',get(handles.covar11_c1,'String'));
end
if get(handles.disc_case,'Value')==2
    set(handles.covar11_c2,'String',get(handles.covar11_c1,'String'));
end
% --------------------------------------------------------------------
function varargout = covar12_c1_Callback(h, eventdata, handles, varargin)
val = str2num(get(handles.covar12_c1,'String'));
if (isreal(val)~=1) | (length(val)~=1) | (val<-10) | (val>10)
    set(handles.covar12_c1,'String',sprintf('%3.1f',str2num(get(handles.covar21_c1,'String'))));
else
    set(handles.covar21_c1,'String',sprintf('%3.1f',val));
    set(handles.covar12_c1,'String',sprintf('%3.1f',val));
end
if get(handles.disc_case,'Value')==2
    set(handles.covar12_c2,'String',get(handles.covar12_c1,'String'));
    set(handles.covar21_c2,'String',get(handles.covar12_c1,'String'));
end
% --------------------------------------------------------------------
function varargout = covar21_c1_Callback(h, eventdata, handles, varargin)
val = str2num(get(handles.covar21_c1,'String'));
if (isreal(val)~=1) | (length(val)~=1) | (val<-10) | (val>10)
    set(handles.covar21_c1,'String',sprintf('%3.1f',str2num(get(handles.covar12_c1,'String'))));
else
    set(handles.covar12_c1,'String',sprintf('%3.1f',val));
    set(handles.covar21_c1,'String',sprintf('%3.1f',val));
end
if get(handles.disc_case,'Value')==2
    set(handles.covar21_c2,'String',get(handles.covar21_c1,'String'));
    set(handles.covar12_c2,'String',get(handles.covar21_c1,'String'));
end
% --------------------------------------------------------------------
function varargout = covar22_c1_Callback(h, eventdata, handles, varargin)
val = str2num(get(handles.covar22_c1,'String'));
if (isreal(val)~=1) | (length(val)~=1) | (val<=0)
    set(handles.covar22_c1,'String',sprintf('%3.1f',1));
elseif val > 10 
    set(handles.covar22_c1,'String',sprintf('%3.1f',10));
else set(handles.covar22_c1,'String',sprintf('%3.1f',val));
end
if get(handles.disc_case,'Value')==2
    set(handles.covar22_c2,'String',get(handles.covar22_c1,'String'));
end
% --------------------------------------------------------------------
function varargout = mue1_c2_Callback(h, eventdata, handles, varargin)
val = str2num(get(handles.mue1_c2,'String'));
if isnumeric(val) & length(val) & isreal(val)==1
    if val < get(handles.mus1_c2,'Min')
        set(handles.mue1_c2, 'String', sprintf('%3.1f',get(handles.mus1_c2,'Min')));
    elseif val > get(handles.mus1_c2,'Max')
        set(handles.mue1_c2, 'String', sprintf('%3.1f',get(handles.mus1_c2,'Max')));
    else set(handles.mue1_c2, 'String', sprintf('%3.1f',val));
    end
else
    set(handles.mue1_c2,'String',sprintf('%3.1f',get(handles.mus1_c2,'Value')))
end
set(handles.mus1_c2,'Value',str2num(get(handles.mue1_c2,'String')));
% --------------------------------------------------------------------
function varargout = mue2_c2_Callback(h, eventdata, handles, varargin)
val = str2num(get(handles.mue2_c2,'String'));
if isnumeric(val) & length(val) & isreal(val)==1
    if val < get(handles.mus2_c2,'Min')
        set(handles.mue2_c2, 'String', sprintf('%3.1f',get(handles.mus2_c2,'Min')));
    elseif val > get(handles.mus2_c2,'Max')
        set(handles.mue2_c2, 'String', sprintf('%3.1f',get(handles.mus2_c2,'Max')));
    else set(handles.mue2_c2, 'String', sprintf('%3.1f',val));
    end
else
    set(handles.mue2_c2,'String',sprintf('%3.1f',get(handles.mus2_c2,'Value')))
end
set(handles.mus2_c2,'Value',str2num(get(handles.mue2_c2,'String')));
% --------------------------------------------------------------------
function varargout = mus1_c2_Callback(h, eventdata, handles, varargin)
set(handles.mue1_c2,'String', sprintf('%3.1f',get(handles.mus1_c2,'Value')));
% --------------------------------------------------------------------
function varargout = mus2_c2_Callback(h, eventdata, handles, varargin)
set(handles.mue2_c2,'String', sprintf('%3.1f',get(handles.mus2_c2,'Value')));
% --------------------------------------------------------------------
function varargout = covar11_c2_Callback(h, eventdata, handles, varargin)
val = str2num(get(handles.covar11_c2,'String'));
if (isreal(val)~=1) | (length(val)~=1) | (val<=0)
    set(handles.covar11_c2,'String',sprintf('%3.1f',1));
elseif val > 10 
    set(handles.covar11_c2,'String',sprintf('%3.1f',10));
else set(handles.covar11_c2,'String',sprintf('%3.1f',val));
end
% --------------------------------------------------------------------
function varargout = covar12_c2_Callback(h, eventdata, handles, varargin)
val = str2num(get(handles.covar12_c2,'String'));
if (isreal(val)~=1) | (length(val)~=1) | (val<-10) | (val>10)
    set(handles.covar12_c2,'String',sprintf('%3.1f',str2num(get(handles.covar21_c2,'String'))));
else
    set(handles.covar21_c2,'String',sprintf('%3.1f',val));
    set(handles.covar12_c2,'String',sprintf('%3.1f',val));
end
% --------------------------------------------------------------------
function varargout = covar21_c2_Callback(h, eventdata, handles, varargin)
val = str2num(get(handles.covar21_c2,'String'));
if (isreal(val)~=1) | (length(val)~=1) | (val<-10) | (val>10)
    set(handles.covar21_c2,'String',sprintf('%3.1f',str2num(get(handles.covar12_c2,'String'))));
else
    set(handles.covar12_c2,'String',sprintf('%3.1f',val));
    set(handles.covar21_c2,'String',sprintf('%3.1f',val));
end
% --------------------------------------------------------------------
function varargout = covar22_c2_Callback(h, eventdata, handles, varargin)
val = str2num(get(handles.covar22_c2,'String'));
if (isreal(val)~=1) | (length(val)~=1) | (val<=0)
    set(handles.covar22_c2,'String',sprintf('%3.1f',1));
elseif val > 10 
    set(handles.covar22_c2,'String',sprintf('%3.1f',10));
else set(handles.covar22_c2,'String',sprintf('%3.1f',val));
end
% --------------------------------------------------------------------
function varargout = reset_Callback(h, eventdata, handles, varargin)
set(handles.priore_c1,'String', sprintf('%3.2f',0.5));
set(handles.priors_c1,'Value', str2num(get(handles.priore_c1,'String')));
set(handles.mue1_c1, 'String', sprintf('%3.1f',-1));
set(handles.mue2_c1, 'String', sprintf('%3.1f',1));
set(handles.mus1_c1, 'Value', str2num(get(handles.mue1_c1,'String')));
set(handles.mus2_c1, 'Value', str2num(get(handles.mue2_c1,'String')));
set(handles.covar11_c1, 'String', sprintf('%3.1f',1));
set(handles.covar12_c1, 'String', sprintf('%3.1f',0),'Enable','inactive');
set(handles.covar21_c1, 'String', sprintf('%3.1f',0),'Enable','inactive');
set(handles.covar22_c1, 'String', sprintf('%3.1f',1),'Enable','inactive');

set(handles.priore_c2,'String', sprintf('%3.2f',0.5));
set(handles.priors_c2,'Value', str2num(get(handles.priore_c2,'String')));
set(handles.mue1_c2, 'String', sprintf('%3.1f',1));
set(handles.mue2_c2, 'String', sprintf('%3.1f',-1));
set(handles.mus1_c2, 'Value', str2num(get(handles.mue1_c2,'String')));
set(handles.mus2_c2, 'Value', str2num(get(handles.mue2_c2,'String')));
set(handles.covar11_c2, 'String', sprintf('%3.1f',1),'Enable','inactive');
set(handles.covar12_c2, 'String', sprintf('%3.1f',0),'Enable','inactive');
set(handles.covar21_c2, 'String', sprintf('%3.1f',0),'Enable','inactive');
set(handles.covar22_c2, 'String', sprintf('%3.1f',1),'Enable','inactive');

set(handles.range_min, 'String', num2str(-10));
set(handles.range_max, 'String', num2str(10));
set(handles.samples, 'String', num2str(50));

set(handles.disc_case, 'Value', 1)  % for Case 1
% --------------------------------------------------------------------
function varargout = update_Callback(h, eventdata, handles, varargin)
tic;
n = str2num(get(handles.samples, 'String'));
if (abs(fix(n))~=n)
    n = str2num(sprintf('%1.0f',abs(fix(n))));
    set(handles.samples, 'String', num2str(n));
end
range = [str2num(get(handles.range_min, 'String')) str2num(get(handles.range_max, 'String'))];
val = get(handles.normden, 'Value');
prior1 = str2num(get(handles.priore_c1, 'String'));
prior2 = str2num(get(handles.priore_c2, 'String'));
if (prior1==1)|(prior2==1)
    errordlg('!!!OOOPS!!! Priori Probability is 1','Log of 1 Error','on');
    return;
end;
if (val==1)|(val==2)
    mu_c1 = [str2num(get(handles.mue1_c1,'String')); str2num(get(handles.mue2_c1,'String'))];
    covar_c1 = [str2num(get(handles.covar11_c1,'String')), str2num(get(handles.covar12_c1,'String'));...
            str2num(get(handles.covar21_c1,'String')), str2num(get(handles.covar22_c1,'String'))];
    
    mu_c2 = [str2num(get(handles.mue1_c2,'String')); str2num(get(handles.mue2_c2,'String'))];
    covar_c2 = [str2num(get(handles.covar11_c2,'String')), str2num(get(handles.covar12_c2,'String'));...
            str2num(get(handles.covar21_c2,'String')), str2num(get(handles.covar22_c2,'String'))];
    if (det(covar_c1)>0)|(det(covar_c1)>0)
        [bivar1,Xc1,Yc1]=bnorm(mu_c1, covar_c1, range, n);
        [bivar2,Xc2,Yc2]=bnorm(mu_c2, covar_c2, range, n);
        if val==1
            rotate3d on
            mesh(Xc1,Yc1,bivar1); hold on
            mesh(Xc2,Yc2,bivar2); hold on
            xlabel('x-axis'); ylabel('y-axis'); zlabel('Density function, p(x|w)');
            title('Normal Bivariate Density of both classes')
            %axes(handles.plot1)
        elseif val==2
            v1 = max(max(bivar1))./2.71828;             % 'peak/e' value where contour will be ploted
            v2 = max(max(bivar2))./2.71828;
            rotate3d off
            contour(Xc1,Yc1,bivar1,[v1 v1],'r'); hold on
            contour(Xc2,Yc2,bivar2,[v2 v2],'b'); hold on
            xlabel('x-axis'); ylabel('y-axis');
            title('Contour Plot of Normal Bivariate Density')
        end
        disc2class(bivar1, bivar2, prior1, prior2, range, n); hold off
    else
        err = {'Determinant of Covariance Matrix is not Positive.',
            'Plot can not be updated.'};
        errordlg(err,'Input Matrix Error','on');
    end
end
if val==3
    [univar1,xaxis1] = unorm(str2num(get(handles.mue1_c1,'String')),...
        str2num(get(handles.covar11_c1,'String')), range, n);
    [univar2,xaxis2] = unorm(str2num(get(handles.mue1_c2,'String')),...
        str2num(get(handles.covar11_c2,'String')), range, n);
    plot(xaxis1, univar1,'-.r'); hold on
    plot(xaxis2, univar2,':b'); hold on
    disc2class(univar1, univar2, prior1, prior2, range, n); hold off
    xlabel('x-axis'); ylabel('Density, p(X)');
    axis([range(1) range(2) 0 1.3.*max(max(univar1),max(univar2))])
    title('Normal Univariate Density')
    legend('Class 1','Class 2','Decision boundary')
    %axes(handles.plot1)
end
toc;
set(handles.timetake, 'String', ['Time required to update plot: ' num2str(toc) ' seconds'])
% --------------------------------------------------------------------
function varargout = normden_Callback(h, eventdata, handles, varargin)
val = get(handles.normden, 'Value');
if val == 3 % univariate
    set(handles.mue2_c1, 'Visible','off')
    set(handles.mus2_c1, 'Visible','off')
    set(handles.covar12_c1, 'Visible','off')
    set(handles.covar21_c1, 'Visible','off')
    set(handles.covar22_c1, 'Visible','off')
    
    set(handles.mue2_c2, 'Visible','off')
    set(handles.mus2_c2, 'Visible','off')
    set(handles.covar12_c2, 'Visible','off')
    set(handles.covar21_c2, 'Visible','off')
    set(handles.covar22_c2, 'Visible','off')
end
if (val == 1)|(val == 2) % bivariate
    set(handles.mue2_c1, 'Visible','on')
    set(handles.mus2_c1, 'Visible','on')
    set(handles.covar12_c1, 'Visible','on')
    set(handles.covar21_c1, 'Visible','on')
    set(handles.covar22_c1, 'Visible','on')
    
    set(handles.mue2_c2, 'Visible','on')
    set(handles.mus2_c2, 'Visible','on')
    set(handles.covar12_c2, 'Visible','on')
    set(handles.covar21_c2, 'Visible','on')
    set(handles.covar22_c2, 'Visible','on')
end
% --------------------------------------------------------------------
function varargout = priore_c1_Callback(h, eventdata, handles, varargin)
val = str2num(get(handles.priore_c1,'String'));
if isnumeric(val) & length(val) & isreal(val)==1
    if val < get(handles.priore_c1,'Min')
        set(handles.priore_c1, 'String', sprintf('%3.2f',get(handles.priore_c1,'Min')));
    elseif val > get(handles.priore_c1,'Max')
        set(handles.priore_c1, 'String', sprintf('%3.2f',get(handles.priors_c1,'Max')));
    end
else
    set(handles.priore_c1,'String',sprintf('%3.2f',get(handles.priors_c1,'Value')))
end
set(handles.priors_c1,'Value',str2num(get(handles.priore_c1,'String')));
set(handles.priore_c2,'String', sprintf('%3.2f',1-get(handles.priors_c1,'Value')));
set(handles.priors_c2,'Value', (1-get(handles.priors_c1,'Value')));
% --------------------------------------------------------------------
function varargout = priore_c2_Callback(h, eventdata, handles, varargin)
val = str2num(get(handles.priore_c2,'String'));
if isnumeric(val) & length(val) & isreal(val)==1
    if val < get(handles.priore_c2,'Min')
        set(handles.priore_c2, 'String', sprintf('%3.2f',get(handles.priore_c2,'Min')));
    elseif val > get(handles.priore_c2,'Max')
        set(handles.priore_c2, 'String', sprintf('%3.2f',get(handles.priors_c2,'Max')));
    end
else
    set(handles.priore_c2,'String',sprintf('%3.2f',get(handles.priors_c2,'Value')))
end
set(handles.priors_c2,'Value',str2num(get(handles.priore_c2,'String')));
set(handles.priore_c1,'String', sprintf('%3.2f',1-get(handles.priors_c2,'Value')));
set(handles.priors_c1,'Value', (1-get(handles.priors_c2,'Value')));
% --------------------------------------------------------------------
function varargout = priors_c1_Callback(h, eventdata, handles, varargin)
if get(handles.priors_c1, 'Value')<=0 
    set(handles.priors_c1, 'Value', str2num(sprintf('%3.2f',0.01)))
elseif get(handles.priors_c1, 'Value')>=1
    set(handles.priors_c1, 'Value', str2num(sprintf('%3.2f',0.99)))
end
set(handles.priore_c1,'String', num2str(get(handles.priors_c1,'Value')));
set(handles.priore_c2,'String', num2str(1-get(handles.priors_c1,'Value')));
set(handles.priors_c2,'Value', (1-get(handles.priors_c1,'Value')));
% --------------------------------------------------------------------
function varargout = priors_c2_Callback(h, eventdata, handles, varargin)
if get(handles.priors_c2, 'Value') <= 0 
    set(handles.priors_c2, 'Value', str2num(sprintf('%3.2f',0.01)))
elseif get(handles.priors_c2, 'Value') >= 1 
    set(handles.priors_c2, 'Value', str2num(sprintf('%3.2f',0.99)))
end
set(handles.priore_c2,'String', num2str(get(handles.priors_c2,'Value')));
set(handles.priore_c1,'String', num2str(1-get(handles.priors_c2,'Value')));
set(handles.priors_c1,'Value', (1-get(handles.priors_c2,'Value')));
% --------------------------------------------------------------------
function varargout = disc_case_Callback(h, eventdata, handles, varargin)
val = get(handles.disc_case, 'Value');
if val == 1
    case1 = {'Case 1: Features are statistically independent',
        'Each features have same covariance and Covariance Matrix are diagonal.',
        'Samples fall in equal-size hypersperical clusters'};
    outcase1 = textwrap(handles.case_text,case1);
    set(handles.case_text, 'String', outcase1) 
    set(handles.covar11_c1, 'Enable','on')
    set(handles.covar12_c1, 'Enable','inactive','String',sprintf('%3.1f',0.0))
    set(handles.covar21_c1, 'Enable','inactive','String',sprintf('%3.1f',0.0))
    set(handles.covar22_c1, 'Enable','inactive','String',get(handles.covar11_c1,'String'))
    set(handles.covar11_c2, 'Enable','inactive','String',get(handles.covar11_c1,'String'))
    set(handles.covar12_c2, 'Enable','inactive','String',get(handles.covar12_c1,'String'))
    set(handles.covar21_c2, 'Enable','inactive','String',get(handles.covar21_c1,'String'))
    set(handles.covar22_c2, 'Enable','inactive','String',get(handles.covar22_c1,'String'))    
end
if val == 2
    case2 = {'Case 2: Features are not necessarily statistically independent and',
        'Covariance Matrix are identical for both the classes',
        'Samples fall in equal-size hyperellipsoidal'};
    outcase2 = textwrap(handles.case_text,case2);
    set(handles.case_text, 'String', outcase2) 
    set(handles.covar11_c1, 'Enable','on');    set(handles.covar12_c1, 'Enable','on');
    set(handles.covar21_c1, 'Enable','on');    set(handles.covar22_c1, 'Enable','on')
    set(handles.covar11_c2, 'Enable','inactive','String',get(handles.covar11_c1,'String'))
    set(handles.covar12_c2, 'Enable','inactive','String',get(handles.covar12_c1,'String'))
    set(handles.covar21_c2, 'Enable','inactive','String',get(handles.covar21_c1,'String'))
    set(handles.covar22_c2, 'Enable','inactive','String',get(handles.covar22_c1,'String'))  
end
if val == 3
    case3 = {'Case 3: Features are statistically dependent and',
        'Covariance Matrix are different for both the classes'};
    outcase3 = textwrap(handles.case_text,case3);
    set(handles.case_text, 'String', outcase3)
    set(handles.covar12_c1, 'Enable','on')
    set(handles.covar21_c1, 'Enable','on');    set(handles.covar22_c1, 'Enable','on')
    set(handles.covar11_c2, 'Enable','on');    set(handles.covar12_c2, 'Enable','on')
    set(handles.covar21_c2, 'Enable','on');    set(handles.covar22_c2, 'Enable','on')  
end
% --------------------------------------------------------------------
function varargout = figure1_CloseRequestFcn(h, eventdata, handles, varargin)
selection = questdlg('Do you want to exit GUI?',...
    'Close Request Function', 'Yes','No','Yes');
switch selection,
case 'Yes',
    delete(gcf)
case 'No'
    return
end


% --------------------------------------------------------------------
function varargout = helptext_Callback(h, eventdata, handles, varargin)
clc
fid = fopen('help_me_GUI.txt','r');
F = fread(fid);
help_me = char(F')

Contact us at files@mathworks.com