3 #include <UnitTest++.h>
9 TEST(IterTrackBasicFloat)
14 while( abs(x-xnew) > 2.f*FLT_EPSILON*abs(x) )
25 while( abs(x-xnew) > 2.f*FLT_EPSILON*abs(x) )
35 TEST(IterTrackBasicDouble)
40 while( abs(x-xnew) > 2.*DBL_EPSILON*abs(x) )
50 TEST(IterTrackBasicUnstable)
55 while( abs(x-xnew) > 2.*DBL_EPSILON*abs(x) )
59 xnew = track.
next_val( x, 1./x - 2.*x );
62 CHECK(
fp_equal( abs(xnew), 1./sqrt(3.) ) );
66 TEST(IterTrackBasicStableNeg)
72 while( abs(x-xnew) > 2.*DBL_EPSILON*abs(x) )
76 xnew = track.
next_val( x, 1./x + x/3. );
78 CHECK(
fp_equal( xnew, sqrt(1.5) ) );
81 TEST(IterTrackBasicStablePos)
87 while( abs(x-xnew) > 2.*DBL_EPSILON*abs(x) )
91 xnew = track.
next_val( x, 1./x + 2.*x/3. );
96 double testfun(
double x)
103 double x1, fx1,
x2, fx2, x3, fx3;
116 track.
add( x2, fx2 );
120 vector<double> xvals( navg );
121 for(
int i=0; i < 100 && !track.
lgConverged(); ++i )
125 track.
add( x2, fx2 );
130 double exact_root = asin(0.5);
133 double val = track.
deriv( navg, sigma );
134 double delta_lo = *min_element( xvals.begin(), xvals.end() ) - exact_root;
135 double delta_hi = *max_element( xvals.begin(), xvals.end() ) - exact_root;
136 CHECK( delta_lo < 0. );
137 CHECK( delta_hi > 0. );
140 double err_lo = -0.5*delta_lo;
141 double err_hi = -0.5*delta_hi;
142 CHECK(
fp_bound( sqrt(3.)/2.+err_hi, val, sqrt(3.)/2.+err_lo ) );
148 CHECK( sigma <
max(
pow2(err_lo),
pow2(err_hi) ) );
150 val = track.
deriv( 200 );
151 double val2 = track.
deriv();
153 val = track.
deriv( 200, sigma );
155 val = track.
deriv( sigma2 );
159 val = track.
zero_fit( navg, sigma );
171 TEST(AmsterdamMethod)
173 double x1, fx1,
x2, fx2;
181 CHECK_EQUAL( 0, err );
186 double testfun2(
double x)
192 TEST(AmsterdamMethod2)
194 double x1, fx1,
x2, fx2;
202 CHECK_EQUAL( 0, err );
206 double testfun3(
double x)
212 TEST(AmsterdamMethod3)
214 double x1, fx1,
x2, fx2;
222 CHECK_EQUAL( 0, err );
double bracket_width() const
void add(double x, double fx)
bool fp_equal_tol(sys_float x, sys_float y, sys_float tol)
double Amsterdam_Method(double(*f)(double), double a, double fa, double c, double fc, double tol, int max_iter, int &err)
T next_val(T current, T next_est)
bool fp_equal(sys_float x, sys_float y, int n=3)
int init_bracket(double x1, double fx1, double x2, double fx2)
bool fp_bound(sys_float lo, sys_float x, sys_float hi, int n=3)
double zero_fit(int n, double &sigma) const
double deriv(int n, double &sigma) const