Skip to content

Commit

Permalink
Re #4158. Changed SimplexMinimizer.
Browse files Browse the repository at this point in the history
  • Loading branch information
mantid-roman committed Apr 2, 2012
1 parent 18d2aa5 commit 4ace6a0
Show file tree
Hide file tree
Showing 18 changed files with 618 additions and 279 deletions.
4 changes: 4 additions & 0 deletions Code/Mantid/Framework/API/inc/MantidAPI/FunctionDomain1D.h
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,10 @@ class MANTID_API_DLL FunctionDomain1D: public FunctionDomain
std::vector<double> m_X; ///< vector of function arguments
};

/// typedef for a shared pointer to a FunctionDomain1D
typedef boost::shared_ptr<FunctionDomain1D> FunctionDomain1D_sptr;
typedef boost::shared_ptr<const FunctionDomain1D> FunctionDomain1D_const_sptr;

} // namespace API
} // namespace Mantid

Expand Down
2 changes: 2 additions & 0 deletions Code/Mantid/Framework/API/inc/MantidAPI/IFunction.h
Original file line number Diff line number Diff line change
Expand Up @@ -349,6 +349,8 @@ class MANTID_API_DLL IFunction
}
/// Check if attribute attName exists
virtual bool hasAttribute(const std::string& attName)const { (void)attName; return false;}
template<typename T>
void setAttributeValue(const std::string& attName,const T& value){setAttribute(attName,Attribute(value));}

/// Set a function handler
void setHandler(FunctionHandler* handler);
Expand Down
161 changes: 81 additions & 80 deletions Code/Mantid/Framework/CurveFitting/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,73 +1,73 @@
set ( SRC_FILES
src/Abragam.cpp
src/BFGS_Minimizer.cpp
# src/BFGS_Minimizer.cpp
src/BackToBackExponential.cpp
src/BackgroundFunction.cpp
src/BivariateNormal.cpp
src/BoundaryConstraint.cpp
# src/BivariateNormal.cpp
# src/BoundaryConstraint.cpp
src/Chebyshev.cpp
src/Convolution.cpp
# src/Convolution.cpp
src/CostFuncFitting.cpp
src/CostFuncIgnorePosPeaks.cpp
# src/CostFuncIgnorePosPeaks.cpp
src/CostFuncLeastSquares.cpp
src/DeltaFunction.cpp
src/DiffSphere.cpp
src/DerivMinimizer.cpp
src/ExpDecay.cpp
src/ExpDecayMuon.cpp
src/ExpDecayOsc.cpp
src/FRConjugateGradientMinimizer.cpp
src/Fit.cpp
src/Fit1D.cpp
src/FlatBackground.cpp
# src/FRConjugateGradientMinimizer.cpp
# src/Fit.cpp
# src/Fit1D.cpp
src/FuncMinimizerFactory.cpp
src/GSLFunctions.cpp
src/GausDecay.cpp
src/GausOsc.cpp
src/Gaussian.cpp
src/Gaussian1D.cpp
src/GaussianLinearBG1D.cpp
src/GenericFit.cpp
src/IkedaCarpenterPV.cpp
src/LevenbergMarquardtMinimizer.cpp
src/Linear.cpp
src/MuonFInteraction.cpp
# src/Gaussian1D.cpp
# src/GaussianLinearBG1D.cpp
# src/GenericFit.cpp
src/IFuncMinimizer.cpp
# src/NewFit.cpp
# src/IkedaCarpenterPV.cpp
# src/LevenbergMarquardtMinimizer.cpp
# src/Linear.cpp
src/LinearBackground.cpp
src/LogNormal.cpp
src/Lorentzian.cpp
src/Lorentzian1D.cpp
src/MultiBG.cpp
src/MuonFInteraction.cpp
src/NewFit.cpp
src/PRConjugateGradientMinimizer.cpp
src/PlotPeakByLogValue.cpp
src/ProductFunctionMW.cpp
# src/Lorentzian1D.cpp
# src/MultiBG.cpp
# src/PRConjugateGradientMinimizer.cpp
# src/PlotPeakByLogValue.cpp
# src/ProductFunctionMW.cpp
src/Quadratic.cpp
src/QuadraticBackground.cpp
src/Resolution.cpp
src/SCDPanelErrors.cpp
src/StaticKuboToyabe.cpp
src/SimplexMinimizer.cpp
src/SpecialFunctionHelper.cpp
# src/SpecialFunctionHelper.cpp
src/SplineBackground.cpp
src/StretchExp.cpp
src/StretchExpMuon.cpp
src/UserFunction.cpp
src/UserFunction1D.cpp
# src/UserFunction1D.cpp
)

