?? pgauss.m
字號(hào):
function varargout=pgauss(model,options)% PGAUSS Vizualizes set of bivariate Gaussians.%% Synopsis:% pgauss(model)% pgauss(model,options)% h = pgauss(...)%% Description:% pgauss(model) visualizes a set of bivariate Gaussians as% isolines (ellipse) with equal probability density functions.% The Gaussians are given by mean vectors model.Mean [2xncomp]% and covariance matrices model.Cov [2x2xncomp]. If labels% model.y [1xncomp] are given then the Gaussians are distinguished% by colors correspoding to labels.% % pgauss(model,options) structure options controls visualization;% If options.fill equals 1 then Ellipses are filled otherwise only% contours are plotted. The isolines to be drawn are given by % values of probability distribution function in field % options.p [1xncomp]. If length(option.p)==1 then isolines for% all Gaussians are drawn for the same value.% % h = pgauss(...) returns handles of used graphics objects.% % Input:% model [struct] Parameters of Gaussian distributions:% .Mean [2 x ncomp] Mean vectors of ncomp Gaussians.% .Cov [2 x 2 x ncomp] Covariance matrices.% .y [1 x ncomp] (optional) Labels of Gaussians used to distingush % them by colors. If y is not given then y = 1:ncomp is used.% % options.p [1 x ncomp] Value of p.d.f on the draw isolines.% If not given then p is computed to make non-overlapping isolines.% options.fill [int] If 1 then ellipses are filled (default 0).%% Output:% h [1 x nobjects] Handles of used graphics objects.%% Example:% data = load('riply_trn');% model = mlcgmm( data );% figure; hold on;% ppatterns(data);% pgauss( model );%% About: Statistical Pattern Recognition Toolbox% (C) 1999-2003, Written by Vojtech Franc and Vaclav Hlavac% <a href="http://www.cvut.cz">Czech Technical University Prague</a>% <a href="http://www.feld.cvut.cz">Faculty of Electrical Engineering</a>% <a href="http://cmp.felk.cvut.cz">Center for Machine Perception</a>% Modifications:% 23-aug-2004, VF, uses model.y to color plots in 1D case% 30-apr-2004, VF[dim,ncomp]=size(model.Mean);if nargin < 2, options=[]; else options=c2s(options); endif ~isfield( options, 'fill'), options.fill= 0; endif ~isfield( options, 'interp'), options.interp = 30; endif ~isfield(model,'y'), model.y = 1:ncomp; endoldhold=ishold;hold on;h=[];if dim == 1, % univariate variances can be given as a vector if size(model.Cov,1) ~= size(model.Cov,2), model.Cov = reshape(model.Cov,1,1,ncomp); end a = axis; x = linspace(a(1),a(2),options.interp*3); for i=1:ncomp, y = pdfgauss(x, model.Mean(i),model.Cov(:,:,i)); h = [h, plot(x,y,marker_color(model.y(i)))]; end else % computes isolines values automatically if ~isfield( options, 'p'), minr=inf; if ncomp > 1, for i=1:ncomp-1, for j=i+1:ncomp, distr.Mean=[model.Mean(:,i),model.Mean(:,j)]; distr.Cov(:,:,1)=model.Cov(:,:,i); distr.Cov(:,:,2)=model.Cov(:,:,j); fld = androrig( distr ); if minr > fld.r, minr = fld.r; minCov = 0.5*(model.Cov(:,:,j)+model.Cov(:,:,i)); end end end for i=1:ncomp, options.p(i) = exp(-0.5*(minr*0.95)^2)/... (2*pi*sqrt(det(model.Cov(:,:,i)))); end else minr = 1; options.p = exp(-0.5*(minr*0.95)^2)/... (2*pi*sqrt(det(model.Cov))); end elseif length(options.p) == 1 , options.p = options.p*ones(ncomp,1); end for i=1:ncomp, r = sqrt( -2*log(options.p(i)*2*pi*sqrt(det(model.Cov(:,:,i)))) ); [x,y] = ellips(model.Mean(:,i),inv(model.Cov(:,:,i)),... r,options.interp ); if options.fill, h=[h,fill(x,y,marker_color(model.y(i)))]; h=[h,plot(model.Mean(1,i),model.Mean(2,i),'k+')]; h=[h,text(model.Mean(1,i),model.Mean(2,i),['gauss ' num2str(i)])]; set(h(end),'HorizontalAlignment','center', ... 'VerticalAlignment','bottom','fontsize',12 ); T = [[options.p(i);length(x)] [x;y]]; tmp1=clabel(T,'fontsize',12); h = [h,tmp1(:)']; else h=[h,plot(x,y,marker_color(model.y(i)))]; h=[h,plot(model.Mean(1,i),model.Mean(2,i),['+' marker_color(model.y(i))])]; h=[h,text(model.Mean(1,i),model.Mean(2,i),['gauss ' num2str(i)])]; set(h(end),'HorizontalAlignment','center', ... 'VerticalAlignment','bottom','fontsize',12,... 'color',marker_color(model.y(i))); T = [[options.p(i);length(x)] [x;y]]; tmp1=clabel(T,'fontsize',12); set(tmp1,'Color',marker_color(model.y(i))); h = [h,tmp1(:)']; end drawnow; endendif ~oldhold, hold off; endif nargout > 0, varargout{1} = h; endreturn;
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -