xue@1
|
1 #ifndef optH
|
xue@1
|
2 #define optH
|
xue@1
|
3
|
xue@1
|
4 /*
|
xue@1
|
5 opt.cpp - optimization routines
|
xue@1
|
6 */
|
xue@1
|
7
|
xue@1
|
8 //--tool procedures----------------------------------------------------------
|
xue@1
|
9 double nextdouble(double x, double dir); //returns next double-precision floating pointer number
|
xue@1
|
10
|
xue@1
|
11 //--Gradient method----------------------------------------------------------
|
xue@1
|
12 double GradientMax(void* params, double (*F)(int, double*, void*), void (*dF)(double*, int, double*, void*), int dim, double* start, double ep=1e-6, int maxiter=100);
|
xue@1
|
13 double GradientOneMax(void* params, double (*F)(int, double*, void*), void (*dF)(double*, int, double*, void*), int dim, double* start, double ep, int maxiter);
|
xue@1
|
14
|
xue@1
|
15 //--Newton methods------------------------------------------------------------
|
xue@1
|
16 double Newton(double& x0, double (*y)(double, void*), double (*y1)(double, void*), void* params=0, double epx=1e-6, int maxiter=100, double epy=1e-256);
|
xue@1
|
17 int Newton(double& x0, double (*dy)(double, void*), void* params, int yshift, double epx=1e-6, int maxiter=100, double epy=1e-256, double xmin=-1e308, double xmax=1e308);
|
xue@1
|
18 double Newton1dmax(double& x0, double xa, double xb, double (*ddy)(double, void*), void* params, int y1shift, int yshift, double (*dy)(double, void*), int dyshift, double epx=1e-6, int maxiter=100, double epdy=1e-128, bool checkinput=true);
|
xue@1
|
19 double Newton2D(double& x1, double& x2, double (*dy)(double&, double&, void*), double (*ddy)(double&, double&, double&, void*), void* params=0, double epx1=1e-6, double epx2=1e-6, int maxiter=100, double epdy=1e-256);
|
xue@1
|
20
|
xue@1
|
21 //--root search routines-----------------------------------------------------
|
xue@1
|
22 double rootsearchhalf(double&x1, double x2, double (*y)(double, void*), void* params=0, double epx=1e-6, int maxiter=100);
|
xue@1
|
23 double rootsearchsecant(double& x1, double x2, double (*y)(double, void*), void* params=0, double epx=1e-6, int maxiter=100);
|
xue@1
|
24 double rootsearchbisecant(double&x1, double x2, double (*y)(double, void*), void* params=0, double epx=1e-6, int maxiter=100);
|
xue@1
|
25
|
xue@1
|
26 //--1-D maximum search routines----------------------------------------------
|
xue@1
|
27 double Search1Dmax(double& x, void* params, double (*F)(double, void*), double inf, double sup, double* maxresult=0, double ep=1e-6, int maxiter=100, bool convcheck=false);
|
xue@1
|
28 double Search1DmaxEx(double& x, void* params, double (*F)(double, void*), double inf, double sup, double* maxresult=0, double ep=1e-6, int maxiter=100, double len=1);
|
xue@1
|
29 double Search1Dmaxfrom(void* params, double (*F)(int, double*, void*), int dim, double* start, double* direct, double step=1e-2, double minstep=1e-6, double maxstep=1e6, double* opt=0, double* max=0, double ep=1e-6, int maxiter=100, bool convcheck=false);
|
xue@1
|
30
|
xue@1
|
31 #endif
|