set ( SRC_UNITY_IGNORE_FILES src/Fit1D.cpp src/GSLFunctions.cpp )

set ( INC_FILES
inc/MantidCurveFitting/Abragam.h
inc/MantidCurveFitting/BFGS_Minimizer.h
# inc/MantidCurveFitting/BFGS_Minimizer.h
inc/MantidCurveFitting/BackToBackExponential.h
inc/MantidCurveFitting/BackgroundFunction.h
inc/MantidCurveFitting/BivariateNormal.h
inc/MantidCurveFitting/BoundaryConstraint.h
# inc/MantidCurveFitting/BivariateNormal.h
# inc/MantidCurveFitting/BoundaryConstraint.h
inc/MantidCurveFitting/Chebyshev.h
inc/MantidCurveFitting/Convolution.h
# inc/MantidCurveFitting/Convolution.h
inc/MantidCurveFitting/CostFuncFitting.h
inc/MantidCurveFitting/CostFuncIgnorePosPeaks.h
# inc/MantidCurveFitting/CostFuncIgnorePosPeaks.h
inc/MantidCurveFitting/CostFuncLeastSquares.h
inc/MantidCurveFitting/DeltaFunction.h
inc/MantidCurveFitting/DiffSphere.h
Expand All @@ -76,92 +76,93 @@ set ( INC_FILES
inc/MantidCurveFitting/ExpDecay.h
inc/MantidCurveFitting/ExpDecayMuon.h
inc/MantidCurveFitting/ExpDecayOsc.h
inc/MantidCurveFitting/FRConjugateGradientMinimizer.h
inc/MantidCurveFitting/Fit.h
inc/MantidCurveFitting/Fit1D.h
inc/MantidCurveFitting/FlatBackground.h
# inc/MantidCurveFitting/FRConjugateGradientMinimizer.h
# inc/MantidCurveFitting/Fit.h
# inc/MantidCurveFitting/Fit1D.h
inc/MantidCurveFitting/FuncMinimizerFactory.h
inc/MantidCurveFitting/GSLFunctions.h
inc/MantidCurveFitting/Jacobian.h
inc/MantidCurveFitting/GSLJacobian.h
inc/MantidCurveFitting/GausDecay.h
inc/MantidCurveFitting/GausOsc.h
inc/MantidCurveFitting/Gaussian.h
inc/MantidCurveFitting/Gaussian1D.h
inc/MantidCurveFitting/GaussianLinearBG1D.h
inc/MantidCurveFitting/GenericFit.h
# inc/MantidCurveFitting/Gaussian1D.h
# inc/MantidCurveFitting/GaussianLinearBG1D.h
# inc/MantidCurveFitting/GenericFit.h
# inc/MantidCurveFitting/NewFit.h
inc/MantidCurveFitting/IFuncMinimizer.h
inc/MantidCurveFitting/IkedaCarpenterPV.h
inc/MantidCurveFitting/LevenbergMarquardtMinimizer.h
inc/MantidCurveFitting/Linear.h
# inc/MantidCurveFitting/LevenbergMarquardtMinimizer.h
# inc/MantidCurveFitting/Linear.h
inc/MantidCurveFitting/LinearBackground.h
inc/MantidCurveFitting/LogNormal.h
inc/MantidCurveFitting/Lorentzian.h
inc/MantidCurveFitting/Lorentzian1D.h
inc/MantidCurveFitting/MultiBG.h
inc/MantidCurveFitting/MuonFInteraction.h
inc/MantidCurveFitting/NewFit.h
inc/MantidCurveFitting/PRConjugateGradientMinimizer.h
inc/MantidCurveFitting/PlotPeakByLogValue.h
inc/MantidCurveFitting/ProductFunctionMW.h
# inc/MantidCurveFitting/MultiBG.h
# inc/MantidCurveFitting/PRConjugateGradientMinimizer.h
# inc/MantidCurveFitting/PlotPeakByLogValue.h
# inc/MantidCurveFitting/ProductFunctionMW.h
inc/MantidCurveFitting/Quadratic.h
inc/MantidCurveFitting/QuadraticBackground.h
inc/MantidCurveFitting/Resolution.h
inc/MantidCurveFitting/SCDPanelErrors.h
inc/MantidCurveFitting/StaticKuboToyabe.h
inc/MantidCurveFitting/SimplexMinimizer.h
inc/MantidCurveFitting/SpecialFunctionSupport.h
# inc/MantidCurveFitting/SpecialFunctionSupport.h
inc/MantidCurveFitting/SplineBackground.h
inc/MantidCurveFitting/StretchExp.h
inc/MantidCurveFitting/StretchExpMuon.h
inc/MantidCurveFitting/UserFunction.h
inc/MantidCurveFitting/UserFunction1D.h
# inc/MantidCurveFitting/UserFunction1D.h
)

set ( TEST_FILES
test/AbragamTest.h
test/BackToBackExponentialTest.h
test/BivariateNormalTest.h
test/BoundaryConstraintTest.h
test/ChebyshevTest.h
test/CompositeFunctionTest.h
test/ConvolutionTest.h
test/DeltaFunctionTest.h
test/DiffSphereTest.h
test/ExpDecayTest.h
test/ExpDecayMuonTest.h
test/ExpDecayOscTest.h
test/FitTest.h
test/FlatBackgroundTest.h
test/FuncMinimizerFactoryTest.h
test/FunctionTest.h
test/FunctionFactoryTest.h
test/Gaussian1DTest.h
test/GausDecayTest.h
test/GausOscTest.h
test/Gaussian1DTest.h
test/GaussianTest.h
test/IkedaCarpenterPVTest.h
test/LinearBackgroundTest.h
test/LinearTest.h
test/LogNormalTest.h
test/Lorentzian1DTest.h
test/LorentzianTest.h
test/MultiBGTest.h
test/MuonFInteractionTest.h
test/NewFitTest.h
test/PlotPeakByLogValueTest.h
test/ProductFunctionMWTest.h
test/QuadraticBackgroundTest.h
test/QuadraticTest.h
test/ResolutionTest.h
test/SCDPanelErrorsTest.h
test/StaticKuboToyabeTest.h
test/SpecialFunctionSupportTest.h
test/SplineBackgroundTest.h
test/StretchExpMuonTest.h
test/StretchExpTest.h
test/UserFunction1DTest.h
test/UserFunctionTest.h
# test/BackToBackExponentialTest.h
# test/BivariateNormalTest.h
# test/BoundaryConstraintTest.h
# test/ChebyshevTest.h
# test/CompositeFunctionTest.h
# test/ConvolutionTest.h
# test/ExpDecayTest.h
# test/ExpDecayMuonTest.h
# test/ExpDecayOscTest.h
# test/FitTest.h
# test/NewFitTest.h
# test/FuncMinimizerFactoryTest.h
# test/FunctionTest.h
# test/FunctionFactoryTest.h
# test/Gaussian1DTest.h
# test/GausDecayTest.h
# test/GaussianTest.h
# test/IkedaCarpenterPVTest.h
test/LeastSquaresTest.h
# test/LinearBackgroundTest.h
# test/LinearTest.h
# test/LogNormalTest.h
# test/Lorentzian1DTest.h
# test/LorentzianTest.h
# test/MultiBGTest.h
# test/PlotPeakByLogValueTest.h
# test/ProductFunctionMWTest.h
# test/QuadraticBackgroundTest.h
# test/QuadraticTest.h
# test/ResolutionTest.h
test/SimplexTest.h
# test/SpecialFunctionSupportTest.h
# test/SplineBackgroundTest.h
# test/StretchExpTest.h
# test/UserFunction1DTest.h
# test/UserFunctionTest.h
)


Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#ifndef MANTID_CURVEFITTING_COSTFUNCLEASTSQUARES_H_
#define MANTID_CURVEFITTING_COSTFUNCLEASTSQUARES_H_
#ifndef MANTID_CURVEFITTING_COSTFUNCFITTING_H_
#define MANTID_CURVEFITTING_COSTFUNCFITTING_H_

//----------------------------------------------------------------------
// Includes
Expand Down Expand Up @@ -41,7 +41,7 @@ namespace CurveFitting
class DLLExport CostFuncFitting : public API::ICostFunction
{
public:

/// Get i-th parameter
/// @param i :: Index of a parameter
/// @return :: Value of the parameter
Expand All @@ -66,13 +66,15 @@ class DLLExport CostFuncFitting : public API::ICostFunction
protected:

bool isValid() const;
void checkValidity() const;

API::IFunction_sptr m_function;
API::FunctionDomain_sptr m_domain;
API::FunctionValues_sptr m_values;
std::vector<size_t> m_indexMap;
};

} // namespace CurveFitting
} // namespace Mantid

