gusucode.com > 用粒子滤波算法进行跟踪的matlab代码 > gmm_utilities/gauss_multiply.m
function [x,P,w] = gauss_multiply(x1,P1, x2,P2, logflag) %function [x,P,w] = gauss_multiply(x1,P1, x2,P2, logflag) if nargin == 4, logflag = 0; end S = P1 + P2; Sc = chol(S); Sci = inv(Sc); Wc = P1*Sci; % "normalised" gain vc = Sci'*(x2-x1); % "normalised" innovation % Update x = x1 + Wc*vc; P = P1 - Wc*Wc'; % Update weight D = size(x,1); numer = -0.5 * vc'*vc; if logflag ~= 0 denom = 0.5*D*log(2*pi) + sum(log(diag(Sc))); w = numer - denom; else denom = (2*pi)^(D/2) * prod(diag(Sc)); w = exp(numer) / denom; end