diff options
Diffstat (limited to 'gsl-1.9/multifit/test_enso.c')
-rw-r--r-- | gsl-1.9/multifit/test_enso.c | 279 |
1 files changed, 279 insertions, 0 deletions
diff --git a/gsl-1.9/multifit/test_enso.c b/gsl-1.9/multifit/test_enso.c new file mode 100644 index 0000000..6343738 --- /dev/null +++ b/gsl-1.9/multifit/test_enso.c @@ -0,0 +1,279 @@ +const size_t enso_N = 168; +const size_t enso_P = 9; + +double enso_x0[9] = { 10.0, 3.0, 0.5, 44.0, -1.5, 0.5, 26.0, 0.1, 1.5 }; + +double enso_x[9] = { + 1.0510749193E+01, + 3.0762128085E+00, + 5.3280138227E-01, + 4.4311088700E+01, + -1.6231428586E+00, + 5.2554493756E-01, + 2.6887614440E+01, + 2.1232288488E-01, + 1.4966870418E+00 +}; + +double enso_sumsq = 7.8853978668E+02; + +double enso_sigma[9] = { + 1.7488832467E-01, + 2.4310052139E-01, + 2.4354686618E-01, + 9.4408025976E-01, + 2.8078369611E-01, + 4.8073701119E-01, + 4.1612939130E-01, + 5.1460022911E-01, + 2.5434468893E-01 +}; + +double enso_F[168] = { + 12.90000, + 11.30000, + 10.60000, + 11.20000, + 10.90000, + 7.500000, + 7.700000, + 11.70000, + 12.90000, + 14.30000, + 10.90000, + 13.70000, + 17.10000, + 14.00000, + 15.30000, + 8.500000, + 5.700000, + 5.500000, + 7.600000, + 8.600000, + 7.300000, + 7.600000, + 12.70000, + 11.00000, + 12.70000, + 12.90000, + 13.00000, + 10.90000, + 10.400000, + 10.200000, + 8.000000, + 10.90000, + 13.60000, + 10.500000, + 9.200000, + 12.40000, + 12.70000, + 13.30000, + 10.100000, + 7.800000, + 4.800000, + 3.000000, + 2.500000, + 6.300000, + 9.700000, + 11.60000, + 8.600000, + 12.40000, + 10.500000, + 13.30000, + 10.400000, + 8.100000, + 3.700000, + 10.70000, + 5.100000, + 10.400000, + 10.90000, + 11.70000, + 11.40000, + 13.70000, + 14.10000, + 14.00000, + 12.50000, + 6.300000, + 9.600000, + 11.70000, + 5.000000, + 10.80000, + 12.70000, + 10.80000, + 11.80000, + 12.60000, + 15.70000, + 12.60000, + 14.80000, + 7.800000, + 7.100000, + 11.20000, + 8.100000, + 6.400000, + 5.200000, + 12.00000, + 10.200000, + 12.70000, + 10.200000, + 14.70000, + 12.20000, + 7.100000, + 5.700000, + 6.700000, + 3.900000, + 8.500000, + 8.300000, + 10.80000, + 16.70000, + 12.60000, + 12.50000, + 12.50000, + 9.800000, + 7.200000, + 4.100000, + 10.60000, + 10.100000, + 10.100000, + 11.90000, + 13.60000, + 16.30000, + 17.60000, + 15.50000, + 16.00000, + 15.20000, + 11.20000, + 14.30000, + 14.50000, + 8.500000, + 12.00000, + 12.70000, + 11.30000, + 14.50000, + 15.10000, + 10.400000, + 11.50000, + 13.40000, + 7.500000, + 0.6000000, + 0.3000000, + 5.500000, + 5.000000, + 4.600000, + 8.200000, + 9.900000, + 9.200000, + 12.50000, + 10.90000, + 9.900000, + 8.900000, + 7.600000, + 9.500000, + 8.400000, + 10.70000, + 13.60000, + 13.70000, + 13.70000, + 16.50000, + 16.80000, + 17.10000, + 15.40000, + 9.500000, + 6.100000, + 10.100000, + 9.300000, + 5.300000, + 11.20000, + 16.60000, + 15.60000, + 12.00000, + 11.50000, + 8.600000, + 13.80000, + 8.700000, + 8.600000, + 8.600000, + 8.700000, + 12.80000, + 13.20000, + 14.00000, + 13.40000, + 14.80000 +}; + + +int +enso_f (const gsl_vector * x, void *params, gsl_vector * f) +{ + double b[9]; + size_t i; + + for (i = 0; i < 9; i++) + { + b[i] = gsl_vector_get(x, i); + } + + for (i = 0; i < 168; i++) + { + double t = (i + 1.0); + double y; + y = b[0]; + y += b[1] * cos(2*M_PI*t/12); + y += b[2] * sin(2*M_PI*t/12); + y += b[4] * cos(2*M_PI*t/b[3]); + y += b[5] * sin(2*M_PI*t/b[3]); + y += b[7] * cos(2*M_PI*t/b[6]); + y += b[8] * sin(2*M_PI*t/b[6]); + + gsl_vector_set (f, i, enso_F[i] - y); + } + + return GSL_SUCCESS; +} + +int +enso_df (const gsl_vector * x, void *params, gsl_matrix * df) +{ + double b[9]; + size_t i; + + for (i = 0; i < 9; i++) + { + b[i] = gsl_vector_get(x, i); + } + + for (i = 0; i < 168; i++) + { + double t = (i + 1.0); + + gsl_matrix_set (df, i, 0, -1.0); + gsl_matrix_set (df, i, 1, -cos(2*M_PI*t/12)); + gsl_matrix_set (df, i, 2, -sin(2*M_PI*t/12)); + gsl_matrix_set (df, i, 3, + -b[4]*(2*M_PI*t/(b[3]*b[3]))*sin(2*M_PI*t/b[3]) + +b[5]*(2*M_PI*t/(b[3]*b[3]))*cos(2*M_PI*t/b[3])); + gsl_matrix_set (df, i, 4, -cos(2*M_PI*t/b[3])); + gsl_matrix_set (df, i, 5, -sin(2*M_PI*t/b[3])); + gsl_matrix_set (df, i, 6, + -b[7] * (2*M_PI*t/(b[6]*b[6])) * sin(2*M_PI*t/b[6]) + +b[8] * (2*M_PI*t/(b[6]*b[6])) * cos(2*M_PI*t/b[6])); + gsl_matrix_set (df, i, 7, -cos(2*M_PI*t/b[6])); + gsl_matrix_set (df, i, 8, -sin(2*M_PI*t/b[6])); + } + + return GSL_SUCCESS; +} + +int +enso_fdf (const gsl_vector * x, void *params, + gsl_vector * f, gsl_matrix * df) +{ + enso_f (x, params, f); + enso_df (x, params, df); + + return GSL_SUCCESS; +} + + + + + |