GRASS Programmer's Manual
6.4.2(2012)
|
00001 #include <math.h> 00002 #include <grass/arraystats.h> 00003 00004 00005 /*provides basic univar stats */ 00006 void basic_stats(double *data, int count, struct GASTATS *stats) 00007 { 00008 int i = 1; 00009 double sum = 0, sumsq = 0, sumabs = 0; 00010 double dev = 0, dev2 = 0; 00011 00012 stats->count = count; 00013 stats->min = data[0]; 00014 stats->max = data[count - 1]; 00015 00016 for (i = 0; i < count; i++) { 00017 sum += data[i]; 00018 sumabs += fabs(data[i]); 00019 sumsq += data[i] * data[i]; 00020 } 00021 stats->sum = sum; 00022 stats->sumabs = sumabs; 00023 stats->sumsq = sumsq; 00024 00025 stats->mean = stats->sum / stats->count; 00026 stats->meanabs = stats->sumabs / stats->count; 00027 for (i = 0; i < count; i++) { 00028 dev2 = dev2 + (data[i] - stats->mean) * (data[i] - stats->mean); 00029 dev = dev + (data[i] - stats->mean); 00030 } 00031 00032 00033 stats->var = (dev2 - (dev * dev / stats->count)) / stats->count; 00034 stats->stdev = sqrt(stats->var); 00035 00036 return; 00037 } 00038 00039 00040 void eqdrt(double vectx[], double vecty[], int i1, int i2, double *vabc) 00041 { 00042 double bn = 0, bd = 0, x1 = 0, y1 = 0; 00043 00044 vabc[0] = 0; 00045 vabc[1] = 0; 00046 vabc[2] = 0; 00047 if (i1 == 0) { 00048 x1 = 0; 00049 y1 = 0; 00050 } 00051 else { 00052 x1 = vectx[i1]; 00053 y1 = vecty[i1]; 00054 } 00055 bn = y1 - vecty[i2]; 00056 bd = x1 - vectx[i2]; 00057 if (bd != 0) { 00058 vabc[1] = bn / bd; 00059 vabc[0] = y1 - vabc[1] * x1; 00060 return; 00061 } 00062 if (bn != 0) 00063 vabc[2] = x1; 00064 else 00065 G_debug(3, "Points are equal\n"); 00066 return; 00067 }