summaryrefslogtreecommitdiff
path: root/gsl-1.9/multifit/test_nelson.c
diff options
context:
space:
mode:
Diffstat (limited to 'gsl-1.9/multifit/test_nelson.c')
-rw-r--r--gsl-1.9/multifit/test_nelson.c217
1 files changed, 217 insertions, 0 deletions
diff --git a/gsl-1.9/multifit/test_nelson.c b/gsl-1.9/multifit/test_nelson.c
new file mode 100644
index 0000000..19f594e
--- /dev/null
+++ b/gsl-1.9/multifit/test_nelson.c
@@ -0,0 +1,217 @@
+const size_t nelson_N = 128;
+const size_t nelson_P = 3;
+
+/* double nelson_x0[3] = { 2, 0.0001, -0.01}; */
+
+double nelson_x0[3] = { 2.5 , 0.000000005, -0.01};
+
+double nelson_x[3] = {
+ 2.5906836021E+00,
+ 5.6177717026E-09,
+ -5.7701013174E-02
+};
+
+double nelson_sumsq = 3.7976833176E+00;
+
+double nelson_sigma[3] = {
+ 1.9149996413E-02,
+ 6.1124096540E-09,
+ 3.9572366543E-03
+};
+
+double nelson_F[128][3] = {
+ { 15.00E0, 1E0, 180E0},
+ { 17.00E0, 1E0, 180E0},
+ { 15.50E0, 1E0, 180E0},
+ { 16.50E0, 1E0, 180E0},
+ { 15.50E0, 1E0, 225E0},
+ { 15.00E0, 1E0, 225E0},
+ { 16.00E0, 1E0, 225E0},
+ { 14.50E0, 1E0, 225E0},
+ { 15.00E0, 1E0, 250E0},
+ { 14.50E0, 1E0, 250E0},
+ { 12.50E0, 1E0, 250E0},
+ { 11.00E0, 1E0, 250E0},
+ { 14.00E0, 1E0, 275E0},
+ { 13.00E0, 1E0, 275E0},
+ { 14.00E0, 1E0, 275E0},
+ { 11.50E0, 1E0, 275E0},
+ { 14.00E0, 2E0, 180E0},
+ { 16.00E0, 2E0, 180E0},
+ { 13.00E0, 2E0, 180E0},
+ { 13.50E0, 2E0, 180E0},
+ { 13.00E0, 2E0, 225E0},
+ { 13.50E0, 2E0, 225E0},
+ { 12.50E0, 2E0, 225E0},
+ { 12.50E0, 2E0, 225E0},
+ { 12.50E0, 2E0, 250E0},
+ { 12.00E0, 2E0, 250E0},
+ { 11.50E0, 2E0, 250E0},
+ { 12.00E0, 2E0, 250E0},
+ { 13.00E0, 2E0, 275E0},
+ { 11.50E0, 2E0, 275E0},
+ { 13.00E0, 2E0, 275E0},
+ { 12.50E0, 2E0, 275E0},
+ { 13.50E0, 4E0, 180E0},
+ { 17.50E0, 4E0, 180E0},
+ { 17.50E0, 4E0, 180E0},
+ { 13.50E0, 4E0, 180E0},
+ { 12.50E0, 4E0, 225E0},
+ { 12.50E0, 4E0, 225E0},
+ { 15.00E0, 4E0, 225E0},
+ { 13.00E0, 4E0, 225E0},
+ { 12.00E0, 4E0, 250E0},
+ { 13.00E0, 4E0, 250E0},
+ { 12.00E0, 4E0, 250E0},
+ { 13.50E0, 4E0, 250E0},
+ { 10.00E0, 4E0, 275E0},
+ { 11.50E0, 4E0, 275E0},
+ { 11.00E0, 4E0, 275E0},
+ { 9.50E0, 4E0, 275E0},
+ { 15.00E0, 8E0, 180E0},
+ { 15.00E0, 8E0, 180E0},
+ { 15.50E0, 8E0, 180E0},
+ { 16.00E0, 8E0, 180E0},
+ { 13.00E0, 8E0, 225E0},
+ { 10.50E0, 8E0, 225E0},
+ { 13.50E0, 8E0, 225E0},
+ { 14.00E0, 8E0, 225E0},
+ { 12.50E0, 8E0, 250E0},
+ { 12.00E0, 8E0, 250E0},
+ { 11.50E0, 8E0, 250E0},
+ { 11.50E0, 8E0, 250E0},
+ { 6.50E0, 8E0, 275E0},
+ { 5.50E0, 8E0, 275E0},
+ { 6.00E0, 8E0, 275E0},
+ { 6.00E0, 8E0, 275E0},
+ { 18.50E0, 16E0, 180E0},
+ { 17.00E0, 16E0, 180E0},
+ { 15.30E0, 16E0, 180E0},
+ { 16.00E0, 16E0, 180E0},
+ { 13.00E0, 16E0, 225E0},
+ { 14.00E0, 16E0, 225E0},
+ { 12.50E0, 16E0, 225E0},
+ { 11.00E0, 16E0, 225E0},
+ { 12.00E0, 16E0, 250E0},
+ { 12.00E0, 16E0, 250E0},
+ { 11.50E0, 16E0, 250E0},
+ { 12.00E0, 16E0, 250E0},
+ { 6.00E0, 16E0, 275E0},
+ { 6.00E0, 16E0, 275E0},
+ { 5.00E0, 16E0, 275E0},
+ { 5.50E0, 16E0, 275E0},
+ { 12.50E0, 32E0, 180E0},
+ { 13.00E0, 32E0, 180E0},
+ { 16.00E0, 32E0, 180E0},
+ { 12.00E0, 32E0, 180E0},
+ { 11.00E0, 32E0, 225E0},
+ { 9.50E0, 32E0, 225E0},
+ { 11.00E0, 32E0, 225E0},
+ { 11.00E0, 32E0, 225E0},
+ { 11.00E0, 32E0, 250E0},
+ { 10.00E0, 32E0, 250E0},
+ { 10.50E0, 32E0, 250E0},
+ { 10.50E0, 32E0, 250E0},
+ { 2.70E0, 32E0, 275E0},
+ { 2.70E0, 32E0, 275E0},
+ { 2.50E0, 32E0, 275E0},
+ { 2.40E0, 32E0, 275E0},
+ { 13.00E0, 48E0, 180E0},
+ { 13.50E0, 48E0, 180E0},
+ { 16.50E0, 48E0, 180E0},
+ { 13.60E0, 48E0, 180E0},
+ { 11.50E0, 48E0, 225E0},
+ { 10.50E0, 48E0, 225E0},
+ { 13.50E0, 48E0, 225E0},
+ { 12.00E0, 48E0, 225E0},
+ { 7.00E0, 48E0, 250E0},
+ { 6.90E0, 48E0, 250E0},
+ { 8.80E0, 48E0, 250E0},
+ { 7.90E0, 48E0, 250E0},
+ { 1.20E0, 48E0, 275E0},
+ { 1.50E0, 48E0, 275E0},
+ { 1.00E0, 48E0, 275E0},
+ { 1.50E0, 48E0, 275E0},
+ { 13.00E0, 64E0, 180E0},
+ { 12.50E0, 64E0, 180E0},
+ { 16.50E0, 64E0, 180E0},
+ { 16.00E0, 64E0, 180E0},
+ { 11.00E0, 64E0, 225E0},
+ { 11.50E0, 64E0, 225E0},
+ { 10.50E0, 64E0, 225E0},
+ { 10.00E0, 64E0, 225E0},
+ { 7.27E0, 64E0, 250E0},
+ { 7.50E0, 64E0, 250E0},
+ { 6.70E0, 64E0, 250E0},
+ { 7.60E0, 64E0, 250E0},
+ { 1.50E0, 64E0, 275E0},
+ { 1.00E0, 64E0, 275E0},
+ { 1.20E0, 64E0, 275E0},
+ { 1.20E0, 64E0, 275E0}
+};
+
+
+int
+nelson_f (const gsl_vector * x, void *params, gsl_vector * f)
+{
+ double b[3];
+ size_t i;
+
+ for (i = 0; i < 3; i++)
+ {
+ b[i] = gsl_vector_get(x, i);
+ }
+
+
+
+ for (i = 0; i < 128; i++)
+ {
+ double x1 = nelson_F[i][1];
+ double x2 = nelson_F[i][2];
+
+ double y = b[0] - b[1] * x1 * (b[2]*x2 < -100) ? 0.0 : exp(-b[2] * x2);
+
+ gsl_vector_set (f, i, log(nelson_F[i][0]) - y);
+ }
+
+ return GSL_SUCCESS;
+}
+
+int
+nelson_df (const gsl_vector * x, void *params, gsl_matrix * df)
+{
+ double b[3];
+ size_t i;
+
+ for (i = 0; i < 3; i++)
+ {
+ b[i] = gsl_vector_get(x, i);
+ }
+
+ for (i = 0; i < 128; i++)
+ {
+ double x1 = nelson_F[i][1];
+ double x2 = nelson_F[i][2];
+
+ gsl_matrix_set (df, i, 0, -1.0);
+ gsl_matrix_set (df, i, 1, x1 * exp(-b[2] * x2));
+ gsl_matrix_set (df, i, 2, -b[1] * x1 * x2 * exp(-b[2] * x2));
+ }
+
+ return GSL_SUCCESS;
+}
+
+int
+nelson_fdf (const gsl_vector * x, void *params,
+ gsl_vector * f, gsl_matrix * df)
+{
+ nelson_f (x, params, f);
+ nelson_df (x, params, df);
+
+ return GSL_SUCCESS;
+}
+
+
+
+
+