X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?p=CreaPhase.git;a=blobdiff_plain;f=octave_packages%2Fnan-2.5.5%2Fmahal.m;fp=octave_packages%2Fnan-2.5.5%2Fmahal.m;h=65870405a82250434f293ad9072eaab441734a20;hp=0000000000000000000000000000000000000000;hb=c880e8788dfc484bf23ce13fa2787f2c6bca4863;hpb=1705066eceaaea976f010f669ce8e972f3734b05 diff --git a/octave_packages/nan-2.5.5/mahal.m b/octave_packages/nan-2.5.5/mahal.m new file mode 100644 index 0000000..6587040 --- /dev/null +++ b/octave_packages/nan-2.5.5/mahal.m @@ -0,0 +1,48 @@ +function [d] = mahal(X,Y) +% MAHAL return the Mahalanobis' D-square distance between the +% multivariate samples x and y, which must have the same number +% of components (columns), but may have a different number of observations (rows). +% +% d = mahal(X,Y) +% +% d(k) = (X(k,:)-MU)*inv(SIGMA)*(X(k,:)-MU)' +% +% where MU and SIGMA are the mean and the covariance matrix of Y +% +% +% see also: TRAIN_SC, TEST_SC, COVM +% +% References: + +% $Id: train_sc.m 2140 2009-07-02 12:03:55Z schloegl $ +% Copyright (C) 2009 by Alois Schloegl +% This function is part of the NaN-toolbox +% http://pub.ist.ac.at/~schloegl/matlab/NaN/ + +% This program is free software; you can redistribute it and/or +% modify it under the terms of the GNU General Public License +% as published by the Free Software Foundation; either version 2 +% of the License, or (at your option) any later version. +% +% This program is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with this program; if not, write to the Free Software +% Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. + +sx = size(X); +sy = size(Y); + +if sx(2)~=sy(2), + error('number of columns of X and Y do not fit'); +end; + +IR = inv(covm(Y,'E')); +IR(1,1) = IR(1,1)-1; + +D = [ones(size(X,1),1),X]; +d = sum((D*IR).*D,2); +