GRASS 8 Programmer's Manual 8.6.0dev(2026)-c83afef6d3
Loading...
Searching...
No Matches
n_tools.c
Go to the documentation of this file.
1/*****************************************************************************
2 *
3 * MODULE: Grass PDE Numerical Library
4 * AUTHOR(S): Soeren Gebbert, Berlin (GER) Dec 2006
5 * soerengebbert <at> gmx <dot> de
6 *
7 * PURPOSE: Array management functions
8 * part of the gpde library
9 *
10 * SPDX-FileCopyrightText: 2000 GRASS Development Team
11 * SPDX-License-Identifier: GPL-2.0-or-later
12 *
13 *****************************************************************************/
14
15#include <math.h>
16#include <grass/N_pde.h>
17#include <grass/glocale.h>
18
19/*!
20 * \brief Calculate the arithmetic mean of values a and b
21 *
22 * mean = (a+b)/2
23 *
24 * \param a double
25 * \param b double
26 * \return val double
27 * */
28double N_calc_arith_mean(double a, double b)
29{
30 double val = 0;
31
32 val = (a + b) / 2.0;
33
34 return val;
35}
36
37/*!
38 * \brief Calculate the arithmetic mean of the values in vector a
39 * of size n
40 *
41 * n = [0 ... size[
42 * mean = (a[0] + a[1] + ... + a[n])/size
43 *
44 * \param a double * -- the value vector
45 * \param size int -- the size of the vector a
46 * \return val double
47 * */
48double N_calc_arith_mean_n(double *a, int size)
49{
50 double val = 0.0;
51 int i;
52
53 for (i = 0; i < size; i++)
54 val += a[i];
55
56 val = (val / (double)size);
57
58 return val;
59}
60
61/*!
62 * \brief Calculate the geometrical mean of values a and b
63 *
64 * mean = sqrt(a*b)
65 *
66 * \param a double
67 * \param b double
68 * \return val double
69 * */
70double N_calc_geom_mean(double a, double b)
71{
72 double val = 0;
73
74 val = sqrt(a * b);
75
76 return val;
77}
78
79/*!
80 * \brief Calculate the geometrical mean of the values in vector a
81 * of size n
82 *
83 * n = [0 ... size[
84 * mean = pow((a[0] * a[1] * ... * a[n]), 1.0/size)
85 *
86 * \param a double * -- the value vector
87 * \param size int -- the size of the vector a
88 * \return val double
89 * */
90double N_calc_geom_mean_n(double *a, int size)
91{
92 double val = 1;
93 int i;
94
95 for (i = 0; i < size; i++)
96 val *= a[i];
97
98 val = (double)pow((long double)val, (long double)1.0 / (long double)size);
99
100 return val;
101}
102
103/*!
104 * \brief Calculate the harmonical mean of values a and b
105 *
106 * mean = 2*(a*b)/(a + b)
107 *
108 * \param a double
109 * \param b double
110 * \return val double -- if (a + b) == 0, a 0 is returned
111 * */
112double N_calc_harmonic_mean(double a, double b)
113{
114 double val = 0.0;
115
116 if ((a + b) != 0)
117 val = 2.0 * (a * b) / (a + b);
118
119 return val;
120}
121
122/*!
123 * \brief Calculate the harmonical mean of the values in vector a
124 * of size n
125 *
126 * n = [0 ... size[
127 * mean = 1/(1/size *(1/a[0] + 1/a[1] + ... + 1/a[n]))
128 *
129 * \param a double * -- the value vector
130 * \param size int -- the size of the vector a
131 * \return val double -- if one division with 0 is detected, 0 will be returned
132 * */
133double N_calc_harmonic_mean_n(double *a, int size)
134{
135 double val = 0;
136 int i;
137
138 for (i = 0; i < size; i++)
139 if (a[i] != 0.0)
140 val += 1.0 / a[i];
141 else
142 return 0.0;
143
144 if (val == 0.0)
145 return 0.0;
146 else
147 val = 1.0 / (1.0 / (double)size * val);
148
149 return val;
150}
151
152/*!
153 * \brief Calculate the quadratic mean of values a and b
154 *
155 * mean = sqrt((a*a + b*b)/2)
156 *
157 * \param a double
158 * \param b double
159 * \return val double
160 * */
161double N_calc_quad_mean(double a, double b)
162{
163 double val = 0.0;
164
165 val = sqrt((a * a + b * b) / 2.0);
166
167 return val;
168}
169
170/*!
171 * \brief Calculate the quadratic mean of the values in vector a
172 * of size n
173 *
174 * n = [0 ... size[
175 * mean = sqrt((a[0]*a[0] + a[1]*a[1] + ... + a[n]*a[n])/size)
176 *
177 * \param a double * -- the value vector
178 * \param size int -- the size of the vector a
179 * \return val double
180 * */
181double N_calc_quad_mean_n(double *a, int size)
182{
183 double val = 0;
184 int i;
185
186 for (i = 0; i < size; i++)
187 val += a[i] * a[i];
188
189 val = sqrt(val / (double)size);
190
191 return val;
192}
double N_calc_geom_mean_n(double *a, int size)
Calculate the geometrical mean of the values in vector a of size n.
Definition n_tools.c:90
double N_calc_harmonic_mean_n(double *a, int size)
Calculate the harmonical mean of the values in vector a of size n.
Definition n_tools.c:133
double N_calc_quad_mean_n(double *a, int size)
Calculate the quadratic mean of the values in vector a of size n.
Definition n_tools.c:181
double N_calc_geom_mean(double a, double b)
Calculate the geometrical mean of values a and b.
Definition n_tools.c:70
double N_calc_arith_mean_n(double *a, int size)
Calculate the arithmetic mean of the values in vector a of size n.
Definition n_tools.c:48
double N_calc_arith_mean(double a, double b)
Calculate the arithmetic mean of values a and b.
Definition n_tools.c:28
double N_calc_quad_mean(double a, double b)
Calculate the quadratic mean of values a and b.
Definition n_tools.c:161
double N_calc_harmonic_mean(double a, double b)
Calculate the harmonical mean of values a and b.
Definition n_tools.c:112
double b
Definition r_raster.c:37