summaryrefslogtreecommitdiff
path: root/chart2/source/tools/LinearRegressionCurveCalculator.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'chart2/source/tools/LinearRegressionCurveCalculator.cxx')
-rw-r--r--chart2/source/tools/LinearRegressionCurveCalculator.cxx114
1 files changed, 12 insertions, 102 deletions
diff --git a/chart2/source/tools/LinearRegressionCurveCalculator.cxx b/chart2/source/tools/LinearRegressionCurveCalculator.cxx
index 5b388ee4139e..07c19a4124a6 100644
--- a/chart2/source/tools/LinearRegressionCurveCalculator.cxx
+++ b/chart2/source/tools/LinearRegressionCurveCalculator.cxx
@@ -31,69 +31,23 @@ namespace chart
{
LinearRegressionCurveCalculator::LinearRegressionCurveCalculator() :
- m_fSlope( 0.0 ),
- m_fIntercept( 0.0 )
-{
- ::rtl::math::setNan( & m_fSlope );
- ::rtl::math::setNan( & m_fIntercept );
-}
+ PolynomialRegressionCurveCalculator()
+{}
LinearRegressionCurveCalculator::~LinearRegressionCurveCalculator()
{}
-// ____ XRegressionCurveCalculator ____
-void SAL_CALL LinearRegressionCurveCalculator::recalculateRegression(
- const uno::Sequence< double >& aXValues,
- const uno::Sequence< double >& aYValues )
- throw (uno::RuntimeException)
+void LinearRegressionCurveCalculator::setRegressionProperties(
+ sal_Int32 /*aDegree*/,
+ sal_Bool aForceIntercept,
+ double aInterceptValue,
+ sal_Int32 aPeriod)
{
- RegressionCalculationHelper::tDoubleVectorPair aValues(
- RegressionCalculationHelper::cleanup(
- aXValues, aYValues,
- RegressionCalculationHelper::isValid()));
-
- const size_t nMax = aValues.first.size();
- if( nMax == 0 )
- {
- ::rtl::math::setNan( & m_fSlope );
- ::rtl::math::setNan( & m_fIntercept );
- ::rtl::math::setNan( & m_fCorrelationCoeffitient );
- return;
- }
-
- const double fN = static_cast< double >( nMax );
- double fSumX = 0.0, fSumY = 0.0, fSumXSq = 0.0, fSumYSq = 0.0, fSumXY = 0.0;
- for( size_t i = 0; i < nMax; ++i )
- {
- fSumX += aValues.first[i];
- fSumY += aValues.second[i];
- fSumXSq += aValues.first[i] * aValues.first[i];
- fSumYSq += aValues.second[i] * aValues.second[i];
- fSumXY += aValues.first[i] * aValues.second[i];
- }
-
- m_fSlope = (fN * fSumXY - fSumX * fSumY) / ( fN * fSumXSq - fSumX * fSumX );
- m_fIntercept = (fSumY - m_fSlope * fSumX) / fN;
-
- m_fCorrelationCoeffitient = ( fN * fSumXY - fSumX * fSumY ) /
- sqrt( ( fN * fSumXSq - fSumX * fSumX ) *
- ( fN * fSumYSq - fSumY * fSumY ) );
-}
-
-double SAL_CALL LinearRegressionCurveCalculator::getCurveValue( double x )
- throw (lang::IllegalArgumentException,
- uno::RuntimeException)
-{
- double fResult;
- ::rtl::math::setNan( & fResult );
-
- if( ! ( ::rtl::math::isNan( m_fSlope ) ||
- ::rtl::math::isNan( m_fIntercept )))
- {
- fResult = m_fSlope * x + m_fIntercept;
- }
-
- return fResult;
+ PolynomialRegressionCurveCalculator::setRegressionProperties(
+ 1,
+ aForceIntercept,
+ aInterceptValue,
+ aPeriod);
}
uno::Sequence< geometry::RealPoint2D > SAL_CALL LinearRegressionCurveCalculator::getCurveValues(
@@ -120,50 +74,6 @@ uno::Sequence< geometry::RealPoint2D > SAL_CALL LinearRegressionCurveCalculator:
return RegressionCurveCalculator::getCurveValues( min, max, nPointCount, xScalingX, xScalingY, bMaySkipPointsInCalculation );
}
-OUString LinearRegressionCurveCalculator::ImplGetRepresentation(
- const uno::Reference< util::XNumberFormatter >& xNumFormatter,
- ::sal_Int32 nNumberFormatKey ) const
-{
- OUStringBuffer aBuf( "f(x) = ");
-
- bool bHaveSlope = false;
-
- if( m_fSlope != 0.0 )
- {
- if( ::rtl::math::approxEqual( fabs( m_fSlope ), 1.0 ))
- {
- if( m_fSlope < 0 )
- aBuf.append( UC_MINUS_SIGN );
- }
- else
- aBuf.append( getFormattedString( xNumFormatter, nNumberFormatKey, m_fSlope ));
- aBuf.append( sal_Unicode( 'x' ));
- bHaveSlope = true;
- }
-
- if( bHaveSlope )
- {
- if( m_fIntercept < 0.0 )
- {
- aBuf.append( UC_SPACE );
- aBuf.append( UC_MINUS_SIGN );
- aBuf.append( UC_SPACE );
- aBuf.append( getFormattedString( xNumFormatter, nNumberFormatKey, fabs( m_fIntercept )));
- }
- else if( m_fIntercept > 0.0 )
- {
- aBuf.appendAscii( RTL_CONSTASCII_STRINGPARAM( " + " ));
- aBuf.append( getFormattedString( xNumFormatter, nNumberFormatKey, m_fIntercept ));
- }
- }
- else
- {
- aBuf.append( getFormattedString( xNumFormatter, nNumberFormatKey, m_fIntercept ));
- }
-
- return aBuf.makeStringAndClear();
-}
-
} // namespace chart
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */