GRASS GIS 7 Programmer's Manual  7.0.5(2016)-r00000
n_tools.c
Go to the documentation of this file.
1 
2 /*****************************************************************************
3 *
4 * MODULE: Grass PDE Numerical Library
5 * AUTHOR(S): Soeren Gebbert, Berlin (GER) Dec 2006
6 * soerengebbert <at> gmx <dot> de
7 *
8 * PURPOSE: Array managment functions
9 * part of the gpde library
10 *
11 * COPYRIGHT: (C) 2000 by the GRASS Development Team
12 *
13 * This program is free software under the GNU General Public
14 * License (>=v2). Read the file COPYING that comes with GRASS
15 * for details.
16 *
17 *****************************************************************************/
18 
19 #include <math.h>
20 #include <grass/N_pde.h>
21 #include <grass/glocale.h>
22 
23 
33 double N_calc_arith_mean(double a, double b)
34 {
35  double val = 0;
36 
37  val = (a + b) / 2.0;
38 
39  return val;
40 }
41 
53 double N_calc_arith_mean_n(double *a, int size)
54 {
55  double val = 0.0;
56  int i;
57 
58  for (i = 0; i < size; i++)
59  val += a[i];
60 
61  val = (val / (double)size);
62 
63  return val;
64 }
65 
66 
76 double N_calc_geom_mean(double a, double b)
77 {
78  double val = 0;
79 
80  val = sqrt(a * b);
81 
82  return val;
83 }
84 
96 double N_calc_geom_mean_n(double *a, int size)
97 {
98  double val = 1;
99  int i;
100 
101  for (i = 0; i < size; i++)
102  val *= a[i];
103 
104  val = (double)pow((long double)val, (long double)1.0 / (long double)size);
105 
106  return val;
107 }
108 
109 
119 double N_calc_harmonic_mean(double a, double b)
120 {
121  double val = 0.0;
122 
123  if ((a + b) != 0)
124  val = 2.0 * (a * b) / (a + b);
125 
126  return val;
127 }
128 
140 double N_calc_harmonic_mean_n(double *a, int size)
141 {
142  double val = 0;
143  int i;
144 
145  for (i = 0; i < size; i++)
146  if (a[i] != 0.0)
147  val += 1.0 / a[i];
148  else
149  return 0.0;
150 
151  if (val == 0.0)
152  return 0.0;
153  else
154  val = 1.0 / (1.0 / (double)size * val);
155 
156  return val;
157 }
158 
159 
169 double N_calc_quad_mean(double a, double b)
170 {
171  double val = 0.0;
172 
173  val = sqrt((a * a + b * b) / 2.0);
174 
175  return val;
176 }
177 
189 double N_calc_quad_mean_n(double *a, int size)
190 {
191  double val = 0;
192  int i;
193 
194  for (i = 0; i < size; i++)
195  val += a[i] * a[i];
196 
197  val = sqrt(val / (double)size);
198 
199  return val;
200 }
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:189
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:53
double N_calc_quad_mean(double a, double b)
Calculate the quadratic mean of values a and b.
Definition: n_tools.c:169
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:140
double N_calc_geom_mean(double a, double b)
Calculate the geometrical mean of values a and b.
Definition: n_tools.c:76
double b
double N_calc_harmonic_mean(double a, double b)
Calculate the harmonical mean of values a and b.
Definition: n_tools.c:119
double N_calc_arith_mean(double a, double b)
Calculate the arithmetic mean of values a and b.
Definition: n_tools.c:33
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:96