GRASS GIS 8 Programmer's Manual 8.3.2(2024)-exported
Loading...
Searching...
No Matches
c_kurt.c
Go to the documentation of this file.
1#include <grass/gis.h>
2#include <grass/raster.h>
3
4void c_kurt(DCELL *result, DCELL *values, int n, const void *closure UNUSED)
5{
6 DCELL sum, ave, sumsq, sumqt, var;
7 int count;
8 int i;
9
10 sum = 0.0;
11 count = 0;
12
13 for (i = 0; i < n; i++) {
14 if (Rast_is_d_null_value(&values[i]))
15 continue;
16
17 sum += values[i];
18 count++;
19 }
20
21 if (count == 0) {
22 Rast_set_d_null_value(result, 1);
23 return;
24 }
25
26 ave = sum / count;
27
28 sumsq = 0;
29 sumqt = 0;
30
31 for (i = 0; i < n; i++) {
32 DCELL d;
33
34 if (Rast_is_d_null_value(&values[i]))
35 continue;
36
37 d = values[i] - ave;
38 sumsq += d * d;
39 sumqt += d * d * d * d;
40 }
41
42 var = sumsq / count;
43
44 *result = sumqt / (count * var * var) - 3;
45}
46
47void w_kurt(DCELL *result, DCELL (*values)[2], int n,
48 const void *closure UNUSED)
49{
50 DCELL sum, ave, sumsq, sumqt, var;
51 DCELL count;
52 int i;
53
54 sum = 0.0;
55 count = 0;
56
57 for (i = 0; i < n; i++) {
58 if (Rast_is_d_null_value(&values[i][0]))
59 continue;
60
61 sum += values[i][0] * values[i][1];
62 count += values[i][1];
63 }
64
65 if (count == 0) {
66 Rast_set_d_null_value(result, 1);
67 return;
68 }
69
70 ave = sum / count;
71
72 sumsq = 0;
73 sumqt = 0;
74
75 for (i = 0; i < n; i++) {
76 DCELL d;
77
78 if (Rast_is_d_null_value(&values[i][0]))
79 continue;
80
81 d = values[i][0] - ave;
82 sumsq += d * d * values[i][1];
83 sumqt += d * d * d * values[i][1];
84 }
85
86 var = sumsq / count;
87
88 *result = sumqt / (count * var * var) - 3;
89}
void w_kurt(DCELL *result, DCELL(*values)[2], int n, const void *closure UNUSED)
Definition c_kurt.c:47
void c_kurt(DCELL *result, DCELL *values, int n, const void *closure UNUSED)
Definition c_kurt.c:4
int count