GRASS Programmer's Manual  6.4.2(2012)
c_var.c
Go to the documentation of this file.
00001 #include <grass/gis.h>
00002 
00003 void c_var(DCELL * result, DCELL * values, int n, const void *closure)
00004 {
00005     DCELL sum, ave, sumsq;
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     }
00038 
00039     *result = sumsq / count;
00040 }
00041 
00042 void w_var(DCELL * result, DCELL(*values)[2], int n, const void *closure)
00043 {
00044     DCELL sum, ave, sumsq;
00045     int count;
00046     int i;
00047 
00048     sum = 0.0;
00049     count = 0;
00050 
00051     for (i = 0; i < n; i++) {
00052         if (G_is_d_null_value(&values[i][0]))
00053             continue;
00054 
00055         sum += values[i][0] * values[i][1];
00056         count += values[i][1];
00057     }
00058 
00059     if (count == 0) {
00060         G_set_d_null_value(result, 1);
00061         return;
00062     }
00063 
00064     ave = sum / count;
00065 
00066     sumsq = 0;
00067 
00068     for (i = 0; i < n; i++) {
00069         DCELL d;
00070 
00071         if (G_is_d_null_value(&values[i][0]))
00072             continue;
00073 
00074         d = values[i][0] - ave;
00075         sumsq += d * d * values[i][1];
00076     }
00077 
00078     *result = sumsq / count;
00079 }
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines