function class construction


schrs
12-31-2007, 02:12 AM
I tried to test quasinewton.h using 2.1 example code xdfpmin.cpp.
But I cannot initiate function class.

Would someone help me?
My code is below.

#include <nr3\nr3.h>
#include <nr3\ludcmp.h>
#include <nr3\qrdcmp.h>
#include <nr3\roots_multidim.h>
#include <nr3\quasinewton.h>

int nfunc,ndfunc;


Doub func(VecDoub_I &x)
{
Doub x1p2sqr=SQR(2.0+x[0]);

nfunc++;
return 10.0*SQR(SQR(x[1])*(3.0-x[0])-SQR(x[0])*(3.0+x[0]))+
x1p2sqr/(1.0+x1p2sqr);
}
int main(void)
{
const int NDIM=2;
const Doub GTOL=1.0e-4;
int iter;
Doub fret;
VecDoub_IO p(NDIM);
Funcd<Doub> aa(func); // Here is something wrong.

cout << "True minimum is at (-2.0,+-0.89442719)" << endl;
nfunc=ndfunc=0;
p[0]=0.1; p[1]=4.2;
cout << fixed << setprecision(4);
cout << "Starting vector: (" << setw(7) << p[0];
cout << "," << setw(7) << p[1] << ")" << endl;
cout << fixed << setprecision(6);
dfpmin(p,GTOL,iter,fret, aa);
cout << "Iterations: " << iter << endl;
cout << "Func. evals: " << nfunc << endl;
cout << "Deriv. evals: " << ndfunc << endl;
cout << "Solution vector: (" << setw(9) << p[0];
cout << "," << setw(9) << p[1] << ")" << endl;
cout << "Func. value at solution " << setw(14) << fret << endl;
return 0;
}


Jong-Ho

davekw7x
01-11-2008, 05:10 PM
I tried to test...


//Your #includes go here

int nfunc;

struct Ftor {
Doub operator ()(VecDoub_I & x) const
{
Doub x1p2sqr = SQR(2.0 + x[0]);

nfunc++;
return 10.0 * SQR(SQR(x[1]) * (3.0 - x[0]) -
SQR(x[0]) * (3.0 + x[0])) + x1p2sqr / (1.0 +
x1p2sqr);
}
};



int main()
{
const int NDIM = 2;
const Doub GTOL = 1.0e-4;
int iter;
Doub fret;
VecDoub_IO p(NDIM);

Ftor f;
Funcd < Ftor > aa(f);

nfunc = 0;
p[0] = 0.1;
p[1] = 4.2;


cout << "True minimum is at (-2.00000000,+-0.89442719)" << endl;
cout << fixed << setprecision(8) << showpos;

cout << "Starting vector: (" << p[0];
cout << "," << p[1] << ")" << endl;
dfpmin(p, GTOL, iter, fret, aa);
cout << "Solution vector: (" << p[0];
cout << "," << p[1] << ")" << endl << endl;

cout << "Func value at solution = " <<scientific << fret << endl << endl;

cout << noshowpos;
cout << "Number of Iterations = " << setw(3) << iter << endl;
cout << "Number of Func evals = " << setw(3) << nfunc << endl;


return 0;
}



Output:


True minimum is at (-2.00000000,+-0.89442719)
Starting vector: (+0.10000000,+4.20000000)
Solution vector: (-2.00000003,+0.89442719)

Func value at solution = +2.91111425e-15

Number of Iterations = 39
Number of Func evals = 135



Dave