diff options
author | Jörg Frings-Fürst <debian@jff-webhosting.net> | 2014-09-01 13:56:46 +0200 |
---|---|---|
committer | Jörg Frings-Fürst <debian@jff-webhosting.net> | 2014-09-01 13:56:46 +0200 |
commit | 22f703cab05b7cd368f4de9e03991b7664dc5022 (patch) | |
tree | 6f4d50beaa42328e24b1c6b56b6ec059e4ef21a5 /numlib/zbrenttest.c |
Initial import of argyll version 1.5.1-8debian/1.5.1-8
Diffstat (limited to 'numlib/zbrenttest.c')
-rw-r--r-- | numlib/zbrenttest.c | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/numlib/zbrenttest.c b/numlib/zbrenttest.c new file mode 100644 index 0000000..d7b44d3 --- /dev/null +++ b/numlib/zbrenttest.c @@ -0,0 +1,56 @@ +/* Do a test of the brent 1d root finder */ + +/* + * Copyright 2000 Graeme W. Gill + * All rights reserved. + * + * This material is licenced under the GNU AFFERO GENERAL PUBLIC LICENSE Version 3 :- + * see the License.txt file for licencing details. + */ + +/* Solves (3 - 2*X) * X = -1 */ + +#include "numlib.h" + +int its = 0; +double fcn(void *fdata, double tp); + +/* Expected solution */ +double expect = -2.80776403408306e-01; + +int main(void) +{ + int rv; + double x1, x2, soln; + + /* Attempt bracket the solution */ + x1 = -0.1; + x2 = 0.1; + rv = zbrac(&x1, &x2, fcn, NULL); + if (rv != 0) { + error("zbrack failed with rv = %d\n",rv); + } + printf("Got bracket %f, %f in %d itterations\n",x1,x2,its); + + /* Solve the equation */ + its = 0; + rv = zbrent(&soln, x1, x2, 1e-6, fcn, NULL); + if (rv != 0) { + error("xbrent failed with rv = %d\n",rv); + } + + printf("Solution = %f, expected = %f in %d itterations\n",soln, expect, its); + return 0; + +} /* main() */ + +/* Function being solved */ +double fcn(void *fdata, double tp) +{ + double temp; + its++; + temp = ((3.0 - 2.0 * tp) * tp) + 1.0; +/* printf("~~ %f returns %f\n",tp,temp); */ + return temp; +} + |