Home > gmmbayestb-v1.0 > gmmbvl_em_step_partial.m

gmmbvl_em_step_partial

PURPOSE ^

SYNOPSIS ^

function [W,M,R] = gmmbvl_em_step_partial(X,W,M,R,P,n_all,plo)

DESCRIPTION ^

 $Name:  $

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 function [W,M,R] = gmmbvl_em_step_partial(X,W,M,R,P,n_all,plo)
0002 %
0003 % $Name:  $
0004 
0005 [n,d] = size(X); n1=ones(n,1);d1=ones(1,d);
0006 if plo
0007     figure(1), plot(X(:,1),X(:,2),'g+');
0008     hold on;
0009 end
0010 
0011 Psum = sum(P);
0012 
0013 for j = 1:length(W)
0014     if Psum(j) > realmin
0015         W(j) = Psum(j) / n_all;
0016         M(j,:) = P(:,j)' * X ./ Psum(j);
0017         Mj = X-n1*M(j,:);
0018         Sj = (Mj .* (P(:,j)*d1))' * Mj / Psum(j);
0019         % check for singularities
0020         L = svd(Sj);  % get smallest eigenvalue
0021         if L(d) > realmin 
0022             [Rj,p] = chol(Sj);
0023             if p == 0
0024                 R(j,:) = Rj(:)';
0025             end
0026         end
0027         % plot ellipses
0028         if plo
0029             [U,L,V] = svd(Sj); 
0030             phi = acos(V(1,1));
0031             if V(2,1) < 0
0032                 phi = 2*pi - phi;
0033             end
0034             plot(M(j,1),M(j,2),'k.',M(j,1),M(j,2),'k+');
0035             
0036             % This code is commented out, because there is no
0037             % variable 'l' defined.
0038             %gmmbvl_ellipse( 2*sqrt(l(1)), 2*sqrt(l(2)), phi, ...
0039             %                M(j,1), M(j,2), 'k' );
0040         end
0041 
0042     end
0043 end
0044 
0045 if plo
0046     a = (max(X(:,1)) - min(X(:,1))) / 10;
0047     b = (max(X(:,2)) - min(X(:,2))) / 10;
0048     drawnow;
0049     hold off;
0050 end
0051

Generated on Thu 14-Apr-2005 13:50:22 by m2html © 2003