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
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