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
|
#include <math.h>
#include <grass/arraystats.h>
/*provides basic univar stats */
void AS_basic_stats(double *data, int count, struct GASTATS *stats)
{
int i = 1;
double sum = 0, sumsq = 0, sumabs = 0;
double dev = 0, dev2 = 0;
stats->count = count;
stats->min = data[0];
stats->max = data[count - 1];
for (i = 0; i < count; i++) {
sum += data[i];
sumabs += fabs(data[i]);
sumsq += data[i] * data[i];
}
stats->sum = sum;
stats->sumabs = sumabs;
stats->sumsq = sumsq;
stats->mean = stats->sum / stats->count;
stats->meanabs = stats->sumabs / stats->count;
for (i = 0; i < count; i++) {
dev2 = dev2 + (data[i] - stats->mean) * (data[i] - stats->mean);
dev = dev + (data[i] - stats->mean);
}
stats->var = (dev2 - (dev * dev / stats->count)) / stats->count;
stats->stdev = sqrt(stats->var);
return;
}
void AS_eqdrt(double vectx[], double vecty[], int i1, int i2, double *vabc)
{
double bn = 0, bd = 0, x1 = 0, y1 = 0;
vabc[0] = 0;
vabc[1] = 0;
vabc[2] = 0;
if (i1 == 0) {
x1 = 0;
y1 = 0;
}
else {
x1 = vectx[i1];
y1 = vecty[i1];
}
bn = y1 - vecty[i2];
bd = x1 - vectx[i2];
if (bd != 0) {
vabc[1] = bn / bd;
vabc[0] = y1 - vabc[1] * x1;
return;
}
if (bn != 0)
vabc[2] = x1;
else
G_debug(3, "Points are equal\n");
return;
}
|