|
Packit |
67cb25 |
#define enso_N 168
|
|
Packit |
67cb25 |
#define enso_P 9
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
#define enso_NTRIES 1
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
static double enso_x0[enso_P] = { 10.0, 3.0, 0.5, 44.0, -1.5, 0.5, 26.0, 0.1, 1.5 };
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
static double enso_epsrel = 1.0e-3;
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
static double enso_sigma[enso_P] = {
|
|
Packit |
67cb25 |
1.7488832467E-01,
|
|
Packit |
67cb25 |
2.4310052139E-01,
|
|
Packit |
67cb25 |
2.4354686618E-01,
|
|
Packit |
67cb25 |
9.4408025976E-01,
|
|
Packit |
67cb25 |
2.8078369611E-01,
|
|
Packit |
67cb25 |
4.8073701119E-01,
|
|
Packit |
67cb25 |
4.1612939130E-01,
|
|
Packit |
67cb25 |
5.1460022911E-01,
|
|
Packit |
67cb25 |
2.5434468893E-01
|
|
Packit |
67cb25 |
};
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
static double enso_F[enso_N] = {
|
|
Packit |
67cb25 |
12.90000,
|
|
Packit |
67cb25 |
11.30000,
|
|
Packit |
67cb25 |
10.60000,
|
|
Packit |
67cb25 |
11.20000,
|
|
Packit |
67cb25 |
10.90000,
|
|
Packit |
67cb25 |
7.500000,
|
|
Packit |
67cb25 |
7.700000,
|
|
Packit |
67cb25 |
11.70000,
|
|
Packit |
67cb25 |
12.90000,
|
|
Packit |
67cb25 |
14.30000,
|
|
Packit |
67cb25 |
10.90000,
|
|
Packit |
67cb25 |
13.70000,
|
|
Packit |
67cb25 |
17.10000,
|
|
Packit |
67cb25 |
14.00000,
|
|
Packit |
67cb25 |
15.30000,
|
|
Packit |
67cb25 |
8.500000,
|
|
Packit |
67cb25 |
5.700000,
|
|
Packit |
67cb25 |
5.500000,
|
|
Packit |
67cb25 |
7.600000,
|
|
Packit |
67cb25 |
8.600000,
|
|
Packit |
67cb25 |
7.300000,
|
|
Packit |
67cb25 |
7.600000,
|
|
Packit |
67cb25 |
12.70000,
|
|
Packit |
67cb25 |
11.00000,
|
|
Packit |
67cb25 |
12.70000,
|
|
Packit |
67cb25 |
12.90000,
|
|
Packit |
67cb25 |
13.00000,
|
|
Packit |
67cb25 |
10.90000,
|
|
Packit |
67cb25 |
10.400000,
|
|
Packit |
67cb25 |
10.200000,
|
|
Packit |
67cb25 |
8.000000,
|
|
Packit |
67cb25 |
10.90000,
|
|
Packit |
67cb25 |
13.60000,
|
|
Packit |
67cb25 |
10.500000,
|
|
Packit |
67cb25 |
9.200000,
|
|
Packit |
67cb25 |
12.40000,
|
|
Packit |
67cb25 |
12.70000,
|
|
Packit |
67cb25 |
13.30000,
|
|
Packit |
67cb25 |
10.100000,
|
|
Packit |
67cb25 |
7.800000,
|
|
Packit |
67cb25 |
4.800000,
|
|
Packit |
67cb25 |
3.000000,
|
|
Packit |
67cb25 |
2.500000,
|
|
Packit |
67cb25 |
6.300000,
|
|
Packit |
67cb25 |
9.700000,
|
|
Packit |
67cb25 |
11.60000,
|
|
Packit |
67cb25 |
8.600000,
|
|
Packit |
67cb25 |
12.40000,
|
|
Packit |
67cb25 |
10.500000,
|
|
Packit |
67cb25 |
13.30000,
|
|
Packit |
67cb25 |
10.400000,
|
|
Packit |
67cb25 |
8.100000,
|
|
Packit |
67cb25 |
3.700000,
|
|
Packit |
67cb25 |
10.70000,
|
|
Packit |
67cb25 |
5.100000,
|
|
Packit |
67cb25 |
10.400000,
|
|
Packit |
67cb25 |
10.90000,
|
|
Packit |
67cb25 |
11.70000,
|
|
Packit |
67cb25 |
11.40000,
|
|
Packit |
67cb25 |
13.70000,
|
|
Packit |
67cb25 |
14.10000,
|
|
Packit |
67cb25 |
14.00000,
|
|
Packit |
67cb25 |
12.50000,
|
|
Packit |
67cb25 |
6.300000,
|
|
Packit |
67cb25 |
9.600000,
|
|
Packit |
67cb25 |
11.70000,
|
|
Packit |
67cb25 |
5.000000,
|
|
Packit |
67cb25 |
10.80000,
|
|
Packit |
67cb25 |
12.70000,
|
|
Packit |
67cb25 |
10.80000,
|
|
Packit |
67cb25 |
11.80000,
|
|
Packit |
67cb25 |
12.60000,
|
|
Packit |
67cb25 |
15.70000,
|
|
Packit |
67cb25 |
12.60000,
|
|
Packit |
67cb25 |
14.80000,
|
|
Packit |
67cb25 |
7.800000,
|
|
Packit |
67cb25 |
7.100000,
|
|
Packit |
67cb25 |
11.20000,
|
|
Packit |
67cb25 |
8.100000,
|
|
Packit |
67cb25 |
6.400000,
|
|
Packit |
67cb25 |
5.200000,
|
|
Packit |
67cb25 |
12.00000,
|
|
Packit |
67cb25 |
10.200000,
|
|
Packit |
67cb25 |
12.70000,
|
|
Packit |
67cb25 |
10.200000,
|
|
Packit |
67cb25 |
14.70000,
|
|
Packit |
67cb25 |
12.20000,
|
|
Packit |
67cb25 |
7.100000,
|
|
Packit |
67cb25 |
5.700000,
|
|
Packit |
67cb25 |
6.700000,
|
|
Packit |
67cb25 |
3.900000,
|
|
Packit |
67cb25 |
8.500000,
|
|
Packit |
67cb25 |
8.300000,
|
|
Packit |
67cb25 |
10.80000,
|
|
Packit |
67cb25 |
16.70000,
|
|
Packit |
67cb25 |
12.60000,
|
|
Packit |
67cb25 |
12.50000,
|
|
Packit |
67cb25 |
12.50000,
|
|
Packit |
67cb25 |
9.800000,
|
|
Packit |
67cb25 |
7.200000,
|
|
Packit |
67cb25 |
4.100000,
|
|
Packit |
67cb25 |
10.60000,
|
|
Packit |
67cb25 |
10.100000,
|
|
Packit |
67cb25 |
10.100000,
|
|
Packit |
67cb25 |
11.90000,
|
|
Packit |
67cb25 |
13.60000,
|
|
Packit |
67cb25 |
16.30000,
|
|
Packit |
67cb25 |
17.60000,
|
|
Packit |
67cb25 |
15.50000,
|
|
Packit |
67cb25 |
16.00000,
|
|
Packit |
67cb25 |
15.20000,
|
|
Packit |
67cb25 |
11.20000,
|
|
Packit |
67cb25 |
14.30000,
|
|
Packit |
67cb25 |
14.50000,
|
|
Packit |
67cb25 |
8.500000,
|
|
Packit |
67cb25 |
12.00000,
|
|
Packit |
67cb25 |
12.70000,
|
|
Packit |
67cb25 |
11.30000,
|
|
Packit |
67cb25 |
14.50000,
|
|
Packit |
67cb25 |
15.10000,
|
|
Packit |
67cb25 |
10.400000,
|
|
Packit |
67cb25 |
11.50000,
|
|
Packit |
67cb25 |
13.40000,
|
|
Packit |
67cb25 |
7.500000,
|
|
Packit |
67cb25 |
0.6000000,
|
|
Packit |
67cb25 |
0.3000000,
|
|
Packit |
67cb25 |
5.500000,
|
|
Packit |
67cb25 |
5.000000,
|
|
Packit |
67cb25 |
4.600000,
|
|
Packit |
67cb25 |
8.200000,
|
|
Packit |
67cb25 |
9.900000,
|
|
Packit |
67cb25 |
9.200000,
|
|
Packit |
67cb25 |
12.50000,
|
|
Packit |
67cb25 |
10.90000,
|
|
Packit |
67cb25 |
9.900000,
|
|
Packit |
67cb25 |
8.900000,
|
|
Packit |
67cb25 |
7.600000,
|
|
Packit |
67cb25 |
9.500000,
|
|
Packit |
67cb25 |
8.400000,
|
|
Packit |
67cb25 |
10.70000,
|
|
Packit |
67cb25 |
13.60000,
|
|
Packit |
67cb25 |
13.70000,
|
|
Packit |
67cb25 |
13.70000,
|
|
Packit |
67cb25 |
16.50000,
|
|
Packit |
67cb25 |
16.80000,
|
|
Packit |
67cb25 |
17.10000,
|
|
Packit |
67cb25 |
15.40000,
|
|
Packit |
67cb25 |
9.500000,
|
|
Packit |
67cb25 |
6.100000,
|
|
Packit |
67cb25 |
10.100000,
|
|
Packit |
67cb25 |
9.300000,
|
|
Packit |
67cb25 |
5.300000,
|
|
Packit |
67cb25 |
11.20000,
|
|
Packit |
67cb25 |
16.60000,
|
|
Packit |
67cb25 |
15.60000,
|
|
Packit |
67cb25 |
12.00000,
|
|
Packit |
67cb25 |
11.50000,
|
|
Packit |
67cb25 |
8.600000,
|
|
Packit |
67cb25 |
13.80000,
|
|
Packit |
67cb25 |
8.700000,
|
|
Packit |
67cb25 |
8.600000,
|
|
Packit |
67cb25 |
8.600000,
|
|
Packit |
67cb25 |
8.700000,
|
|
Packit |
67cb25 |
12.80000,
|
|
Packit |
67cb25 |
13.20000,
|
|
Packit |
67cb25 |
14.00000,
|
|
Packit |
67cb25 |
13.40000,
|
|
Packit |
67cb25 |
14.80000
|
|
Packit |
67cb25 |
};
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
static void
|
|
Packit |
67cb25 |
enso_checksol(const double x[], const double sumsq,
|
|
Packit |
67cb25 |
const double epsrel, const char *sname,
|
|
Packit |
67cb25 |
const char *pname)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
size_t i;
|
|
Packit |
67cb25 |
const double sumsq_exact = 7.8853978668E+02;
|
|
Packit |
67cb25 |
const double enso_x[enso_P] = {
|
|
Packit |
67cb25 |
1.0510749193E+01, 3.0762128085E+00, 5.3280138227E-01,
|
|
Packit |
67cb25 |
4.4311088700E+01, -1.6231428586E+00, 5.2554493756E-01,
|
|
Packit |
67cb25 |
2.6887614440E+01, 2.1232288488E-01, 1.4966870418E+00 };
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
gsl_test_rel(sumsq, sumsq_exact, epsrel, "%s/%s sumsq",
|
|
Packit |
67cb25 |
sname, pname);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
for (i = 0; i < enso_P; ++i)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
gsl_test_rel(x[i], enso_x[i], epsrel, "%s/%s i=%zu",
|
|
Packit |
67cb25 |
sname, pname, i);
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
static int
|
|
Packit |
67cb25 |
enso_f (const gsl_vector * x, void *params, gsl_vector * f)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
double b[enso_P];
|
|
Packit |
67cb25 |
size_t i;
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
for (i = 0; i < enso_P; i++)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
b[i] = gsl_vector_get(x, i);
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
for (i = 0; i < enso_N; i++)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
double t = (i + 1.0);
|
|
Packit |
67cb25 |
double y;
|
|
Packit |
67cb25 |
y = b[0];
|
|
Packit |
67cb25 |
y += b[1] * cos(2*M_PI*t/12);
|
|
Packit |
67cb25 |
y += b[2] * sin(2*M_PI*t/12);
|
|
Packit |
67cb25 |
y += b[4] * cos(2*M_PI*t/b[3]);
|
|
Packit |
67cb25 |
y += b[5] * sin(2*M_PI*t/b[3]);
|
|
Packit |
67cb25 |
y += b[7] * cos(2*M_PI*t/b[6]);
|
|
Packit |
67cb25 |
y += b[8] * sin(2*M_PI*t/b[6]);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
gsl_vector_set (f, i, enso_F[i] - y);
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
return GSL_SUCCESS;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
static int
|
|
Packit |
67cb25 |
enso_df (const gsl_vector * x, void *params, gsl_matrix * df)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
double b[enso_P];
|
|
Packit |
67cb25 |
size_t i;
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
for (i = 0; i < enso_P; i++)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
b[i] = gsl_vector_get(x, i);
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
for (i = 0; i < enso_N; i++)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
double t = (i + 1.0);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
gsl_matrix_set (df, i, 0, -1.0);
|
|
Packit |
67cb25 |
gsl_matrix_set (df, i, 1, -cos(2*M_PI*t/12));
|
|
Packit |
67cb25 |
gsl_matrix_set (df, i, 2, -sin(2*M_PI*t/12));
|
|
Packit |
67cb25 |
gsl_matrix_set (df, i, 3,
|
|
Packit |
67cb25 |
-b[4]*(2*M_PI*t/(b[3]*b[3]))*sin(2*M_PI*t/b[3])
|
|
Packit |
67cb25 |
+b[5]*(2*M_PI*t/(b[3]*b[3]))*cos(2*M_PI*t/b[3]));
|
|
Packit |
67cb25 |
gsl_matrix_set (df, i, 4, -cos(2*M_PI*t/b[3]));
|
|
Packit |
67cb25 |
gsl_matrix_set (df, i, 5, -sin(2*M_PI*t/b[3]));
|
|
Packit |
67cb25 |
gsl_matrix_set (df, i, 6,
|
|
Packit |
67cb25 |
-b[7] * (2*M_PI*t/(b[6]*b[6])) * sin(2*M_PI*t/b[6])
|
|
Packit |
67cb25 |
+b[8] * (2*M_PI*t/(b[6]*b[6])) * cos(2*M_PI*t/b[6]));
|
|
Packit |
67cb25 |
gsl_matrix_set (df, i, 7, -cos(2*M_PI*t/b[6]));
|
|
Packit |
67cb25 |
gsl_matrix_set (df, i, 8, -sin(2*M_PI*t/b[6]));
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
return GSL_SUCCESS;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
static gsl_multifit_function_fdf enso_func =
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
&enso_f,
|
|
Packit |
67cb25 |
&enso_df,
|
|
Packit |
67cb25 |
NULL,
|
|
Packit |
67cb25 |
enso_N,
|
|
Packit |
67cb25 |
enso_P,
|
|
Packit |
67cb25 |
NULL,
|
|
Packit |
67cb25 |
0,
|
|
Packit |
67cb25 |
0
|
|
Packit |
67cb25 |
};
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
static test_fdf_problem enso_problem =
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
"nist-ENSO",
|
|
Packit |
67cb25 |
enso_x0,
|
|
Packit |
67cb25 |
enso_sigma,
|
|
Packit |
67cb25 |
&enso_epsrel,
|
|
Packit |
67cb25 |
enso_NTRIES,
|
|
Packit |
67cb25 |
&enso_checksol,
|
|
Packit |
67cb25 |
&enso_func
|
|
Packit |
67cb25 |
};
|