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')