summaryrefslogtreecommitdiff
path: root/numlib/zbrenttest.c
diff options
context:
space:
mode:
Diffstat (limited to 'numlib/zbrenttest.c')
-rw-r--r--numlib/zbrenttest.c56
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;
+}
+