-
Jesper Andersson authoredJesper Andersson authored
nonlin.cpp 41.39 KiB
// Definitions for module nonlin
#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
#include <vector>
#include <cmath>
#include "newmat.h"
#include "newmatio.h"
#include "bfmatrix.h"
#include "nonlin.h"
#include "utils/fsl_isfinite.h"
using namespace std;
using namespace NEWMAT;
namespace MISCMATHS {
// Declarations of routines for use only in this module
// Main routine for Variable-Metric optimisation
NonlinOut varmet(const NonlinParam& p, const NonlinCF& cfo);
// Main routine for Conjugate-Gradient optimisation
NonlinOut congra(const NonlinParam& p, const NonlinCF& cfo);
// Main routine for scaled conjugate-gradient optimisation
NonlinOut sccngr(const NonlinParam& p, const NonlinCF& cfo);
// Main routine for Levenberg-Marquardt optimisation
NonlinOut levmar(const NonlinParam& p, const NonlinCF& cfo);
LinOut linsrch(// Input
const ColumnVector& pdir, // Search direction
const ColumnVector& p0, // Current parameter values
const ColumnVector& grad, // Gradient at p0
const NonlinCF& cfo, // Cost-function object
double f0, // Current cost-function value
double sf, // Scale factor for cost-function
double maxiter, // Max # of iterations in line minimisation
double sm, // Stepmax
double alpha, // Alpha (sorry).
double ptol, // Tolerance in parameter space
// Output
double *lambda,// Resulting step length
double *of, // Value of cost-function on output
ColumnVector *np); // New parameters
double scale_factor(const ColumnVector& p, // Current parameter values
const ColumnVector& pdir, // Search direction
const NonlinCF& cfo, // Cost-function object
int maxiter, // Max # of iterations
double sf); // Scale factor.
LinOut linmin(// Input
const ColumnVector& p, // Current parameter values
const ColumnVector& pdir, // Search direction
const NonlinCF& cfo, // Cost-function object
double sf, // Scale factor for cost-function
pair<double,double> lp, // Left point
pair<double,double> mp, // Point somewhere in interval
pair<double,double> rp, // Right point
double ftol, // Fractional tolerance
int maxiter,// Max # of iterations
// Output