|
GRASS Programmer's Manual
6.5.svn(2012)-r51648
|
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 }