summaryrefslogtreecommitdiff
path: root/gsl-1.9/doc/examples/min.c
diff options
context:
space:
mode:
Diffstat (limited to 'gsl-1.9/doc/examples/min.c')
-rw-r--r--gsl-1.9/doc/examples/min.c65
1 files changed, 65 insertions, 0 deletions
diff --git a/gsl-1.9/doc/examples/min.c b/gsl-1.9/doc/examples/min.c
new file mode 100644
index 0000000..ebba625
--- /dev/null
+++ b/gsl-1.9/doc/examples/min.c
@@ -0,0 +1,65 @@
+#include <stdio.h>
+#include <gsl/gsl_errno.h>
+#include <gsl/gsl_math.h>
+#include <gsl/gsl_min.h>
+
+double fn1 (double x, void * params)
+{
+ return cos(x) + 1.0;
+}
+
+int
+main (void)
+{
+ int status;
+ int iter = 0, max_iter = 100;
+ const gsl_min_fminimizer_type *T;
+ gsl_min_fminimizer *s;
+ double m = 2.0, m_expected = M_PI;
+ double a = 0.0, b = 6.0;
+ gsl_function F;
+
+ F.function = &fn1;
+ F.params = 0;
+
+ T = gsl_min_fminimizer_brent;
+ s = gsl_min_fminimizer_alloc (T);
+ gsl_min_fminimizer_set (s, &F, m, a, b);
+
+ printf ("using %s method\n",
+ gsl_min_fminimizer_name (s));
+
+ printf ("%5s [%9s, %9s] %9s %10s %9s\n",
+ "iter", "lower", "upper", "min",
+ "err", "err(est)");
+
+ printf ("%5d [%.7f, %.7f] %.7f %+.7f %.7f\n",
+ iter, a, b,
+ m, m - m_expected, b - a);
+
+ do
+ {
+ iter++;
+ status = gsl_min_fminimizer_iterate (s);
+
+ m = gsl_min_fminimizer_x_minimum (s);
+ a = gsl_min_fminimizer_x_lower (s);
+ b = gsl_min_fminimizer_x_upper (s);
+
+ status
+ = gsl_min_test_interval (a, b, 0.001, 0.0);
+
+ if (status == GSL_SUCCESS)
+ printf ("Converged:\n");
+
+ printf ("%5d [%.7f, %.7f] "
+ "%.7f %.7f %+.7f %.7f\n",
+ iter, a, b,
+ m, m_expected, m - m_expected, b - a);
+ }
+ while (status == GSL_CONTINUE && iter < max_iter);
+
+ gsl_min_fminimizer_free (s);
+
+ return status;
+}