GRASS Programmer's Manual  6.4.2(2012)
c_skew.c
Go to the documentation of this file.
00001 #include <math.h>
00002 #include <grass/gis.h>
00003 
00004 void c_skew(DCELL * result, DCELL * values, int n, const void *closure)
00005 {
00006     DCELL sum, ave, sumsq, sumcb, sdev;
00007     int count;
00008     int i;
00009 
00010     sum = 0.0;
00011     count = 0;
00012 
00013     for (i = 0; i < n; i++) {
00014         if (G_is_d_null_value(&values[i]))
00015             continue;
00016 
00017         sum += values[i];
00018         count++;
00019     }
00020 
00021     if (count == 0) {
00022         G_set_d_null_value(result, 1);
00023         return;
00024     }
00025 
00026     ave = sum / count;
00027 
00028     sumsq = 0;
00029 
00030     for (i = 0; i < n; i++) {
00031         DCELL d;
00032 
00033         if (G_is_d_null_value(&values[i]))
00034             continue;
00035 
00036         d = values[i] - ave;
00037         sumsq += d * d;
00038         sumcb += d * d * d;
00039     }
00040 
00041     sdev = sqrt(sumsq / count);
00042 
00043     *result = sumcb / (count * sdev * sdev * sdev);
00044 }
00045 
00046 void w_skew(DCELL * result, DCELL(*values)[2], int n, const void *closure)
00047 {
00048     DCELL sum, ave, sumsq, sumcb, sdev;
00049     int count;
00050     int i;
00051 
00052     sum = 0.0;
00053     count = 0;
00054 
00055     for (i = 0; i < n; i++) {
00056         if (G_is_d_null_value(&values[i][0]))
00057             continue;
00058 
00059         sum += values[i][0] * values[i][1];
00060         count += values[i][1];
00061     }
00062 
00063     if (count == 0) {
00064         G_set_d_null_value(result, 1);
00065         return;
00066     }
00067 
00068     ave = sum / count;
00069 
00070     sumsq = 0;
00071 
00072     for (i = 0; i < n; i++) {
00073         DCELL d;
00074 
00075         if (G_is_d_null_value(&values[i][0]))
00076             continue;
00077 
00078         d = values[i][0] - ave;
00079         sumsq += d * d * values[i][1];
00080         sumcb += d * d * d * values[i][1];
00081     }
00082 
00083     sdev = sqrt(sumsq / count);
00084 
00085     *result = sumcb / (count * sdev * sdev * sdev);
00086 }
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines