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