/usr/share/octave/packages/nan-2.8.1/mahal.m is in octave-nan 2.8.1-1ubuntu2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | 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:
% Copyright (C) 2009,2014 by Alois Schloegl <alois.schloegl@ist.ac.at>
% 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;
% compute mean of Y and remove it
[Y,m] = center(Y,1);
% compute inverse covariance matrix
[CC,MM] = covm(Y,'M');
IR= inv(CC./max(0,MM-1));
% remove mean of Y
X = X-m(ones(size(X,1),1),:);
d = sum((X*IR).*X,2)
|