summaryrefslogtreecommitdiff
path: root/chart2/source/tools
diff options
context:
space:
mode:
authorLaurent Balland-Poirier <laurent.balland-poirier@laposte.net>2015-04-15 23:50:58 +0200
committerNorbert Thiebaud <nthiebaud@gmail.com>2015-04-29 14:14:01 +0000
commitfec037e68f0dea164915fbfe1db4699a3861adf4 (patch)
tree30c68ab3cad09c94b6ca50de0f7a5d51037aeacb /chart2/source/tools
parent4d045be758885a09daa4fe3324984174d6f7c4f2 (diff)
tdf#72361 Forced intercept for exponentiial trendline
Change-Id: I252a4994d2ee981018d07d6fac7ffe639f065d3e Reviewed-on: https://gerrit.libreoffice.org/15334 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Norbert Thiebaud <nthiebaud@gmail.com>
Diffstat (limited to 'chart2/source/tools')
-rw-r--r--chart2/source/tools/ExponentialRegressionCurveCalculator.cxx22
1 files changed, 17 insertions, 5 deletions
diff --git a/chart2/source/tools/ExponentialRegressionCurveCalculator.cxx b/chart2/source/tools/ExponentialRegressionCurveCalculator.cxx
index c5fcdac023ec..3738d686f683 100644
--- a/chart2/source/tools/ExponentialRegressionCurveCalculator.cxx
+++ b/chart2/source/tools/ExponentialRegressionCurveCalculator.cxx
@@ -61,11 +61,24 @@ void SAL_CALL ExponentialRegressionCurveCalculator::recalculateRegression(
}
double fAverageX = 0.0, fAverageY = 0.0;
+ double fLogIntercept = mForceIntercept ? log(mInterceptValue) : 0.0;
+ std::vector<double> yVector;
+ yVector.resize(nMax, 0.0);
+
size_t i = 0;
for( i = 0; i < nMax; ++i )
{
- fAverageX += aValues.first[i];
- fAverageY += log( aValues.second[i] );
+ double yValue = log(aValues.second[i]);
+ if (mForceIntercept)
+ {
+ yValue -= fLogIntercept;
+ }
+ else
+ {
+ fAverageX += aValues.first[i];
+ fAverageY += yValue;
+ }
+ yVector[i] = yValue;
}
const double fN = static_cast< double >( nMax );
@@ -76,7 +89,7 @@ void SAL_CALL ExponentialRegressionCurveCalculator::recalculateRegression(
for( i = 0; i < nMax; ++i )
{
double fDeltaX = aValues.first[i] - fAverageX;
- double fDeltaY = log( aValues.second[i] ) - fAverageY;
+ double fDeltaY = yVector[i] - fAverageY;
fQx += fDeltaX * fDeltaX;
fQy += fDeltaY * fDeltaY;
@@ -84,9 +97,8 @@ void SAL_CALL ExponentialRegressionCurveCalculator::recalculateRegression(
}
m_fLogSlope = fQxy / fQx;
- m_fLogIntercept = fAverageY - m_fLogSlope * fAverageX;
+ m_fLogIntercept = mForceIntercept ? fLogIntercept : fAverageY - m_fLogSlope * fAverageX;
m_fCorrelationCoeffitient = fQxy / sqrt( fQx * fQy );
-
}
double SAL_CALL ExponentialRegressionCurveCalculator::getCurveValue( double x )