GRASS Programmer's Manual  6.5.svn(2012)-r51648
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Defines
N_tools.c
Go to the documentation of this file.
00001 
00002 /*****************************************************************************
00003 *
00004 * MODULE:       Grass PDE Numerical Library
00005 * AUTHOR(S):    Soeren Gebbert, Berlin (GER) Dec 2006
00006 *               soerengebbert <at> gmx <dot> de
00007 *               
00008 * PURPOSE:      Array managment functions 
00009 *               part of the gpde library
00010 *
00011 * COPYRIGHT:    (C) 2000 by the GRASS Development Team
00012 *
00013 *               This program is free software under the GNU General Public
00014 *               License (>=v2). Read the file COPYING that comes with GRASS
00015 *               for details.
00016 *
00017 *****************************************************************************/
00018 
00019 #include "grass/N_pde.h"
00020 #include "grass/glocale.h"
00021 #include <math.h>
00022 
00023 
00033 double N_calc_arith_mean(double a, double b)
00034 {
00035     double val = 0;
00036 
00037     val = (a + b) / 2.0;
00038 
00039     return val;
00040 }
00041 
00053 double N_calc_arith_mean_n(double *a, int size)
00054 {
00055     double val = 0.0;
00056 
00057     int i;
00058 
00059     for (i = 0; i < size; i++)
00060         val += a[i];
00061 
00062     val = (val / (double)size);
00063 
00064     return val;
00065 }
00066 
00067 
00077 double N_calc_geom_mean(double a, double b)
00078 {
00079     double val = 0;
00080 
00081     val = sqrt(a * b);
00082 
00083     return val;
00084 }
00085 
00097 double N_calc_geom_mean_n(double *a, int size)
00098 {
00099     double val = 1;
00100 
00101     int i;
00102 
00103     for (i = 0; i < size; i++)
00104         val *= a[i];
00105 
00106     val = (double)pow((long double)val, (long double)1.0 / (long double)size);
00107 
00108     return val;
00109 }
00110 
00111 
00121 double N_calc_harmonic_mean(double a, double b)
00122 {
00123     double val = 0.0;
00124 
00125     if ((a + b) != 0)
00126         val = 2.0 * (a * b) / (a + b);
00127 
00128     return val;
00129 }
00130 
00142 double N_calc_harmonic_mean_n(double *a, int size)
00143 {
00144     double val = 0;
00145 
00146     int i;
00147 
00148     for (i = 0; i < size; i++)
00149         if (a[i] != 0.0)
00150             val += 1.0 / a[i];
00151         else
00152             return 0.0;
00153 
00154     if (val == 0.0)
00155         return 0.0;
00156     else
00157         val = 1.0 / (1.0 / (double)size * val);
00158 
00159     return val;
00160 }
00161 
00162 
00172 double N_calc_quad_mean(double a, double b)
00173 {
00174     double val = 0.0;
00175 
00176     val = sqrt((a * a + b * b) / 2.0);
00177 
00178     return val;
00179 }
00180 
00192 double N_calc_quad_mean_n(double *a, int size)
00193 {
00194     double val = 0;
00195 
00196     int i;
00197 
00198     for (i = 0; i < size; i++)
00199         val += a[i] * a[i];
00200 
00201     val = sqrt(val / (double)size);
00202 
00203     return val;
00204 }