X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?p=CreaPhase.git;a=blobdiff_plain;f=octave_packages%2Feconometrics-1.0.8%2Fkernel_density_nodes.m;fp=octave_packages%2Feconometrics-1.0.8%2Fkernel_density_nodes.m;h=9fcc73e59bf396cb2e4e3ab126ff13742c6650a1;hp=0000000000000000000000000000000000000000;hb=c880e8788dfc484bf23ce13fa2787f2c6bca4863;hpb=1705066eceaaea976f010f669ce8e972f3734b05 diff --git a/octave_packages/econometrics-1.0.8/kernel_density_nodes.m b/octave_packages/econometrics-1.0.8/kernel_density_nodes.m new file mode 100644 index 0000000..9fcc73e --- /dev/null +++ b/octave_packages/econometrics-1.0.8/kernel_density_nodes.m @@ -0,0 +1,54 @@ +# Copyright (C) 2006, 2007 Michael Creel +# under the terms of the GNU General Public License. +# +# 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, see . + +# kernel_density_nodes: for internal use by kernel_density - does calculations on nodes + +function z = kernel_density_nodes(eval_points, data, do_cv, kernel, points_per_node, nslaves, debug) + + if (nslaves > 0) + global NEWORLD + [info, myrank] = MPI_Comm_rank(NEWORLD); + else myrank = 0; # if not parallel then do all on master node + endif + + if myrank == 0 # Do this if I'm master + startblock = nslaves*points_per_node + 1; + endblock = rows(eval_points); + else # this is for the slaves + startblock = myrank*points_per_node - points_per_node + 1; + endblock = myrank*points_per_node; + endif + + # the block of eval_points this node does + myeval = eval_points(startblock:endblock,:); + nn = rows(myeval); + n = rows(data); + + W = __kernel_weights(data, myeval, kernel); + if (do_cv) + W = W - diag(diag(W)); + z = sum(W,2) / (n-1); + else + z = sum(W,2) / n; + endif + + if debug + printf("z on node %d: \n", myrank); + z' + endif +endfunction + +