summaryrefslogtreecommitdiffstats
path: root/web/server/h2o/libh2o/deps/klib/test/kmin_test.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--web/server/h2o/libh2o/deps/klib/test/kmin_test.c48
1 files changed, 48 insertions, 0 deletions
diff --git a/web/server/h2o/libh2o/deps/klib/test/kmin_test.c b/web/server/h2o/libh2o/deps/klib/test/kmin_test.c
new file mode 100644
index 00000000..33ccd1cb
--- /dev/null
+++ b/web/server/h2o/libh2o/deps/klib/test/kmin_test.c
@@ -0,0 +1,48 @@
+#include <stdio.h>
+#include <math.h>
+#include "kmath.h"
+
+static int n_evals;
+
+double f_Chebyquad(int n, double *x, void *data)
+{
+ int i, j;
+ double y[20][20], f;
+ int np, iw;
+ double sum;
+ for (j = 0; j != n; ++j) {
+ y[0][j] = 1.;
+ y[1][j] = 2. * x[j] - 1.;
+ }
+ for (i = 1; i != n; ++i)
+ for (j = 0; j != n; ++j)
+ y[i+1][j] = 2. * y[1][j] * y[i][j] - y[i-1][j];
+ f = 0.;
+ np = n + 1;
+ iw = 1;
+ for (i = 0; i != np; ++i) {
+ sum = 0.;
+ for (j = 0; j != n; ++j) sum += y[i][j];
+ sum /= n;
+ if (iw > 0) sum += 1. / ((i - 1) * (i + 1));
+ iw = -iw;
+ f += sum * sum;
+ }
+ ++n_evals;
+ return f;
+}
+
+int main()
+{
+ double x[20], y;
+ int n, i;
+ printf("\nMinimizer: Hooke-Jeeves\n");
+ for (n = 2; n <= 8; n += 2) {
+ for (i = 0; i != n; ++i) x[i] = (double)(i + 1) / n;
+ n_evals = 0;
+ y = kmin_hj(f_Chebyquad, n, x, 0, KMIN_RADIUS, KMIN_EPS, KMIN_MAXCALL);
+ printf("n=%d,min=%.8lg,n_evals=%d\n", n, y, n_evals);
+ }
+ printf("\n");
+ return 0;
+}