mdiggory    2003/06/17 18:56:03

  Modified:    math/src/java/org/apache/commons/math/stat StatUtils.java
  Log:
  Addition of sumLog method (natural) to get the sum of the Logs. Altered 
GeometricMean to calculate the geometricMean from the sum of logs.
  
  Revision  Changes    Path
  1.4       +20 -4     
jakarta-commons-sandbox/math/src/java/org/apache/commons/math/stat/StatUtils.java
  
  Index: StatUtils.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons-sandbox/math/src/java/org/apache/commons/math/stat/StatUtils.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- StatUtils.java    17 Jun 2003 23:23:07 -0000      1.3
  +++ StatUtils.java    18 Jun 2003 01:56:03 -0000      1.4
  @@ -92,7 +92,7 @@
        * Returns the product for this collection of values
        * @param values Is a double[] containing the values
        * @return the product values or Double.NaN if the array is empty
  -      */
  +     */
       public static double product(double[] values) {
           double product = Double.NaN;
           if( values.length > 0 ) {
  @@ -105,13 +105,29 @@
       }
       
       /**
  +     * Returns the sum of the natural logs for this collection of values
  +     * @param values Is a double[] containing the values
  +     * @return the sumLog value or Double.NaN if the array is empty
  +      */
  +    public static double sumLog(double[] values) {
  +        double sumLog = Double.NaN;
  +        if( values.length > 0 ) {
  +            sumLog = 0.0;
  +            for( int i = 0; i < values.length; i++) {
  +                sumLog += Math.log(values[i]);
  +            }
  +        }
  +        return sumLog;
  +    }
  +    
  +    /**
        * Returns the geometric mean for this collection of values
        * @param values Is a double[] containing the values
        * @return the geometric mean or Double.NaN if the array is empty or
        * any of the values are &lt;= 0.
         */
       public static double geometricMean(double[] values) {
  -        return Math.pow(product(values),(1.0/values.length));
  +        return Math.exp(sumLog(values) / (double)values.length);
       }
   
        /**
  @@ -121,7 +137,7 @@
        * @return the mean of the values or Double.NaN if the array is empty
         */
        public static double mean(double[] values) {
  -             return sum(values) / values.length;
  +             return sum(values) / (double)values.length;
        }
   
       /**
  @@ -155,7 +171,7 @@
                        for (int i = 0; i < values.length; i++) {
                                accum += Math.pow((values[i] - mean), 2.0);
                        }
  -                     variance = accum / (values.length - 1);
  +                     variance = accum / (double)(values.length - 1);
                }
                return variance;
        }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to