0001 function g=Gaussian(varargin)
0002
0003
0004
0005
0006
0007
0008 switch nargin
0009 case 1
0010 if isa(varargin{1},'Gaussian')
0011 g=varargin{1};
0012 else
0013 if isa(varargin{1},'double')
0014
0015
0016 n=size(varargin{1},2);
0017 m=mean(varargin{1},2);
0018 Pz=(varargin{1}-repmat(m,1,n));
0019 C=(Pz*Pz')/(n-1);
0020 g=Gaussian(m,C);
0021 else
0022 error('Gaussian copy constructor from not a Guassian and not a raw data');
0023 end
0024 end
0025
0026 case 2
0027 g.m=varargin{1};
0028 g.dim=size(g.m,1);
0029 g.S=varargin{2};
0030
0031 if (g.dim~=size(g.S,1)) || (g.dim~=size(g.S,2))
0032 error('Non-coherent size of mean an covariance in Gaussian creation');
0033 end
0034
0035 m=max(max(g.S));
0036 if m==0
0037 g.d=0;
0038 g.iS=inf*eye(g.dim);
0039 g.ct=0;
0040 else
0041 if g.dim==1
0042 g.d=g.S;
0043 g.iS=1/g.S;
0044 g.ct=1/sqrt(2*pi*g.d);
0045 else
0046 R=chol(g.S);
0047 g.d=prod(diag(R))^2;
0048 iR=R\eye(g.dim);
0049 g.iS=iR*iR';
0050
0051 g.ct=1/sqrt(((2*pi)^g.dim)*g.d);
0052 end
0053 end
0054 g=class(g,'Gaussian');
0055 otherwise
0056 error('Wrong number of parameters in Gaussian constructor');
0057 end
0058