⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gaussianlog.m

📁 一个关于数据聚类和模式识别的程序,在生物化学,化学中因该都可以用到.希望对大家有用,谢谢支持
💻 M
字号:
function out = gaussianLog(data, gaussianParam, gConst);
% gaussianLog: Multi-dimensional log Gaussian propability density function
%	Usage: out = gaussianLog(data, gaussianParam, gConst)
%	data: d x n data matrix, representing n data vector of dimension d
%	mu: d x 1 vector
%	sigma: d x d matrix
%		d x 1 vector
%		1 x 1 scalar
%	out: 1 x n vector
%
%	See also "gaussian".

%	Roger Jang, 20050327

if nargin<1, selfdemo; return; end
[dim, dataNum]=size(data); 

dataMinusMu = data-repmat(gaussianParam.mu, 1, dataNum);
if prod(size(gaussianParam.sigma))==1	% identity covariance matrix times a constant for each Gaussian
	if nargin<3
		out = -sum(dataMinusMu.*dataMinusMu/gaussianParam.sigma, 1)/2-dim/2*log(2*pi)-dim/2*log(gaussianParam.sigma);
	else
		out = -sum(dataMinusMu.*dataMinusMu/gaussianParam.sigma, 1)/2+gConst;
	end
elseif prod(size(gaussianParam.sigma))==dim	% diagonal covariance matrix for each Gaussian
	if nargin<3
		out = -sum(dataMinusMu./repmat(gaussianParam.sigma, 1, dataNum).*dataMinusMu, 1)/2-dim/2*log(2*pi)-log(prod(gaussianParam.sigma))/2;
	else
		out = -sum(dataMinusMu./repmat(gaussianParam.sigma, 1, dataNum).*dataMinusMu, 1)/2+gConst;
	end
else	% full covariance matrix for each Gaussian
	invCov = inv(gaussianParam.sigma);			% For repeated invocation of this function, this step should be moved out of this function
	if nargin<3
		out = -sum(dataMinusMu.*(invCov*dataMinusMu), 1)/2-dim/2*log(2*pi)-log(det(gaussianParam.sigma))/2;
	else
		out = -sum(dataMinusMu.*(invCov*dataMinusMu), 1)/2+gConst;
	end
end

% ====== Self demo
function selfdemo
x = linspace(-10, 10);
gaussianParam.mu = 0;
gaussianParam.sigma = 0.1;

y1 = log(gaussian(x, gaussianParam));
y2 = gaussianLog(x, gaussianParam);
diff = abs(y1-y2);

subplot(2,1,1); plot(x, y1, x, y2);
subplot(2,1,2); plot(x, diff);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -