Blame multifit/test_kirby2.c

Packit 67cb25
#define kirby2_N       151
Packit 67cb25
#define kirby2_P       5
Packit 67cb25
Packit 67cb25
#define kirby2_NTRIES  1
Packit 67cb25
Packit 67cb25
/* double kirby2_x0[kirby2_P] = { 2, -0.1, 0.003, -0.001, 0.00001 }; */
Packit 67cb25
Packit 67cb25
static double kirby2_x0[kirby2_P] = { 1.5, -0.15, 0.0025, -0.0015, 0.00002 }; 
Packit 67cb25
Packit 67cb25
static double kirby2_epsrel = 1.0e-5;
Packit 67cb25
Packit 67cb25
static double kirby2_sigma[kirby2_P] = {
Packit 67cb25
  8.7989634338E-02,
Packit 67cb25
  4.1182041386E-03,
Packit 67cb25
  4.1856520458E-05,
Packit 67cb25
  5.8931897355E-05,
Packit 67cb25
  2.0129761919E-07
Packit 67cb25
};
Packit 67cb25
Packit 67cb25
static double kirby2_F1[kirby2_N] = {
Packit 67cb25
       0.0082E0,
Packit 67cb25
       0.0112E0,
Packit 67cb25
       0.0149E0,
Packit 67cb25
       0.0198E0,
Packit 67cb25
       0.0248E0,
Packit 67cb25
       0.0324E0,
Packit 67cb25
       0.0420E0,
Packit 67cb25
       0.0549E0,
Packit 67cb25
       0.0719E0,
Packit 67cb25
       0.0963E0,
Packit 67cb25
       0.1291E0,
Packit 67cb25
       0.1710E0,
Packit 67cb25
       0.2314E0,
Packit 67cb25
       0.3227E0,
Packit 67cb25
       0.4809E0,
Packit 67cb25
       0.7084E0,
Packit 67cb25
       1.0220E0,
Packit 67cb25
       1.4580E0,
Packit 67cb25
       1.9520E0,
Packit 67cb25
       2.5410E0,
Packit 67cb25
       3.2230E0,
Packit 67cb25
       3.9990E0,
Packit 67cb25
       4.8520E0,
Packit 67cb25
       5.7320E0,
Packit 67cb25
       6.7270E0,
Packit 67cb25
       7.8350E0,
Packit 67cb25
       9.0250E0,
Packit 67cb25
      10.2670E0,
Packit 67cb25
      11.5780E0,
Packit 67cb25
      12.9440E0,
Packit 67cb25
      14.3770E0,
Packit 67cb25
      15.8560E0,
Packit 67cb25
      17.3310E0,
Packit 67cb25
      18.8850E0,
Packit 67cb25
      20.5750E0,
Packit 67cb25
      22.3200E0,
Packit 67cb25
      22.3030E0,
Packit 67cb25
      23.4600E0,
Packit 67cb25
      24.0600E0,
Packit 67cb25
      25.2720E0,
Packit 67cb25
      25.8530E0,
Packit 67cb25
      27.1100E0,
Packit 67cb25
      27.6580E0,
Packit 67cb25
      28.9240E0,
Packit 67cb25
      29.5110E0,
Packit 67cb25
      30.7100E0,
Packit 67cb25
      31.3500E0,
Packit 67cb25
      32.5200E0,
Packit 67cb25
      33.2300E0,
Packit 67cb25
      34.3300E0,
Packit 67cb25
      35.0600E0,
Packit 67cb25
      36.1700E0,
Packit 67cb25
      36.8400E0,
Packit 67cb25
      38.0100E0,
Packit 67cb25
      38.6700E0,
Packit 67cb25
      39.8700E0,
Packit 67cb25
      40.0300E0,
Packit 67cb25
      40.5000E0,
Packit 67cb25
      41.3700E0,
Packit 67cb25
      41.6700E0,
Packit 67cb25
      42.3100E0,
Packit 67cb25
      42.7300E0,
Packit 67cb25
      43.4600E0,
Packit 67cb25
      44.1400E0,
Packit 67cb25
      44.5500E0,
Packit 67cb25
      45.2200E0,
Packit 67cb25
      45.9200E0,
Packit 67cb25
      46.3000E0,
Packit 67cb25
      47.0000E0,
Packit 67cb25
      47.6800E0,
Packit 67cb25
      48.0600E0,
Packit 67cb25
      48.7400E0,
Packit 67cb25
      49.4100E0,
Packit 67cb25
      49.7600E0,
Packit 67cb25
      50.4300E0,
Packit 67cb25
      51.1100E0,
Packit 67cb25
      51.5000E0,
Packit 67cb25
      52.1200E0,
Packit 67cb25
      52.7600E0,
Packit 67cb25
      53.1800E0,
Packit 67cb25
      53.7800E0,
Packit 67cb25
      54.4600E0,
Packit 67cb25
      54.8300E0,
Packit 67cb25
      55.4000E0,
Packit 67cb25
      56.4300E0,
Packit 67cb25
      57.0300E0,
Packit 67cb25
      58.0000E0,
Packit 67cb25
      58.6100E0,
Packit 67cb25
      59.5800E0,
Packit 67cb25
      60.1100E0,
Packit 67cb25
      61.1000E0,
Packit 67cb25
      61.6500E0,
Packit 67cb25
      62.5900E0,
Packit 67cb25
      63.1200E0,
Packit 67cb25
      64.0300E0,
Packit 67cb25
      64.6200E0,
Packit 67cb25
      65.4900E0,
Packit 67cb25
      66.0300E0,
Packit 67cb25
      66.8900E0,
Packit 67cb25
      67.4200E0,
Packit 67cb25
      68.2300E0,
Packit 67cb25
      68.7700E0,
Packit 67cb25
      69.5900E0,
Packit 67cb25
      70.1100E0,
Packit 67cb25
      70.8600E0,
Packit 67cb25
      71.4300E0,
Packit 67cb25
      72.1600E0,
Packit 67cb25
      72.7000E0,
Packit 67cb25
      73.4000E0,
Packit 67cb25
      73.9300E0,
Packit 67cb25
      74.6000E0,
Packit 67cb25
      75.1600E0,
Packit 67cb25
      75.8200E0,
Packit 67cb25
      76.3400E0,
Packit 67cb25
      76.9800E0,
Packit 67cb25
      77.4800E0,
Packit 67cb25
      78.0800E0,
Packit 67cb25
      78.6000E0,
Packit 67cb25
      79.1700E0,
Packit 67cb25
      79.6200E0,
Packit 67cb25
      79.8800E0,
Packit 67cb25
      80.1900E0,
Packit 67cb25
      80.6600E0,
Packit 67cb25
      81.2200E0,
Packit 67cb25
      81.6600E0,
Packit 67cb25
      82.1600E0,
Packit 67cb25
      82.5900E0,
Packit 67cb25
      83.1400E0,
Packit 67cb25
      83.5000E0,
Packit 67cb25
      84.0000E0,
Packit 67cb25
      84.4000E0,
Packit 67cb25
      84.8900E0,
Packit 67cb25
      85.2600E0,
Packit 67cb25
      85.7400E0,
Packit 67cb25
      86.0700E0,
Packit 67cb25
      86.5400E0,
Packit 67cb25
      86.8900E0,
Packit 67cb25
      87.3200E0,
Packit 67cb25
      87.6500E0,
Packit 67cb25
      88.1000E0,
Packit 67cb25
      88.4300E0,
Packit 67cb25
      88.8300E0,
Packit 67cb25
      89.1200E0,
Packit 67cb25
      89.5400E0,
Packit 67cb25
      89.8500E0,
Packit 67cb25
      90.2500E0,
Packit 67cb25
      90.5500E0,
Packit 67cb25
      90.9300E0,
Packit 67cb25
      91.2000E0,
Packit 67cb25
      91.5500E0,
Packit 67cb25
      92.2000E0
Packit 67cb25
};
Packit 67cb25
Packit 67cb25
Packit 67cb25
static double kirby2_F0[kirby2_N] = {
Packit 67cb25
    9.65E0,
Packit 67cb25
   10.74E0,
Packit 67cb25
   11.81E0,
Packit 67cb25
   12.88E0,
Packit 67cb25
   14.06E0,
Packit 67cb25
   15.28E0,
Packit 67cb25
   16.63E0,
Packit 67cb25
   18.19E0,
Packit 67cb25
   19.88E0,
Packit 67cb25
   21.84E0,
Packit 67cb25
   24.00E0,
Packit 67cb25
   26.25E0,
Packit 67cb25
   28.86E0,
Packit 67cb25
   31.85E0,
Packit 67cb25
   35.79E0,
Packit 67cb25
   40.18E0,
Packit 67cb25
   44.74E0,
Packit 67cb25
   49.53E0,
Packit 67cb25
   53.94E0,
Packit 67cb25
   58.29E0,
Packit 67cb25
   62.63E0,
Packit 67cb25
   67.03E0,
Packit 67cb25
   71.25E0,
Packit 67cb25
   75.22E0,
Packit 67cb25
   79.33E0,
Packit 67cb25
   83.56E0,
Packit 67cb25
   87.75E0,
Packit 67cb25
   91.93E0,
Packit 67cb25
   96.10E0,
Packit 67cb25
  100.28E0,
Packit 67cb25
  104.46E0,
Packit 67cb25
  108.66E0,
Packit 67cb25
  112.71E0,
Packit 67cb25
  116.88E0,
Packit 67cb25
  121.33E0,
Packit 67cb25
  125.79E0,
Packit 67cb25
  125.79E0,
Packit 67cb25
  128.74E0,
Packit 67cb25
  130.27E0,
Packit 67cb25
  133.33E0,
Packit 67cb25
  134.79E0,
Packit 67cb25
  137.93E0,
Packit 67cb25
  139.33E0,
Packit 67cb25
  142.46E0,
Packit 67cb25
  143.90E0,
Packit 67cb25
  146.91E0,
Packit 67cb25
  148.51E0,
Packit 67cb25
  151.41E0,
Packit 67cb25
  153.17E0,
Packit 67cb25
  155.97E0,
Packit 67cb25
  157.76E0,
Packit 67cb25
  160.56E0,
Packit 67cb25
  162.30E0,
Packit 67cb25
  165.21E0,
Packit 67cb25
  166.90E0,
Packit 67cb25
  169.92E0,
Packit 67cb25
  170.32E0,
Packit 67cb25
  171.54E0,
Packit 67cb25
  173.79E0,
Packit 67cb25
  174.57E0,
Packit 67cb25
  176.25E0,
Packit 67cb25
  177.34E0,
Packit 67cb25
  179.19E0,
Packit 67cb25
  181.02E0,
Packit 67cb25
  182.08E0,
Packit 67cb25
  183.88E0,
Packit 67cb25
  185.75E0,
Packit 67cb25
  186.80E0,
Packit 67cb25
  188.63E0,
Packit 67cb25
  190.45E0,
Packit 67cb25
  191.48E0,
Packit 67cb25
  193.35E0,
Packit 67cb25
  195.22E0,
Packit 67cb25
  196.23E0,
Packit 67cb25
  198.05E0,
Packit 67cb25
  199.97E0,
Packit 67cb25
  201.06E0,
Packit 67cb25
  202.83E0,
Packit 67cb25
  204.69E0,
Packit 67cb25
  205.86E0,
Packit 67cb25
  207.58E0,
Packit 67cb25
  209.50E0,
Packit 67cb25
  210.65E0,
Packit 67cb25
  212.33E0,
Packit 67cb25
  215.43E0,
Packit 67cb25
  217.16E0,
Packit 67cb25
  220.21E0,
Packit 67cb25
  221.98E0,
Packit 67cb25
  225.06E0,
Packit 67cb25
  226.79E0,
Packit 67cb25
  229.92E0,
Packit 67cb25
  231.69E0,
Packit 67cb25
  234.77E0,
Packit 67cb25
  236.60E0,
Packit 67cb25
  239.63E0,
Packit 67cb25
  241.50E0,
Packit 67cb25
  244.48E0,
Packit 67cb25
  246.40E0,
Packit 67cb25
  249.35E0,
Packit 67cb25
  251.32E0,
Packit 67cb25
  254.22E0,
Packit 67cb25
  256.24E0,
Packit 67cb25
  259.11E0,
Packit 67cb25
  261.18E0,
Packit 67cb25
  264.02E0,
Packit 67cb25
  266.13E0,
Packit 67cb25
  268.94E0,
Packit 67cb25
  271.09E0,
Packit 67cb25
  273.87E0,
Packit 67cb25
  276.08E0,
Packit 67cb25
  278.83E0,
Packit 67cb25
  281.08E0,
Packit 67cb25
  283.81E0,
Packit 67cb25
  286.11E0,
Packit 67cb25
  288.81E0,
Packit 67cb25
  291.08E0,
Packit 67cb25
  293.75E0,
Packit 67cb25
  295.99E0,
Packit 67cb25
  298.64E0,
Packit 67cb25
  300.84E0,
Packit 67cb25
  302.02E0,
Packit 67cb25
  303.48E0,
Packit 67cb25
  305.65E0,
Packit 67cb25
  308.27E0,
Packit 67cb25
  310.41E0,
Packit 67cb25
  313.01E0,
Packit 67cb25
  315.12E0,
Packit 67cb25
  317.71E0,
Packit 67cb25
  319.79E0,
Packit 67cb25
  322.36E0,
Packit 67cb25
  324.42E0,
Packit 67cb25
  326.98E0,
Packit 67cb25
  329.01E0,
Packit 67cb25
  331.56E0,
Packit 67cb25
  333.56E0,
Packit 67cb25
  336.10E0,
Packit 67cb25
  338.08E0,
Packit 67cb25
  340.60E0,
Packit 67cb25
  342.57E0,
Packit 67cb25
  345.08E0,
Packit 67cb25
  347.02E0,
Packit 67cb25
  349.52E0,
Packit 67cb25
  351.44E0,
Packit 67cb25
  353.93E0,
Packit 67cb25
  355.83E0,
Packit 67cb25
  358.32E0,
Packit 67cb25
  360.20E0,
Packit 67cb25
  362.67E0,
Packit 67cb25
  364.53E0,
Packit 67cb25
  367.00E0,
Packit 67cb25
  371.30E0
Packit 67cb25
};
Packit 67cb25
Packit 67cb25
static void
Packit 67cb25
kirby2_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 = 3.9050739624E+00;
Packit 67cb25
  const double kirby2_x[kirby2_P] = {
Packit 67cb25
    1.6745063063E+00, -1.3927397867E-01, 2.5961181191E-03,
Packit 67cb25
   -1.7241811870E-03, 2.1664802578E-05 };
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 < kirby2_P; ++i)
Packit 67cb25
    {
Packit 67cb25
      gsl_test_rel(x[i], kirby2_x[i], epsrel, "%s/%s i=%zu",
Packit 67cb25
                   sname, pname, i);
Packit 67cb25
    }
Packit 67cb25
}
Packit 67cb25
Packit 67cb25
static int
Packit 67cb25
kirby2_f (const gsl_vector * x, void *params, gsl_vector * f)
Packit 67cb25
{
Packit 67cb25
  double b[kirby2_P];
Packit 67cb25
  size_t i;
Packit 67cb25
Packit 67cb25
  for (i = 0; i < kirby2_P; i++)
Packit 67cb25
    {
Packit 67cb25
      b[i] = gsl_vector_get(x, i);
Packit 67cb25
    }
Packit 67cb25
Packit 67cb25
  for (i = 0; i < kirby2_N; i++)
Packit 67cb25
    {
Packit 67cb25
      double x = kirby2_F0[i];
Packit 67cb25
      double y = ((b[0] + x* (b[1]  + x * b[2]))
Packit 67cb25
                  / (1 + x*(b[3]  + x *b[4])));
Packit 67cb25
      gsl_vector_set (f, i, kirby2_F1[i] - y);
Packit 67cb25
    }
Packit 67cb25
Packit 67cb25
  return GSL_SUCCESS;
Packit 67cb25
}
Packit 67cb25
Packit 67cb25
static int
Packit 67cb25
kirby2_df (const gsl_vector * x, void *params, gsl_matrix * df)
Packit 67cb25
{
Packit 67cb25
  double b[kirby2_P];
Packit 67cb25
  size_t i;
Packit 67cb25
Packit 67cb25
  for (i = 0; i < kirby2_P; i++)
Packit 67cb25
    {
Packit 67cb25
      b[i] = gsl_vector_get(x, i);
Packit 67cb25
    }
Packit 67cb25
Packit 67cb25
  for (i = 0; i < kirby2_N; i++)
Packit 67cb25
    {
Packit 67cb25
      double x = kirby2_F0[i];
Packit 67cb25
      double u = (b[0] + x*(b[1] + x*b[2]));
Packit 67cb25
      double v = (1 + x*(b[3] + x*b[4]));
Packit 67cb25
      gsl_matrix_set (df, i, 0, -1/v);
Packit 67cb25
      gsl_matrix_set (df, i, 1, -x/v);
Packit 67cb25
      gsl_matrix_set (df, i, 2, -x*x/v);
Packit 67cb25
      gsl_matrix_set (df, i, 3, x*u/(v*v));
Packit 67cb25
      gsl_matrix_set (df, i, 4, x*x*u/(v*v));
Packit 67cb25
    }
Packit 67cb25
Packit 67cb25
  return GSL_SUCCESS;
Packit 67cb25
}
Packit 67cb25
Packit 67cb25
static gsl_multifit_function_fdf kirby2_func =
Packit 67cb25
{
Packit 67cb25
  &kirby2_f,
Packit 67cb25
  &kirby2_df,
Packit 67cb25
  NULL,
Packit 67cb25
  kirby2_N,
Packit 67cb25
  kirby2_P,
Packit 67cb25
  NULL,
Packit 67cb25
  0,
Packit 67cb25
  0
Packit 67cb25
};
Packit 67cb25
Packit 67cb25
static test_fdf_problem kirby2_problem =
Packit 67cb25
{
Packit 67cb25
  "nist-kirby2",
Packit 67cb25
  kirby2_x0,
Packit 67cb25
  kirby2_sigma,
Packit 67cb25
  &kirby2_epsrel,
Packit 67cb25
  kirby2_NTRIES,
Packit 67cb25
  &kirby2_checksol,
Packit 67cb25
  &kirby2_func
Packit 67cb25
};