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 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
|
#include <math.h>
#include "gis.h"
#include "Vect.h"
#include "global.h"
/*
probability for gaussian distribution
*/
double gaussian2dBySigma(double d, double sigma)
{
double res;
res=1./(2.*M_PI*sigma*sigma)*exp(-d*d/(2.*sigma*sigma));
return(res);
}
double gaussianFunction(double x, double sigma, double dimension)
{
return((1./(pow(2.*M_PI,dimension/2.)*pow(sigma,dimension)))*exp(-0.5*pow(x/sigma,2.)));
}
/*
probability for gaussian distribution
*/
double gaussianKernel(double x, double term)
{
return(term * exp(-(x*x)/2.));
}
double gaussian2dByTerms(d,term1,term2)
/*
term1=1./(2.*M_PI*sigma*sigma)
term2=2.*sigma*sigma;
*/
double d, term1, term2;
{
double res;
res=term1*exp(-d*d/term2);
return(res);
}
double segno(double x){
double y;
y = (x > 0 ? 1. : 0.) + (x < 0 ? -1. : 0.);
return y;
}
double kernel1(d,rs,lambda)
/*
*/
double d, rs, lambda;
{
double res,a;
a=lambda-1.;
if(lambda==1.){
res=1./(M_PI*(d*d+rs*rs));
}else{
res=segno(a)*(a/M_PI)*(pow(rs,2.*a))*(1/pow(d*d+rs*rs,lambda));
}
/* res=1./(M_PI*(d*d+rs*rs));*/
return(res);
}
double invGaussian2d(sigma,prob)
double sigma, prob;
{
double d;
d = sqrt(-2*sigma*sigma*log(prob*M_PI*2*sigma*sigma));
return(d);
}
double euclidean_distance(x,y,n)
/*
euclidean distance between vectors x and y of length n
*/
double *x, *y;
int n;
{
int j;
double out = 0.0;
double tmp;
for(j=0;j<n;j++){
tmp = x[j] - y[j];
out += tmp * tmp;
}
return sqrt(out);
}
|