/usr/include/ql/math/optimization/levenbergmarquardt.hpp is in libquantlib0-dev 1.7.1-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | /* -*- mode: c++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
Copyright (C) 2006 Klaus Spanderen
Copyright (C) 2015 Peter Caspers
This file is part of QuantLib, a free-software/open-source library
for financial quantitative analysts and developers - http://quantlib.org/
QuantLib is free software: you can redistribute it and/or modify it
under the terms of the QuantLib license. You should have received a
copy of the license along with this program; if not, please email
<quantlib-dev@lists.sf.net>. The license is also available online at
<http://quantlib.org/license.shtml>.
This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the license for more details.
*/
/*! \file levenbergmarquardt.hpp
\brief Levenberg-Marquardt optimization method
*/
#ifndef quantlib_optimization_levenberg_marquardt_hpp
#define quantlib_optimization_levenberg_marquardt_hpp
#include <ql/math/optimization/problem.hpp>
namespace QuantLib {
//! Levenberg-Marquardt optimization method
/*! This implementation is based on MINPACK
(<http://www.netlib.org/minpack>,
<http://www.netlib.org/cephes/linalg.tgz>)
It has a built in fd scheme to compute
the jacobian, which is used by default.
If useCostFunctionsJacobian is true the
corresponding method in the cost function
of the problem is used instead. Note that
the default implementation of the jacobian
in CostFunction uses a central difference
(oder 2, but requiring more function
evaluations) compared to the forward
difference implemented here (order 1).
\ingroup optimizers
*/
class LevenbergMarquardt : public OptimizationMethod {
public:
LevenbergMarquardt(Real epsfcn = 1.0e-8,
Real xtol = 1.0e-8,
Real gtol = 1.0e-8,
bool useCostFunctionsJacobian = false);
virtual EndCriteria::Type minimize(Problem& P,
const EndCriteria& endCriteria //= EndCriteria()
);
// = EndCriteria(400, 1.0e-8, 1.0e-8)
virtual Integer getInfo() const;
void fcn(int m,
int n,
Real* x,
Real* fvec,
int* iflag);
void jacFcn(int m,
int n,
Real* x,
Real* fjac,
int* iflag);
private:
Problem* currentProblem_;
Array initCostValues_;
Matrix initJacobian_;
mutable Integer info_;
const Real epsfcn_, xtol_, gtol_;
bool useCostFunctionsJacobian_;
};
}
#endif
|