/* Example programs from the book Scientific and Engineering Programming in C++: An Introduction with Advanced Techniques and Examples, Addison-Wesley, 1994. (c) COPYRIGHT INTERNATIONAL BUSINESS MACHINES CORPORATION 1994. ALL RIGHTS RESERVED. See README file for further details. */ #ifndef LevenbergMarquardtHessianH #define LevenbergMarquardtHessianH #include "DataModeling/PhysicalData.h" #include "LapackWrap/Lapack.h" #include "LapackWrap/BlasRectLURep.h" #include "SciEng/NumericalLimits.h" template class LevenbergMarquardtHessian : public virtual Array2d, private LapackUnfactored< BlasRectLURep > { public: LevenbergMarquardtHessian( const PhysicalData& the_data, const DataModel& the_model ); LevenbergMarquardtHessian(Subscript nparms); // empty. LapackUnfactored< BlasRectLURep >::factor; LapackUnfactored< BlasRectLURep > ::rep; LapackUnfactored< BlasRectLURep > ::dim; LapackUnfactored< BlasRectLURep > ::shape; LapackUnfactored< BlasRectLURep > ::numElts; LapackUnfactored< BlasRectLURep > ::operator[]; LapackUnfactored< BlasRectLURep > ::operator(); Range chi2() { return the_chi2; } void doMarquardt(Range factor); // bias jacobian diagonal by fudge factor LevenbergMarquardtHessian& operator=(const LevenbergMarquardtHessian& rhs){ LapackUnfactored< BlasRectLURep >::operator=(rhs); return *this; } private: BlasRectLURep::Knowns1d b; // right hand side of Ax = b; Range the_chi2; }; #ifdef XLC_QNOTEMPINC #include "DataModeling/LevenbergMarquardtHessian.c" #endif #endif