GRASS Programmer's Manual
6.4.2(2012)
|
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 }