GRASS Programmer's Manual  6.4.2(2012)
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     int i;
00057 
00058     for (i = 0; i < size; i++)
00059         val += a[i];
00060 
00061     val = (val / (double)size);
00062 
00063     return val;
00064 }
00065 
00066 
00076 double N_calc_geom_mean(double a, double b)
00077 {
00078     double val = 0;
00079 
00080     val = sqrt(a * b);
00081 
00082     return val;
00083 }
00084 
00096 double N_calc_geom_mean_n(double *a, int size)
00097 {
00098     double val = 1;
00099     int i;
00100 
00101     for (i = 0; i < size; i++)
00102         val *= a[i];
00103 
00104     val = (double)pow((long double)val, (long double)1.0 / (long double)size);
00105 
00106     return val;
00107 }
00108 
00109 
00119 double N_calc_harmonic_mean(double a, double b)
00120 {
00121     double val = 0.0;
00122 
00123     if ((a + b) != 0)
00124         val = 2.0 * (a * b) / (a + b);
00125 
00126     return val;
00127 }
00128 
00140 double N_calc_harmonic_mean_n(double *a, int size)
00141 {
00142     double val = 0;
00143     int i;
00144 
00145     for (i = 0; i < size; i++)
00146         if (a[i] != 0.0)
00147             val += 1.0 / a[i];
00148         else
00149             return 0.0;
00150 
00151     if (val == 0.0)
00152         return 0.0;
00153     else
00154         val = 1.0 / (1.0 / (double)size * val);
00155 
00156     return val;
00157 }
00158 
00159 
00169 double N_calc_quad_mean(double a, double b)
00170 {
00171     double val = 0.0;
00172 
00173     val = sqrt((a * a + b * b) / 2.0);
00174 
00175     return val;
00176 }
00177 
00189 double N_calc_quad_mean_n(double *a, int size)
00190 {
00191     double val = 0;
00192     int i;
00193 
00194     for (i = 0; i < size; i++)
00195         val += a[i] * a[i];
00196 
00197     val = sqrt(val / (double)size);
00198 
00199     return val;
00200 }
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines