Skip to content
Snippets Groups Projects
Commit 274304ce authored by Mark Woolrich's avatar Mark Woolrich
Browse files

*** empty log message ***

parent 5156ef12
No related branches found
No related tags found
No related merge requests found
......@@ -171,7 +171,7 @@ ReturnMatrix gradient(const ColumnVector& x, const EvalFunction& func, float h,i
return deriv;
}
ReturnMatrix hessian(const ColumnVector& x, const EvalFunction& func, float h,int errorord)
ReturnMatrix hessian(const ColumnVector& x, const EvalFunction& func, ColumnVector& paramstovaryflags, float h,int errorord)
{ //evaluates the hessian of function "eval" at x in parameter space
//errorord=4 requires something like 8n^2-3n evaluations
......@@ -191,7 +191,7 @@ ReturnMatrix hessian(const ColumnVector& x, const EvalFunction& func, float h,in
}
void minsearch(ColumnVector& x, const EvalFunction& func){
void minsearch(ColumnVector& x, const EvalFunction& func, ColumnVector& paramstovaryflags){
//perform generic function minimization without gradient info
int n=x.Nrows(), maxiter=200*n,iter=0;
int func_evals=0;
......@@ -344,11 +344,10 @@ void minsearch(ColumnVector& x, const EvalFunction& func){
} //closing while
x=v[0].second;
}
void scg(ColumnVector& x,const gEvalFunction& func, float tol, float eps, int niters){
void scg(ColumnVector& x,const gEvalFunction& func, ColumnVector& paramstovaryflags, float tol, float eps, int niters){
int fevals=0;
int gevals=0;
......
......@@ -52,11 +52,11 @@ float diff2(const ColumnVector& x, const EvalFunction& func, int i,int j,float h
ReturnMatrix gradient(const ColumnVector& x, const EvalFunction& func,float h,int errorord=4);// finite diff derivative vector
ReturnMatrix hessian(const ColumnVector& x, const EvalFunction& func,float h,int errorord=4);// finite diff hessian
ReturnMatrix hessian(const ColumnVector& x, const EvalFunction& func, ColumnVector& paramstovaryflags,float h,int errorord=4);// finite diff hessian
void minsearch(ColumnVector& x, const EvalFunction& func);
void minsearch(ColumnVector& x, const EvalFunction& func, ColumnVector& paramstovaryflags);
void scg(ColumnVector& x, const gEvalFunction& func, float tol = 0.0000001, float eps=1e-16, int niters=100);
void scg(ColumnVector& x, const gEvalFunction& func, ColumnVector& paramstovaryflags, float tol = 0.0000001, float eps=1e-16, int niters=100);
class EvalFunction
{//Function where gradient is not analytic (or you are too lazy to work it out) (required for fminsearch)
......@@ -67,7 +67,14 @@ public:
virtual void minimize(ColumnVector& x)
{
minsearch(x,*this);
ColumnVector paramstovaryflags(x.Nrows());
paramstovaryflags = 1;
minsearch(x,*this,paramstovaryflags);
}
virtual void minimize(ColumnVector& x, ColumnVector& paramstovaryflags)
{
minsearch(x,*this,paramstovaryflags);
}
private:
......@@ -86,7 +93,14 @@ public:
virtual void minimize(ColumnVector& x)
{
scg(x,*this);
ColumnVector paramstovaryflags(x.Nrows());
paramstovaryflags = 1;
scg(x,*this,paramstovaryflags);
}
virtual void minimize(ColumnVector& x, ColumnVector& paramstovaryflags)
{
scg(x,*this,paramstovaryflags);
}
private:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment