📄 discriminant.m
字号:
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));endrange = [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'); endendif 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)endtoc;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')endif (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'))); endelse set(handles.priore_c1,'String',sprintf('%3.2f',get(handles.priors_c1,'Value')))endset(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'))); endelse set(handles.priore_c2,'String',sprintf('%3.2f',get(handles.priors_c2,'Value')))endset(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)))endset(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)))endset(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')) endif 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')) endif 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' returnend% --------------------------------------------------------------------function varargout = helptext_Callback(h, eventdata, handles, varargin)clcfid = fopen('help_me_GUI.txt','r');F = fread(fid);help_me = char(F')
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -