7 #ifndef Tomato_OXFITTERLevenbergMarquardtVNL_HXX 8 #define Tomato_OXFITTERLevenbergMarquardtVNL_HXX 10 #include "CmakeConfigForTomato.h" 14 #include <vnl/algo/vnl_levenberg_marquardt.h> 17 template<
typename MeasureType>
19 FitterLevenbergMarquardtVnl<MeasureType>
24 vnl_vector<MeasureType> temp(this->getParameters(), this->_Model->getNDims());
26 _VnlFitter->minimize(temp);
28 if (temp.size() != 0) {
29 temp.copy_out(this->getParameters());
31 if (this->getVerbose()) {
32 std::cout <<
"Results: " << temp <<
" Cost: " << this->_Model->calcCostValue(this->getParameters()) << std::endl;
38 template<
typename MeasureType>
40 FitterLevenbergMarquardtVnl<MeasureType>
42 std::cout <<
"\nYou called disp() on a FitterLevenbergMarquardtVnl object" <<
this <<
"\n";
43 std::cout <<
"It has VnlFitter " << _VnlFitter << std::endl;
44 std::cout <<
"It has ModelAdaptedToVnl " << _ModelAdaptedToVnl << std::endl;
45 std::cout <<
"It's base class is as follows: ";
50 template<
typename MeasureType>
51 FitterLevenbergMarquardtVnl<MeasureType>
52 ::FitterLevenbergMarquardtVnl() {
54 _ModelAdaptedToVnl = 0;
58 template<
typename MeasureType>
59 FitterLevenbergMarquardtVnl<MeasureType>
60 ::FitterLevenbergMarquardtVnl(
const FitterLevenbergMarquardtVnl &old) : Fitter<MeasureType>(old){
62 _ModelAdaptedToVnl = 0;
67 template<
typename MeasureType>
68 FitterLevenbergMarquardtVnl<MeasureType>
69 ::~FitterLevenbergMarquardtVnl() {
70 delete _ModelAdaptedToVnl; _ModelAdaptedToVnl = 0;
71 delete _VnlFitter; _VnlFitter = 0;
74 template<
typename MeasureType>
76 FitterLevenbergMarquardtVnl<MeasureType>
77 ::configureMinimizer() {
78 int nSamples = this->_Model->getNSamples();
79 int nDims = this->_Model->getNDims();
81 bool doReconfigure =
false;
87 if (_ModelAdaptedToVnl != 0) {
88 if (nSamples != this->_ModelAdaptedToVnl->get_number_of_residuals()) {
95 throw std::runtime_error(
"Set the Model object");
98 delete _ModelAdaptedToVnl; _ModelAdaptedToVnl = 0;
100 if (this->_UseGradient) {
101 _ModelAdaptedToVnl =
new ModelT1AdapterVnlLeastSquares(nDims, nSamples, vnl_least_squares_function::use_gradient);
103 _ModelAdaptedToVnl =
new ModelT1AdapterVnlLeastSquares(nDims, nSamples, vnl_least_squares_function::no_gradient);
106 this->_ModelAdaptedToVnl->setModel(this->_Model);
108 delete _VnlFitter; _VnlFitter = 0;
109 _VnlFitter =
new vnl_levenberg_marquardt(*_ModelAdaptedToVnl);
111 _VnlFitter->set_x_tolerance(this->getXTolerance());
112 _VnlFitter->set_f_tolerance(this->getFTolerance());
114 _VnlFitter->set_max_function_evals(this->getMaxFunctionEvals());
123 #endif //Tomato_OXFITTERLevenbergMarquardtVNL_HXX virtual void disp()
show me your Fitter
Definition: OxFitter.h:77
Definition: OxCalculator.h:19