[Libreoffice-commits] core.git: chart2/source

Philippe Jung phil.jung at free.fr
Sun Jun 21 15:23:01 PDT 2015


 chart2/source/tools/PotentialRegressionCurveCalculator.cxx |   15 ++-----------
 1 file changed, 3 insertions(+), 12 deletions(-)

New commits:
commit d16e154c627ecc0cb21aaf4b28f7f5ae48ebbde1
Author: Philippe Jung <phil.jung at free.fr>
Date:   Sun Jun 21 22:09:07 2015 +0000

    Revert "tdf#92231 Potential regression curve calculation is wrong"
    
    This reverts commit e0e285574244e855fd148ab7320b1aeb5914655a.
    
    Wrong fix
    
    Change-Id: Iddcbb84efbfc88013c6f2a217cb44061016c043b
    Reviewed-on: https://gerrit.libreoffice.org/16405
    Reviewed-by: Philippe Jung <phil.jung at free.fr>
    Tested-by: Philippe Jung <phil.jung at free.fr>

diff --git a/chart2/source/tools/PotentialRegressionCurveCalculator.cxx b/chart2/source/tools/PotentialRegressionCurveCalculator.cxx
index 6f3d438..7495c91 100644
--- a/chart2/source/tools/PotentialRegressionCurveCalculator.cxx
+++ b/chart2/source/tools/PotentialRegressionCurveCalculator.cxx
@@ -51,14 +51,6 @@ void SAL_CALL PotentialRegressionCurveCalculator::recalculateRegression(
             aXValues, aYValues,
             RegressionCalculationHelper::isValidAndBothPositive()));
 
-    // We try to get y =C * D^x
-    // switching to neperian logs:
-    // ln(y) = ln(C) + x ln(D)
-    // So we make a linear regression and get
-    // slope = ln(D) => D = exp(slope)
-    // intercept = ln(C) => C = exp(intercept)
-    // Warning: the linear regression is between
-    // ln(y) and x. Not between ln(y) and ln(x)
     const size_t nMax = aValues.first.size();
     if( nMax == 0 )
     {
@@ -72,7 +64,7 @@ void SAL_CALL PotentialRegressionCurveCalculator::recalculateRegression(
     size_t i = 0;
     for( i = 0; i < nMax; ++i )
     {
-        fAverageX += aValues.first[i] ;
+        fAverageX += log( aValues.first[i] );
         fAverageY += log( aValues.second[i] );
     }
 
@@ -83,7 +75,7 @@ void SAL_CALL PotentialRegressionCurveCalculator::recalculateRegression(
     double fQx = 0.0, fQy = 0.0, fQxy = 0.0;
     for( i = 0; i < nMax; ++i )
     {
-        double fDeltaX = aValues.first[i] - fAverageX;
+        double fDeltaX = log( aValues.first[i] ) - fAverageX;
         double fDeltaY = log( aValues.second[i] ) - fAverageY;
 
         fQx  += fDeltaX * fDeltaX;
@@ -95,7 +87,6 @@ void SAL_CALL PotentialRegressionCurveCalculator::recalculateRegression(
     m_fIntercept = fAverageY - m_fSlope * fAverageX;
     m_fCorrelationCoeffitient = fQxy / sqrt( fQx * fQy );
 
-    m_fSlope = exp( m_fSlope );
     m_fIntercept = exp( m_fIntercept );
 }
 
@@ -109,7 +100,7 @@ double SAL_CALL PotentialRegressionCurveCalculator::getCurveValue( double x )
     if( ! ( ::rtl::math::isNan( m_fSlope ) ||
             ::rtl::math::isNan( m_fIntercept )))
     {
-        fResult = m_fIntercept * pow( m_fSlope, x );
+        fResult = m_fIntercept * pow( x, m_fSlope );
     }
 
     return fResult;


More information about the Libreoffice-commits mailing list