#endif /*MANTID_CURVEFITTING_COSTFUNCLEASTSQUARES_H_*/
#endif /*MANTID_CURVEFITTING_COSTFUNCFITTING_H_*/
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
//----------------------------------------------------------------------
// Includes
//----------------------------------------------------------------------
#include "MantidAPI/ICostFunction.h"
#include "MantidCurveFitting/CostFuncFitting.h"

namespace Mantid
{
Expand Down Expand Up @@ -35,7 +35,7 @@ namespace CurveFitting
File change history is stored at: <https://svn.mantidproject.org/mantid/trunk/Code/Mantid>.
Code Documentation is available at: <http://doxygen.mantidproject.org>
*/
class DLLExport CostFuncLeastSquares : public API::ICostFunction
class DLLExport CostFuncLeastSquares : public CostFuncFitting
{
public:
/// Virtual destructor
Expand All @@ -50,13 +50,17 @@ class DLLExport CostFuncLeastSquares : public API::ICostFunction
/// Get short name of minimizer - useful for say labels in guis
virtual std::string shortName() const {return "Chi-sq";};

/// Calculate value of cost function from observed
/// and calculated values
virtual double val(const double* yData, const double* inverseError, double* yCal, const size_t& n);
/// Calculate value of cost function
virtual double val() const;

/// Calculate the derivatives of the cost function
virtual void deriv(const double* yData, const double* inverseError, const double* yCal,
const double* jacobian, double* outDerivs, const size_t& p, const size_t& n);
/// @param der :: Container to output the derivatives
virtual void deriv(std::vector<double>& der) const;

/// Calculate the value and the derivatives of the cost function
/// @param der :: Container to output the derivatives
/// @return :: The value of the function
virtual double valAndDeriv(std::vector<double>& der) const;

private:
/// name of this minimizer
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,8 @@ class DLLExport DerivMinimizer : public IFuncMinimizer
/// Destructor
~DerivMinimizer();

/// Do one iteration.
bool iterate();
/// Do the minimization.
bool minimize();
/// Return current value of the cost function
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,9 +56,14 @@ class DLLExport IFuncMinimizer
/// Get name of minimizer
virtual std::string name() const = 0;

/// Do one iteration
virtual bool iterate() = 0;

/// Perform iteration with minimizer and return info about how well this went
/// using the GSL status integer system. See gsl_errno.h for details.
virtual bool minimize() = 0;
virtual bool minimize();

virtual std::string getError() const {return m_errorString;}

/// Get value of cost function
virtual double costFunctionVal() = 0;
Expand All @@ -69,6 +74,8 @@ class DLLExport IFuncMinimizer
* @param epsrel :: Is used to remove linear-dependent columns
*/
virtual void calCovarianceMatrix(gsl_matrix * covar, double epsrel = 0.0001) = 0;
protected:
std::string m_errorString;
};

} // namespace CurveFitting
Expand Down

0 comments on commit 4ace6a0

Please sign in to comment.