diff options
Diffstat (limited to 'chart2/source/tools/LinearRegressionCurveCalculator.cxx')
-rw-r--r-- | chart2/source/tools/LinearRegressionCurveCalculator.cxx | 114 |
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: */ |