32 #define LAMBDA_MAX 1e80
36 mIterationLimit(2000),
49 mBestValue(std::numeric_limits<
C_FLOAT64 >::infinity()),
50 mEvaluationValue(std::numeric_limits<
C_FLOAT64 >::infinity()),
52 mHaveResiduals(false),
60 #endif // COPASI_DEBUG
68 mIterationLimit(src.mIterationLimit),
69 mTolerance(src.mTolerance),
70 mModulation(src.mModulation),
81 mBestValue(std::numeric_limits<
C_FLOAT64 >::infinity()),
82 mEvaluationValue(std::numeric_limits<
C_FLOAT64 >::infinity()),
84 mHaveResiduals(false),
110 C_INT dim, starts, info, nrhs;
127 Work.
array(), &LWork, &info);
136 const COptItem & OptItem = *(*mpOptItem)[i];
153 (*(*mpSetCalculateVariable)[i])(
mCurrent[i]);
221 mStep[i] /= LM_lambda;
237 const COptItem & OptItem = *(*mpOptItem)[i];
300 (*(*mpSetCalculateVariable)[i])(
mCurrent[i]);
410 #endif // COPASI_DEBUG
428 mBestValue = std::numeric_limits<C_FLOAT64>::infinity();
434 if (pFitProblem != NULL)
465 (*(*mpSetCalculateVariable)[i])(x * mod1);
476 (*(*mpSetCalculateVariable)[i])(x);
497 size_t ResidualSize = Residuals.
size();
514 (*(*mpSetCalculateVariable)[i])(x * mod1);
526 pCurrentResiduals = CurrentResiduals.
array();
527 pResiduals = Residuals.
array();
529 for (; pCurrentResiduals != pEnd; pCurrentResiduals++, pResiduals++, pJacobianT++)
530 *pJacobianT = (*pResiduals - *pCurrentResiduals) * Delta;
532 (*(*mpSetCalculateVariable)[i])(x);
546 dgemm_(
"N",
"T", &m, &n, &k, &Alpha,
547 const_cast<C_FLOAT64 *>(CurrentResiduals.
array()), &m,
558 pCurrentResiduals = CurrentResiduals.
array();
560 for (; pCurrentResiduals != pEnd; pCurrentResiduals++, pJacobianT++)
561 *pGradient += *pJacobianT * *pCurrentResiduals;
575 for (j = 0; j <= i; j++, pHessian++)
579 pEnd = pJacobianT + ResidualSize;
582 for (; pJacobianT != pEnd; pJacobianT++, pJacobian++)
583 *pHessian += *pJacobianT * *pJacobian;
617 (*(*mpSetCalculateVariable)[i])(
mCurrent[i]);
620 for (j = 0; j <= i; j++)
625 (*(*mpSetCalculateVariable)[i])(x);
virtual C_INT32 checkConstraint() const
CMatrix< C_FLOAT64 > mHessian
virtual bool initialize()
CVector< C_FLOAT64 > mCurrent
bool setResidualsRequired(const bool &required)
int dpotrf_(char *uplo, integer *n, doublereal *a, integer *lda, integer *info)
int dsytrf_(char *uplo, integer *n, doublereal *a, integer *lda, integer *ipiv, doublereal *work, integer *lwork, integer *info)
void resize(size_t size, const bool ©=false)
COptProblem * mpOptProblem
const CVector< C_FLOAT64 > & getResiduals() const
virtual void output(const COutputInterface::Activity &activity)
unsigned C_INT32 mIteration
virtual bool progressItem(const size_t &handle)
unsigned C_INT32 mIterationLimit
bool removeParameter(const std::string &name)
const C_FLOAT64 & evaluate()
CVector< C_FLOAT64 > mStep
size_t addItem(const std::string &name, const std::string &value, const std::string *pEndValue=NULL)
const std::vector< UpdateMethod * > * mpSetCalculateVariable
const Value & getValue() const
const C_FLOAT64 * getLowerBoundValue() const
virtual bool setSolution(const C_FLOAT64 &value, const CVector< C_FLOAT64 > &variables)
virtual bool finishItem(const size_t &handle)
int dgemm_(char *transa, char *transb, integer *m, integer *n, integer *k, doublereal *alpha, doublereal *a, integer *lda, doublereal *b, integer *ldb, doublereal *beta, doublereal *c, integer *ldc)
CMatrix< C_FLOAT64 > mResidualJacobianT
virtual void resize(size_t rows, size_t cols, const bool ©=false)
virtual bool checkFunctionalConstraints()
CVector< C_FLOAT64 > mBest
CVector< C_FLOAT64 > mTemp
const C_FLOAT64 & getStartValue() const
CMatrix< C_FLOAT64 > mHessianLM
const std::vector< COptItem * > * mpOptItem
COptMethodLevenbergMarquardt(const COptMethodLevenbergMarquardt &src, const CCopasiContainer *pParent=NULL)
const C_FLOAT64 * getUpperBoundValue() const
virtual bool initialize()
bool addParameter(const CCopasiParameter ¶meter)
virtual ~COptMethodLevenbergMarquardt()
CVector< C_FLOAT64 > mGradient
virtual bool checkParametricConstraints()
virtual size_t numCols() const
int dpotrs_(char *uplo, integer *n, integer *nrhs, doublereal *a, integer *lda, doublereal *b, integer *ldb, integer *info)
const C_FLOAT64 & getCalculateValue() const
C_FLOAT64 mEvaluationValue
CCopasiObject * addObjectReference(const std::string &name, CType &reference, const unsigned C_INT32 &flag=0)
CProcessReport * mpCallBack